summaryrefslogtreecommitdiff
path: root/sys/d3d11/gstd3d11h264dec.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sys/d3d11/gstd3d11h264dec.cpp')
-rw-r--r--sys/d3d11/gstd3d11h264dec.cpp75
1 files changed, 12 insertions, 63 deletions
diff --git a/sys/d3d11/gstd3d11h264dec.cpp b/sys/d3d11/gstd3d11h264dec.cpp
index f1a3d548f..5723fa2ac 100644
--- a/sys/d3d11/gstd3d11h264dec.cpp
+++ b/sys/d3d11/gstd3d11h264dec.cpp
@@ -82,14 +82,6 @@
GST_DEBUG_CATEGORY_EXTERN (gst_d3d11_h264_dec_debug);
#define GST_CAT_DEFAULT gst_d3d11_h264_dec_debug
-enum
-{
- PROP_0,
- PROP_ADAPTER,
- PROP_DEVICE_ID,
- PROP_VENDOR_ID,
-};
-
typedef struct _GstD3D11H264Dec
{
GstH264Decoder parent;
@@ -125,9 +117,7 @@ typedef struct _GstD3D11H264Dec
typedef struct _GstD3D11H264DecClass
{
GstH264DecoderClass parent_class;
- guint adapter;
- guint device_id;
- guint vendor_id;
+ GstD3D11DecoderSubClassData class_data;
} GstD3D11H264DecClass;
static GstElementClass *parent_class = NULL;
@@ -179,49 +169,17 @@ gst_d3d11_h264_dec_class_init (GstD3D11H264DecClass * klass, gpointer data)
GstVideoDecoderClass *decoder_class = GST_VIDEO_DECODER_CLASS (klass);
GstH264DecoderClass *h264decoder_class = GST_H264_DECODER_CLASS (klass);
GstD3D11DecoderClassData *cdata = (GstD3D11DecoderClassData *) data;
- gchar *long_name;
gobject_class->get_property = gst_d3d11_h264_dec_get_property;
gobject_class->dispose = gst_d3d11_h264_dec_dispose;
- g_object_class_install_property (gobject_class, PROP_ADAPTER,
- g_param_spec_uint ("adapter", "Adapter",
- "DXGI Adapter index for creating device",
- 0, G_MAXUINT32, cdata->adapter,
- (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (gobject_class, PROP_DEVICE_ID,
- g_param_spec_uint ("device-id", "Device Id",
- "DXGI Device ID", 0, G_MAXUINT32, 0,
- (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
- g_object_class_install_property (gobject_class, PROP_VENDOR_ID,
- g_param_spec_uint ("vendor-id", "Vendor Id",
- "DXGI Vendor ID", 0, G_MAXUINT32, 0,
- (GParamFlags) (G_PARAM_READABLE | G_PARAM_STATIC_STRINGS)));
-
- parent_class = (GstElementClass *) g_type_class_peek_parent (klass);
-
- klass->adapter = cdata->adapter;
- klass->device_id = cdata->device_id;
- klass->vendor_id = cdata->vendor_id;
-
element_class->set_context =
GST_DEBUG_FUNCPTR (gst_d3d11_h264_dec_set_context);
- long_name = g_strdup_printf ("Direct3D11/DXVA H.264 %s Decoder",
- cdata->description);
- gst_element_class_set_metadata (element_class, long_name,
- "Codec/Decoder/Video/Hardware",
- "A Direct3D11/DXVA H.264 video decoder",
+ parent_class = (GstElementClass *) g_type_class_peek_parent (klass);
+ gst_d3d11_decoder_class_data_fill_subclass_data (cdata, &klass->class_data);
+ gst_d3d11_decoder_proxy_class_init (element_class, cdata,
"Seungha Yang <seungha.yang@navercorp.com>");
- g_free (long_name);
-
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS,
- cdata->sink_caps));
- gst_element_class_add_pad_template (element_class,
- gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
- cdata->src_caps));
- gst_d3d11_decoder_class_data_free (cdata);
decoder_class->open = GST_DEBUG_FUNCPTR (gst_d3d11_h264_dec_open);
decoder_class->close = GST_DEBUG_FUNCPTR (gst_d3d11_h264_dec_close);
@@ -258,21 +216,9 @@ gst_d3d11_h264_dec_get_property (GObject * object, guint prop_id,
GValue * value, GParamSpec * pspec)
{
GstD3D11H264DecClass *klass = GST_D3D11_H264_DEC_GET_CLASS (object);
+ GstD3D11DecoderSubClassData *cdata = &klass->class_data;
- switch (prop_id) {
- case PROP_ADAPTER:
- g_value_set_uint (value, klass->adapter);
- break;
- case PROP_DEVICE_ID:
- g_value_set_uint (value, klass->device_id);
- break;
- case PROP_VENDOR_ID:
- g_value_set_uint (value, klass->vendor_id);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- break;
- }
+ gst_d3d11_decoder_proxy_get_property (object, prop_id, value, pspec, cdata);
}
static void
@@ -293,8 +239,9 @@ gst_d3d11_h264_dec_set_context (GstElement * element, GstContext * context)
{
GstD3D11H264Dec *self = GST_D3D11_H264_DEC (element);
GstD3D11H264DecClass *klass = GST_D3D11_H264_DEC_GET_CLASS (self);
+ GstD3D11DecoderSubClassData *cdata = &klass->class_data;
- gst_d3d11_handle_set_context (element, context, klass->adapter,
+ gst_d3d11_handle_set_context (element, context, cdata->adapter,
&self->device);
GST_ELEMENT_CLASS (parent_class)->set_context (element, context);
@@ -320,8 +267,9 @@ gst_d3d11_h264_dec_open (GstVideoDecoder * decoder)
{
GstD3D11H264Dec *self = GST_D3D11_H264_DEC (decoder);
GstD3D11H264DecClass *klass = GST_D3D11_H264_DEC_GET_CLASS (self);
+ GstD3D11DecoderSubClassData *cdata = &klass->class_data;
- if (!gst_d3d11_ensure_element_data (GST_ELEMENT_CAST (self), klass->adapter,
+ if (!gst_d3d11_ensure_element_data (GST_ELEMENT_CAST (self), cdata->adapter,
&self->device)) {
GST_ERROR_OBJECT (self, "Cannot create d3d11device");
return FALSE;
@@ -1301,7 +1249,8 @@ gst_d3d11_h264_dec_register (GstPlugin * plugin, GstD3D11Device * device,
"height", GST_TYPE_INT_RANGE, 1, resolution, NULL);
type_info.class_data =
- gst_d3d11_decoder_class_data_new (device, sink_caps, src_caps);
+ gst_d3d11_decoder_class_data_new (device, GST_D3D11_CODEC_H264,
+ sink_caps, src_caps);
type_name = g_strdup ("GstD3D11H264Dec");
feature_name = g_strdup ("d3d11h264dec");