[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