GstCaps * gst_decklink_mode_get_template_caps (void);
#define GST_DECKLINK_MODE_CAPS(w,h,n,d,i) \
- "video/x-raw-yuv,format=(fourcc)UYVY,width=" #w ",height=" #h \
+ "video/x-raw-yuv,format=(fourcc){ UYVY, v210 },width=" #w ",height=" #h \
",framerate=" #n "/" #d ",interlaced=" #i
#define GST_DECKLINK_CAPS \
#include <gst/gst.h>
#include <gst/glib-compat-private.h>
+#include <gst/video/video.h>
#include "gstdecklink.h"
#include "gstdecklinksink.h"
#include <string.h>
gst_decklink_sink_videosink_setcaps (GstPad * pad, GstCaps * caps)
{
GstDecklinkSink *decklinksink;
+ gboolean ret;
+ GstVideoFormat format;
+ int width;
+ int height;
decklinksink = GST_DECKLINK_SINK (gst_pad_get_parent (pad));
GST_DEBUG_OBJECT (decklinksink, "setcaps");
+ ret = gst_video_format_parse_caps (caps, &format, &width, &height);
+ if (ret) {
+ if (format == GST_VIDEO_FORMAT_v210) {
+ decklinksink->pixel_format = bmdFormat10BitYUV;
+ } else {
+ decklinksink->pixel_format = bmdFormat8BitYUV;
+ }
+ }
+
gst_object_unref (decklinksink);
return TRUE;
mode = gst_decklink_get_mode (decklinksink->mode);
decklinksink->output->CreateVideoFrame (mode->width,
- mode->height, mode->width * 2, bmdFormat8BitYUV,
+ mode->height, mode->width * 2, decklinksink->pixel_format,
bmdFrameFlagDefault, &frame);
frame->GetBytes (&data);
GST_DEBUG_OBJECT (decklinksink, "setcaps");
-
gst_object_unref (decklinksink);
return TRUE;
}