[Sumover-dev] [svn commit] r4870 - in vic/branches/cc: codec rtp tcl

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Thu Jul 15 20:43:44 BST 2010


Author: piers
Date: Thu Jul 15 20:43:43 2010
New Revision: 4870

Modified:
   vic/branches/cc/codec/decoder.cpp
   vic/branches/cc/rtp/transmitter.cpp
   vic/branches/cc/tcl/ui-main.tcl
   vic/branches/cc/video/grabber-still.cpp

Log:
Updated PSNR code so it works with remote receiver - need to load uncompressed file into still grabber on recv and sender. Noticed a problem with using Grabber.frame_ - it is for a single frame storage and gets changed when format/size gets altered. We should use something else...


Modified: vic/branches/cc/codec/decoder.cpp
==============================================================================
--- vic/branches/cc/codec/decoder.cpp	(original)
+++ vic/branches/cc/codec/decoder.cpp	Thu Jul 15 20:43:43 2010
@@ -152,7 +152,7 @@
 		}
 		if (strcmp(argv[1], "grabber") == 0) {
 			grabber_ = (Grabber*)TclObject::lookup(argv[2]);
-			fprintf(stderr,"Setting this %d grabber_:%d\n", this,grabber_);
+			fprintf(stderr,"Decoder:Setting this %d grabber_:%d\n", this,grabber_);
 			return (TCL_OK);
 		}
 	}
@@ -322,8 +322,6 @@
   return psnr;
 }
 
