static GstCaps * new_gl_texture_upload_meta_caps (void) { return gst_caps_from_string (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, "{ RGBA, BGRA }")); }
#ifndef _WIN32 #include "gstmsdkallocator_libva.h" #endif GST_DEBUG_CATEGORY_EXTERN (gst_msdkvpp_debug); #define GST_CAT_DEFAULT gst_msdkvpp_debug static GstStaticPadTemplate gst_msdkvpp_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("{ NV12, YV12, I420, YUY2, UYVY, BGRA, BGRx }") ", " "interlace-mode = (string){ progressive, interleaved, mixed }" ";" GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_DMABUF, "{ NV12, BGRA, YUY2}"))); static GstStaticPadTemplate gst_msdkvpp_src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_DMABUF, "{ BGRA, YUY2, NV12}") ";" GST_VIDEO_CAPS_MAKE ("{ NV12, YUY2, BGRA, BGRx }") ", " "interlace-mode = (string){ progressive, interleaved, mixed }" ";")); enum { PROP_0, PROP_HARDWARE,
/* FIXME: add v210 support * FIXME: add v216 support * FIXME: add UYVP support * FIXME: add A420 support * FIXME: add YUV9 support * FIXME: add YVU9 support * FIXME: add IYU1 support * FIXME: add r210 support */ #define GST_VIDEO_FORMATS GST_VIDEO_FORMATS_ALL static GstStaticCaps gst_video_scale_format_caps = GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS) ";" GST_VIDEO_CAPS_MAKE_WITH_FEATURES ("ANY", GST_VIDEO_FORMATS)); #define GST_TYPE_VIDEO_SCALE_METHOD (gst_video_scale_method_get_type()) static GType gst_video_scale_method_get_type (void) { static GType video_scale_method_type = 0; static const GEnumValue video_scale_methods[] = { {GST_VIDEO_SCALE_NEAREST, "Nearest Neighbour", "nearest-neighbour"}, {GST_VIDEO_SCALE_BILINEAR, "Bilinear (2-tap)", "bilinear"}, {GST_VIDEO_SCALE_4TAP, "4-tap Sinc", "4-tap"}, {GST_VIDEO_SCALE_LANCZOS, "Lanczos", "lanczos"}, {GST_VIDEO_SCALE_BILINEAR2, "Bilinear (multi-tap)", "bilinear2"}, {GST_VIDEO_SCALE_SINC, "Sinc (multi-tap)", "sinc"}, {GST_VIDEO_SCALE_HERMITE, "Hermite (multi-tap)", "hermite"},
PROP_0, PROP_DOWNMIX_MODE }; static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), " "format = (string) RGBA, " "width = " GST_VIDEO_SIZE_RANGE ", " "height = " GST_VIDEO_SIZE_RANGE ", " "framerate = " GST_VIDEO_FPS_RANGE "," "texture-target = (string) 2D" "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, "RGBA") "; " GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS)) ); static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%u", GST_PAD_SINK, GST_PAD_REQUEST, GST_STATIC_CAPS ("video/x-raw(" GST_CAPS_FEATURE_MEMORY_GL_MEMORY "), " "format = (string) RGBA, " "width = " GST_VIDEO_SIZE_RANGE ", " "height = " GST_VIDEO_SIZE_RANGE ", " "framerate = " GST_VIDEO_FPS_RANGE "," "texture-target = (string) 2D" "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES
"varying vec2 v_texCoord; \n" "uniform sampler2D s_texture; \n" "void main() \n" "{ \n" " gl_FragColor = texture2D( s_texture, v_texCoord );\n" "} \n"; /* *INDENT-ON* */ #endif static GstStaticPadTemplate gst_glimage_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (GST_GL_UPLOAD_FORMATS) "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, GST_GL_UPLOAD_FORMATS)) ); enum { ARG_0, ARG_DISPLAY, PROP_CLIENT_RESHAPE_CALLBACK, PROP_CLIENT_DRAW_CALLBACK, PROP_CLIENT_DATA, PROP_FORCE_ASPECT_RATIO, PROP_PIXEL_ASPECT_RATIO, PROP_OTHER_CONTEXT };
#include "gstvaapiencode_jpeg.h" #include "gstvaapipluginutil.h" #include "gstvaapivideomemory.h" #define GST_PLUGIN_NAME "vaapiencode_jpeg" #define GST_PLUGIN_DESC "A VA-API based JPEG video encoder" GST_DEBUG_CATEGORY_STATIC (gst_vaapi_jpeg_encode_debug); #define GST_CAT_DEFAULT gst_vaapi_jpeg_encode_debug #define GST_CODEC_CAPS \ "image/jpeg" /* *INDENT-OFF* */ static const char gst_vaapiencode_jpeg_sink_caps_str[] = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_VAAPI_SURFACE, "{ ENCODED, NV12, I420, YV12 }") ", " GST_CAPS_INTERLACED_FALSE "; " GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ", " GST_CAPS_INTERLACED_FALSE; /* *INDENT-ON* */ /* *INDENT-OFF* */ static const char gst_vaapiencode_jpeg_src_caps_str[] = GST_CODEC_CAPS; /* *INDENT-ON* */ /* *INDENT-OFF* */ static GstStaticPadTemplate gst_vaapiencode_jpeg_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
enum { /* FILL ME */ LAST_SIGNAL }; enum { PROP_0 }; static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA") "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, "RGBA") "; " GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS)) ); static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink_%u", GST_PAD_SINK, GST_PAD_REQUEST, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA") "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META,
LAST_SIGNAL }; /* Properties */ enum { PROP_0, PROP_MIR_TEXTURE_ID }; GST_DEBUG_CATEGORY (gstmir_debug); #define GST_CAT_DEFAULT gstmir_debug #if 0 static const char gst_mirsink_sink_caps_str[] = GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_MIR_IMAGE, GST_VIDEO_FORMATS_ALL) ";" GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, GST_VIDEO_FORMATS_ALL); static GstStaticPadTemplate gst_mirsink_sink_caps_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (gst_mirsink_sink_caps_str)); #else static GstStaticPadTemplate gst_mirsink_sink_caps_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw, "
#include "gstglfilter.h" #if GST_GL_HAVE_PLATFORM_EGL #include "egl/gsteglimagememory.h" #endif #define GST_CAT_DEFAULT gst_gl_filter_debug GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); static GstStaticPadTemplate gst_gl_filter_src_pad_template = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA")) ); static GstStaticPadTemplate gst_gl_filter_sink_pad_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA")) ); /* Properties */ enum {
GST_DEBUG_CATEGORY (gst_debug_gtk_gl_sink); #define GST_CAT_DEFAULT gst_debug_gtk_gl_sink static gboolean gst_gtk_gl_sink_start (GstBaseSink * bsink); static gboolean gst_gtk_gl_sink_stop (GstBaseSink * bsink); static gboolean gst_gtk_gl_sink_query (GstBaseSink * bsink, GstQuery * query); static gboolean gst_gtk_gl_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query); static GstCaps *gst_gtk_gl_sink_get_caps (GstBaseSink * bsink, GstCaps * filter); static GstStaticPadTemplate gst_gtk_gl_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA") "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY ", " GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, "RGBA"))); #define gst_gtk_gl_sink_parent_class parent_class G_DEFINE_TYPE_WITH_CODE (GstGtkGLSink, gst_gtk_gl_sink, GST_TYPE_GTK_BASE_SINK, GST_DEBUG_CATEGORY_INIT (gst_debug_gtk_gl_sink, "gtkglsink", 0, "Gtk Video Sink")); static void gst_gtk_gl_sink_class_init (GstGtkGLSinkClass * klass) { GstElementClass *gstelement_class; GstBaseSinkClass *gstbasesink_class; GstGtkBaseSinkClass *gstgtkbasesink_class;
GstBuffer * buf); static gboolean gst_glimage_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query); static void gst_glimage_sink_video_overlay_init (GstVideoOverlayInterface * iface); static void gst_glimage_sink_set_window_handle (GstVideoOverlay * overlay, guintptr id); static void gst_glimage_sink_expose (GstVideoOverlay * overlay); static GstStaticPadTemplate gst_glimage_sink_template = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, "RGBA") "; " #if GST_GL_HAVE_PLATFORM_EGL GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, "RGBA") "; " #endif GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, "RGBA") "; " GST_VIDEO_CAPS_MAKE (GST_GL_COLOR_CONVERT_FORMATS)) ); enum { ARG_0, ARG_DISPLAY, PROP_FORCE_ASPECT_RATIO,
#include "gstmfxvideomemory.h" #define GST_PLUGIN_NAME "mfxvpp" #define GST_PLUGIN_DESC "A video postprocessing filter" GST_DEBUG_CATEGORY_STATIC (gst_debug_mfxpostproc); #define GST_CAT_DEFAULT gst_debug_mfxpostproc static void gst_mfxpostproc_color_balance_iface_init (GstColorBalanceInterface * iface); /* Default templates */ static const char gst_mfxpostproc_sink_caps_str[] = GST_MFX_MAKE_SURFACE_CAPS "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES ( GST_CAPS_FEATURE_MEMORY_MFX_SURFACE "," GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, "{ NV12, BGRA }") ";" GST_VIDEO_CAPS_MAKE_WITH_FEATURES ( GST_CAPS_FEATURE_META_GST_VIDEO_OVERLAY_COMPOSITION, GST_MFX_SUPPORTED_INPUT_FORMATS) ";" GST_VIDEO_CAPS_MAKE (GST_MFX_SUPPORTED_INPUT_FORMATS); static const char gst_mfxpostproc_src_caps_str[] = GST_MFX_MAKE_SURFACE_CAPS "; " GST_VIDEO_CAPS_MAKE ("{ NV12, BGRA }"); static GstStaticPadTemplate gst_mfxpostproc_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (gst_mfxpostproc_sink_caps_str));
#include "gstmsdkvideomemory.h" #include "gstmsdksystemmemory.h" #include "gstmsdkcontextutil.h" GST_DEBUG_CATEGORY_EXTERN (gst_msdkdec_debug); #define GST_CAT_DEFAULT gst_msdkdec_debug static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS ("video/x-raw, " "format = (string) { NV12 }, " "framerate = (fraction) [0, MAX], " "width = (int) [ 16, MAX ], height = (int) [ 16, MAX ]," "interlace-mode = (string) progressive;" GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_DMABUF, "{ NV12 }") ";") ); #define PROP_HARDWARE_DEFAULT TRUE #define PROP_ASYNC_DEPTH_DEFAULT 1 #define IS_ALIGNED(i, n) (((i) & ((n)-1)) == 0) #define gst_msdkdec_parent_class parent_class G_DEFINE_TYPE (GstMsdkDec, gst_msdkdec, GST_TYPE_VIDEO_DECODER); typedef struct _MsdkSurface { mfxFrameSurface1 *surface; GstBuffer *buf; GstVideoFrame data;
#endif GST_CAPS_CODEC("video/x-wmv") #if USE_VP8_DECODER GST_CAPS_CODEC("video/x-vp8") #endif #if USE_JPEG_DECODER GST_CAPS_CODEC("image/jpeg") #endif ; /* *INDENT-ON* */ /* *INDENT-OFF* */ static const char gst_vaapi_decode_bin_src_caps_str[] = GST_VAAPI_DECODE_BIN_SURFACE_CAPS ", " GST_CAPS_INTERLACED_FALSE "; " GST_VIDEO_CAPS_MAKE_WITH_FEATURES ( GST_CAPS_FEATURE_META_GST_VIDEO_GL_TEXTURE_UPLOAD_META, "{ RGBA, BGRA }") ", " GST_CAPS_INTERLACED_FALSE "; " GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ", " GST_CAPS_INTERLACED_FALSE; /* *INDENT-ON* */ static GstStaticPadTemplate gst_vaapi_decode_bin_sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS (gst_vaapi_decode_bin_sink_caps_str)); static GstStaticPadTemplate gst_vaapi_decode_bin_src_factory = GST_STATIC_PAD_TEMPLATE ("src", GST_PAD_SRC, GST_PAD_ALWAYS,