[0.11] gst-plugins-bad: d3dvideosink: added NV12 + enabled RGB support
Wim Taymans
wtay at kemper.freedesktop.org
Fri Feb 10 07:47:22 PST 2012
Module: gst-plugins-bad
Branch: 0.11
Commit: 12407a13a0900bf0689bb380cc40b820a9fd5317
URL: http://cgit.freedesktop.org/gstreamer/gst-plugins-bad/commit/?id=12407a13a0900bf0689bb380cc40b820a9fd5317
Author: Carsten Kroll <car at ximidi.com>
Date: Mon Aug 22 14:13:30 2011 +0200
d3dvideosink: added NV12 + enabled RGB support
---
sys/d3dvideosink/d3dvideosink.c | 33 ++++++++++++++++++++++++++++++---
1 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/sys/d3dvideosink/d3dvideosink.c b/sys/d3dvideosink/d3dvideosink.c
index ed4d249..15d6f4b 100644
--- a/sys/d3dvideosink/d3dvideosink.c
+++ b/sys/d3dvideosink/d3dvideosink.c
@@ -89,12 +89,11 @@ struct _IPCData
GST_DEBUG_CATEGORY (d3dvideosink_debug);
#define GST_CAT_DEFAULT d3dvideosink_debug
-/* TODO: Support RGB! */
static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ YUY2, UYVY, YV12, I420 }"))
- //";" GST_VIDEO_CAPS_RGBx)
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("{ YUY2, UYVY, YV12, I420, NV12 }")
+ ";" GST_VIDEO_CAPS_BGRx ";" GST_VIDEO_CAPS_BGRA)
);
static void gst_d3dvideosink_init_interfaces (GType type);
@@ -1678,6 +1677,30 @@ gst_d3dvideosink_show_frame (GstVideoSink * vsink, GstBuffer * buffer)
}
break;
}
+ case GST_MAKE_FOURCC ('N', 'V', '1', '2'):
+ {
+ guint8 *dst = dest;
+ int component;
+ dststride = lr.Pitch;
+ for (component = 0; component < 2; component++) {
+ const int compHeight =
+ gst_video_format_get_component_height (sink->format,
+ component, sink->height);
+ guint8 *src =
+ source +
+ gst_video_format_get_component_offset (sink->format,
+ component, sink->width, sink->height);
+ srcstride =
+ gst_video_format_get_row_stride (sink->format, component,
+ sink->width);
+ for (i = 0; i < compHeight; i++) {
+ memcpy (dst + dststride * i, src + srcstride * i,
+ srcstride);
+ }
+ dst += dststride * compHeight;
+ }
+ break;
+ }
default:
g_assert_not_reached ();
}
@@ -2124,6 +2147,10 @@ gst_d3dvideosink_initialize_swap_chain (GstD3DVideoSink * sink)
d3dformat = D3DFMT_X8R8G8B8;
d3dfourcc = (D3DFORMAT) MAKEFOURCC ('Y', 'V', '1', '2');
break;
+ case GST_MAKE_FOURCC ('N', 'V', '1', '2'):
+ d3dformat = D3DFMT_X8R8G8B8;
+ d3dfourcc = (D3DFORMAT) MAKEFOURCC ('N', 'V', '1', '2');
+ break;
default:
g_assert_not_reached ();
goto error;
More information about the gstreamer-commits
mailing list