[Sumover-dev] [svn commit] r4733 - vic/branches/mpeg4/video

sumover-dev at cs.ucl.ac.uk sumover-dev at cs.ucl.ac.uk
Sun Mar 28 08:57:22 BST 2010


Author: douglask
Date: Sun Mar 28 08:57:21 2010
New Revision: 4733

Modified:
   vic/branches/mpeg4/video/grabber-win32DS.cpp
   vic/branches/mpeg4/video/grabber-win32DS.h

Log:
Added explicit support for MEDIASUBTYPE_HDYC as used by Blackmagic capture cards.

If DV Video Decoder is used, set media subtype for SampleGrabber to MEDIASUBTYPE_UYVY.

Set fallback media subtype for SampleGrabber to MEDIASUBTYPE_RGB24.

Modified: vic/branches/mpeg4/video/grabber-win32DS.cpp
==============================================================================
--- vic/branches/mpeg4/video/grabber-win32DS.cpp	(original)
+++ vic/branches/mpeg4/video/grabber-win32DS.cpp	Sun Mar 28 08:57:21 2010
@@ -141,6 +141,10 @@
 static const GUID MEDIASUBTYPE_I420 =
 {0x30323449, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
 
+static const GUID MEDIASUBTYPE_HDYC =
+{0x43594448, 0x0000, 0x0010, {0x80, 0x00, 0x00, 0xaa, 0x00, 0x38, 0x9b, 0x71}};
+
+
 #define NAMEBUF_LEN 200
 
 IBaseFilter  *pCaptureFilter[NUM_DEVS];
@@ -226,6 +230,7 @@
    have_UYVY_ = false;
    have_YUY2_ = false;
    have_RGB24_= false;
+   have_HDYC_= false;
    have_DVSD_ = false;
 
    setport("external-in");
@@ -344,7 +349,9 @@
    mt_.majortype = MEDIATYPE_Video;
 
    if (cformat_ == CF_422) {
-	   if (have_YUY2_) {
+	   if (have_HDYC_) {
+		   mt_.subtype = MEDIASUBTYPE_HDYC; // Blackmagic Packed YUV 422
+	   } else if (have_YUY2_) {
 		   mt_.subtype = MEDIASUBTYPE_YUY2; // Packed YUV 422
 	   } else if (have_UYVY_) {
 		   mt_.subtype = MEDIASUBTYPE_UYVY; // Packed YUV 422
@@ -352,20 +359,26 @@
 		   mt_.subtype = MEDIASUBTYPE_I420; // Planar YUV 420
 	   } else if (have_RGB24_) {
 		   mt_.subtype = MEDIASUBTYPE_RGB24; // RGB 24 bit
-	   } else {
+	   } else if (have_DVSD_) {
 		   mt_.subtype = MEDIASUBTYPE_UYVY;
+	   } else {
+		   mt_.subtype = MEDIASUBTYPE_RGB24;
 	   }
    } else {
 	   if (have_I420_) {
 		   mt_.subtype = MEDIASUBTYPE_I420; // Planar YUV 420
+	   } else if (have_HDYC_) {
+		   mt_.subtype = MEDIASUBTYPE_HDYC; // Blackmagic Packed YUV 422
 	   } else if (have_YUY2_) {
 		   mt_.subtype = MEDIASUBTYPE_YUY2; // Packed YUV 422
 	   } else if (have_UYVY_) {
 		   mt_.subtype = MEDIASUBTYPE_UYVY; // Packed YUV 422
 	   } else if (have_RGB24_) {
 		   mt_.subtype = MEDIASUBTYPE_RGB24; // RGB 24 bit
-	   } else {
+	   } else if (have_DVSD_) {
 		   mt_.subtype = MEDIASUBTYPE_UYVY;
+	   } else {
+		   mt_.subtype = MEDIASUBTYPE_RGB24;
 	   }
    }
 
@@ -400,7 +413,7 @@
 		   Grabber::status_=-1;
 		   return;
 	   }
-	   debug_msg("DirectShowGrabber::DirectShowGrabber():  Null Renderer added to graph\n");
+	   debug_msg("DirectShowGrabber::DirectShowGrabber():  DV Video Decoder added to graph\n");
    }
 
    IMoniker * pMoniker = NULL;
@@ -738,7 +751,7 @@
        planarYUYV420_to_planarYUYV420((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_);
      else if (have_YUY2_)
        packedYUYV422_to_planarYUYV420((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_);
-     else if (have_UYVY_)
+     else if (have_UYVY_ || have_HDYC_)
        packedUYVY422_to_planarYUYV420((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_);
      else if (have_RGB24_)
        converter_->convert((u_int8_t*)last_frame_, width_, height_, frame_, outw_, outh_, TRUE);
@@ -749,7 +762,7 @@
    case CF_422:
      if (have_YUY2_)
        packedYUYV422_to_planarYUYV422((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_);
-     else if (have_UYVY_)
+     else if (have_UYVY_ || have_HDYC_)
        packedUYVY422_to_planarYUYV422((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_);
      else if (have_I420_)
        planarYUYV420_to_planarYUYV422((char *)frame_, outw_, outh_, (char *)last_frame_, inw_, inh_);
@@ -865,6 +878,8 @@
                            have_UYVY_ = true; // Packed YUV 422
                        } else if (pmtConfig->subtype == MEDIASUBTYPE_YUY2) {
                            have_YUY2_ = true; // Packed YUV 422
+                       } else if (pmtConfig->subtype == MEDIASUBTYPE_HDYC) {
+                           have_HDYC_ = true; // Blackmagic Packed YUV 422
                        } else if (pmtConfig->subtype == MEDIASUBTYPE_RGB24) {
                            have_RGB24_ = true; // RGB 24 bit
                        } else if (pmtConfig->subtype == MEDIASUBTYPE_dvsd) {
@@ -937,7 +952,9 @@
       switch (cformat_) {
       case CF_420:
       case CF_CIF:
-          if (have_I420_)
+          if (have_HDYC_)
+              mediasubtype = MEDIASUBTYPE_HDYC; // Blackmagic Packed YUV 422
+		  else if (have_I420_)
               mediasubtype = MEDIASUBTYPE_I420; // Planar YUV 420
           else if (have_UYVY_)
               mediasubtype = MEDIASUBTYPE_UYVY; // Packed YUV 422
@@ -948,7 +965,9 @@
         break;
 
       case CF_422:
-          if (have_I420_)
+          if (have_HDYC_)
+              mediasubtype = MEDIASUBTYPE_HDYC; // Blackmagic Packed YUV 422
+          else if (have_I420_)
               mediasubtype = MEDIASUBTYPE_I420; // Planar YUV 420
           else if (have_UYVY_)
               mediasubtype = MEDIASUBTYPE_UYVY; // Packed YUV 422

Modified: vic/branches/mpeg4/video/grabber-win32DS.h
==============================================================================
--- vic/branches/mpeg4/video/grabber-win32DS.h	(original)
+++ vic/branches/mpeg4/video/grabber-win32DS.h	Sun Mar 28 08:57:21 2010
@@ -161,6 +161,7 @@
       bool         have_I420_;  // YUV 4:2:0 planar
       bool         have_UYVY_;  // YUV 4:2:2 packed
       bool         have_YUY2_;  // as for UYVY but with different component ordering
+      bool         have_HDYC_;  // YUV 4:2:2 packed, same as UYVY but using BT709 color space
       bool         have_RGB24_; // RGB 24 bit
       bool         have_DVSD_;  // DV standard definition
 



More information about the Sumover-dev mailing list