[Sumover-dev] [svn commit] r4917 - vic/branches/cc/video

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Mon Oct 29 15:27:16 GMT 2012


Author: soohyunc
Date: Mon Oct 29 15:27:15 2012
New Revision: 4917

Added:
   vic/branches/cc/video/grabber-still.cpp   (contents, props changed)

Log:
Copied "video/grabber-still.cpp" from the mpeg4 branch.



Added: vic/branches/cc/video/grabber-still.cpp
==============================================================================
--- (empty file)
+++ vic/branches/cc/video/grabber-still.cpp	Mon Oct 29 15:27:15 2012
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 1993-1995 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. Neither the names of the copyright holders nor the names of its
+ *    contributors may be used to endorse or promote products derived from
+ *    this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
+ * IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contributed by Bob Olson (olson at mcs.anl.gov) September 1995.
+ */
+
+#ifndef lint
+static const char rcsid[] =
+    "@(#) $Header$ (LBL)";
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#ifndef WIN32
+#include <sys/file.h>
+#endif
+#include <sys/stat.h>
+
+#include "inet.h"
+#include "vic_tcl.h"
+#include "rtp.h"
+#include "grabber.h"
+#include "crdef.h"
+#include "device-input.h"
+#include "transmitter.h"
+#include "module.h"
+
+/* #define DEBUG 1 */
+
+class StillGrabber : public Grabber {
+public:
+	StillGrabber();
+	virtual ~StillGrabber();
+	virtual int command(int argc, const char* const * argv);
+protected:
+	void start();
+	void stop();
+	int grab();
+};
+
+class StillDevice : public InputDevice {
+public:
+    StillDevice(const char* s);
+    virtual int command(int argc, const char * const * argv);
+    virtual Grabber* jpeg_grabber();
+
+    void load_file(const char * const file);
+    char *frame_;
+    int len_;
+};
+
+static StillDevice still_device("still");
+
+StillDevice::StillDevice(const char* s) : InputDevice(s),
+		frame_(NULL), len_(0)
+{
+    attributes_ = "format { jpeg }";
+    
+#ifdef DEBUG
+    debug_msg("StillDevice::StillDevice name=%s\n", s);
+#endif /* DEBUG */
+}
+
+void StillDevice::load_file(const char * const f)
+{
+    FILE *fp;
+    struct stat s;
+    
+    fp = fopen(f, "r");
+    if (fp == (FILE *) NULL)
+    {
+	perror("cannot stat frame");
+	return;
+    }
+    if (fstat(fileno(fp), &s) < 0)
+    {
+	perror("cannot stat frame");
+	fclose(fp);
+	return;
+    }
+    
+    len_ = s.st_size;
+    if (frame_)
+	delete[] frame_; //SV-XXX: Debian
+    
+    frame_ = new char[len_ + 1];
+    fread(frame_, len_, 1, fp);
+
+    fclose(fp);
+}
+
+int StillDevice::command(int argc, const char*const* argv)
+{
+#ifdef DEBUG
+    debug_msg("StillDevice %s\n", argv[2]);
+#endif
+    if (argc == 3)
+    {
+	if (strcmp(argv[1], "open") == 0)
+	{
+	    const char* fmt = argv[2];
+	    TclObject* o = 0;
+	    if (strcmp(fmt, "jpeg") == 0)
+		o = jpeg_grabber();
+	    if (o != 0)
+		Tcl::instance().result(o->name());
+	    return (TCL_OK);
+	}
+	else if (strcmp(argv[1], "file") == 0)
+	{
+	    debug_msg("Loading %s\n", argv[2]);
+	    load_file(argv[2]);
+	    return (TCL_OK);
+	}
+    }
+    return (InputDevice::command(argc, argv));
+}
+
+
+Grabber* StillDevice::jpeg_grabber()
+{
+    return (new StillGrabber());
+}
+
+StillGrabber::StillGrabber()
+{
+}
+
+StillGrabber::~StillGrabber()
+{
+#ifdef DEBUG
+    debug_msg("Destroy StillGrabber\n");
+#endif
+}
+
+
+int StillGrabber::command(int argc, const char * const * argv)
+{
+    //SV-XXX: unused: Tcl& tcl = Tcl::instance();
+    
+#ifdef DEBUG
+    debug_msg("StillGrabber::command argc=%d ", argc);
+    int i;
+    for (i = 0; i < argc; i++)
+	debug_msg("\"%s\" ", argv[i]);
+    debug_msg("\n");
+#endif /* DEBUG */
+
+    if (argc == 3)
+    {
+	if (strcmp(argv[1], "q") == 0)
+	{
+	    return TCL_OK;
+	}
+    }
+
+    return (Grabber::command(argc, argv));
+}
+
+void StillGrabber::start()
+{
+    frameclock_ = gettimeofday_usecs();
+
+    timeout();
+}
+
+void StillGrabber::stop()
+{
+    cancel();
+}
+
+int StillGrabber::grab()
+{
+    int frc=0; //SV-XXX: gcc4 warns for initialisation
+
+    if (still_device.frame_) {
+	JpegFrame f(media_ts(), (u_int8_t *) still_device.frame_,
+		    still_device.len_,
+		    80, 0, 320, 240);
+	frc = target_->consume(&f);
+    }
+
+    return frc;
+}
+
+



More information about the Sumover-dev mailing list