diff --git a/sys/decklink/Makefile.am b/sys/decklink/Makefile.am index 22863edc33..063f27dcc9 100644 --- a/sys/decklink/Makefile.am +++ b/sys/decklink/Makefile.am @@ -8,6 +8,7 @@ libgstdecklink_la_CPPFLAGS = \ libgstdecklink_la_LIBADD = \ $(GST_BASE_LIBS) \ $(GST_LIBS) \ + -lgstvideo-@GST_MAJORMINOR@ \ $(DECKLINK_LIBS) \ $(LIBM) libgstdecklink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h index e69d14bb82..bd1d1d30b7 100644 --- a/sys/decklink/gstdecklink.h +++ b/sys/decklink/gstdecklink.h @@ -108,7 +108,7 @@ GstCaps * gst_decklink_mode_get_caps (GstDecklinkModeEnum e); 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 \ diff --git a/sys/decklink/gstdecklinksink.cpp b/sys/decklink/gstdecklinksink.cpp index 62cdff1ff7..1f5dbd6678 100644 --- a/sys/decklink/gstdecklinksink.cpp +++ b/sys/decklink/gstdecklinksink.cpp @@ -36,6 +36,7 @@ #include #include +#include #include "gstdecklink.h" #include "gstdecklinksink.h" #include @@ -596,11 +597,24 @@ static gboolean 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; @@ -713,7 +727,7 @@ gst_decklink_sink_videosink_chain (GstPad * pad, GstBuffer * buffer) 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); @@ -864,7 +878,6 @@ gst_decklink_sink_audiosink_setcaps (GstPad * pad, GstCaps * caps) GST_DEBUG_OBJECT (decklinksink, "setcaps"); - gst_object_unref (decklinksink); return TRUE; } diff --git a/sys/decklink/gstdecklinksink.h b/sys/decklink/gstdecklinksink.h index b5f07005a4..31d70cd785 100644 --- a/sys/decklink/gstdecklinksink.h +++ b/sys/decklink/gstdecklinksink.h @@ -67,6 +67,7 @@ struct _GstDecklinkSink IDeckLinkOutput *output; Output *callback; BMDDisplayMode display_mode; + BMDPixelFormat pixel_format; gboolean video_enabled; gboolean sched_started;