-extern Grabber *ggrabber;
-
 void Decoder::render_frame(const u_char* frm, int frame_no)
 {
 	/*
@@ -336,7 +334,7 @@
 	 * an unchanging block, this approach renders it 2 times out of 256,
 	 * rather than 128 out of 256.
 	 */
-        double psnr;
+        double psnr=0;
 	int wraptime = now_ ^ 0x80;
 	u_char* ts = rvts_;
 	for (int k = nblk_; --k >= 0; ++ts) {
@@ -345,9 +343,11 @@
 	}
 
 	YuvFrame f(now_, (u_int8_t*)frm, rvts_, inw_, inh_,0, frame_no);
-	if (inw_*inh_ == grabber_->framesize_) {
-           psnr = calc_psnr((u_int8_t*)frm, (u_int8_t*)grabber_->frame_+frame_no*(grabber_->framesize_+(grabber_->framesize_>>1)), inw_, inh_);
-  	   fprintf(stderr,"Frame (%dx%d;fsz:%d,%d): %d, PSNR: %f\n",inw_,inh_, grabber_,grabber_->framesize_, frame_no, psnr);
+	if (grabber_!=0) {
+	     int framesize=inw_*inh_;
+	     psnr = calc_psnr((u_int8_t*)frm, (u_int8_t*)grabber_->frame_+frame_no*(framesize+(framesize>>1)), inw_, inh_);
+	     //psnr = calc_psnr((u_int8_t*)frm, (u_int8_t*)grabber_->frame_+frame_no*(grabber_->framesize_+(grabber_->framesize_>>1)), inw_, inh_);
+	     fprintf(stderr,"Frame (%dx%d;fsz:%d(%d),Grabber:%x): #%d, PSNR: %f\n",inw_,inh_,inw_*inh_, grabber_->framesize_,grabber_, frame_no, psnr);
 	}
 	for (Renderer* p = engines_; p != 0; p = p->next_)
 		if ((p->ft() & FT_HW) == 0)

Modified: vic/branches/cc/rtp/transmitter.cpp
==============================================================================
--- vic/branches/cc/rtp/transmitter.cpp	(original)
+++ vic/branches/cc/rtp/transmitter.cpp	Thu Jul 15 20:43:43 2010
@@ -527,7 +527,6 @@
 void Transmitter::timeout()
 {
 	double now = gettimeofday_secs();
-        pktbuf* p = head_;
 
 	switch (cc_type_) {
 	case RBCC:

Modified: vic/branches/cc/tcl/ui-main.tcl
==============================================================================
--- vic/branches/cc/tcl/ui-main.tcl	(original)
+++ vic/branches/cc/tcl/ui-main.tcl	Thu Jul 15 20:43:43 2010
@@ -757,7 +757,7 @@
 }
 
 proc create_decoder src {
-	global numLayers V
+	global numLayers videoDevice V
 
 	set format [rtp_format $src]
 	set decoder [new decoder $format]
@@ -770,7 +770,18 @@
 		$decoder maxChannel $numLayers
 	}
        	# Inform decoder obj of grabber to enable PSNR calculation
-        $decoder grabber $V(grabber)
+	if { [$videoDevice nickname] == "still" } {
+	    if ![have grabber] {
+		    set V(grabber) [$videoDevice open cif]
+		    if { $V(grabber) != "" } {
+	      puts "ssspam"
+		       $decoder grabber $V(grabber)
+		    }
+	    } else {
+	      puts "spam"
+		    $decoder grabber $V(grabber)
+	    }
+        }
 
 	$src handler $decoder
 	return $decoder
@@ -817,7 +828,6 @@
 	grid columnconfigure $V(grid) $V(curcol) -weight 1
 
 	update_decoder $src
-        $V(decoder) grabber $V(grabber)
 	after 1000 "update_src $src"
 
 	bump

Modified: vic/branches/cc/video/grabber-still.cpp
==============================================================================
--- vic/branches/cc/video/grabber-still.cpp	(original)
+++ vic/branches/cc/video/grabber-still.cpp	Thu Jul 15 20:43:43 2010
@@ -106,6 +106,7 @@
     u_char *frame_;
     int len_;
     int devstat_;	// device status
+    Grabber* grabber_;
 private:
 };
 
@@ -134,14 +135,18 @@
     {
 	if (strcmp(argv[1], "open") == 0)
 	{
-	    const char* fmt = argv[2];
-	    TclObject* o = 0;
-	    if (strcmp(fmt, "cif") == 0)
-	    		o = yuv_grabber();
-	    if (strcmp(fmt, "jpeg") == 0)
-			o = jpeg_grabber();
-	    if (o != 0)
-			Tcl::instance().result(o->name());
+	    if (frame_ != 0) {
+		const char* fmt = argv[2];
+		TclObject* o = 0;
+		if (strcmp(fmt, "cif") == 0)
+			    o = yuv_grabber();
+		if (strcmp(fmt, "jpeg") == 0)
+			    o = jpeg_grabber();
+		if (o != 0) {
+			    Tcl::instance().result(o->name());
+			    grabber_=(Grabber*)o;
+		}
+	    }
 	    return (TCL_OK);
 	}
 	else if (strcmp(argv[1], "file") == 0)
@@ -184,12 +189,11 @@
     
     len_ = s.st_size;
     if (frame_)
-		delete[] frame_; //SV-XXX: Debian
+	delete[] frame_; //SV-XXX: Debian
     
-    frame_ = new u_char[len_ + 1];
+        frame_ = new u_char[len_ + 1];
 	r = fread(frame_, len_, 1, fp);
-	debug_msg("Successfully loaded %s\n", f);
-
+	fprintf(stderr,"Successfully loaded %s\n", f);
 	devstat_ = 0;	// device is now ready
     fclose(fp);
 }
@@ -317,6 +321,8 @@
 	width_(0), height_(0), nbytes_(0)
 {
 	grabber_ts_off_ = grabber_now();
+	frame_=still_device.frame_;
+	fprintf(stderr,"StillYuvGrabber::StillYuvGrabber:frame_:%x\n",frame_);
 }
 
 StillYuvGrabber::~StillYuvGrabber()
@@ -334,8 +340,9 @@
 void StillYuvGrabber::start()
 {
 	target_->offset_ = grabber_ts_off_;
+	// XXX Need to change frame_ - it used for storage of video frame and (re)allocated elsewhere
 	frame_=still_device.frame_;
-	fprintf(stderr,"frame_:%x\n",frame_);
+	fprintf(stderr,"StillYuvGrabber::start:frame_:%x\n",frame_);
 	Grabber::start();
 }
 



More information about the Sumover-dev mailing list