1 #include "gstvaapih263encode.h"
2 #include "gstvaapih263encoder.h"
4 GST_DEBUG_CATEGORY_STATIC (gst_vaapi_h263_encode_debug);
5 #define GST_CAT_DEFAULT gst_vaapi_h263_encode_debug
7 #define GST_VAAPI_ENCODE_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_VAAPI_ENCODE, GstVaapiEncodePrivate))
9 static const char gst_h263encode_sink_caps_str[] =
10 GST_VAAPI_SURFACE_CAPS;
12 static const GstElementDetails gst_h263encode_details =
14 "VA-API h263 encoder",
15 "Codec/Encoder/Video",
16 "A VA-API based h263 encoder",
17 "Feng Yuan <feng.yuan@intel.com>");
20 static const char gst_h263encode_src_caps_str[] =
21 GST_CAPS_CODEC("video/x-h263");
23 static GstStaticPadTemplate gst_h263encode_sink_factory =
24 GST_STATIC_PAD_TEMPLATE(
28 GST_STATIC_CAPS(gst_h263encode_sink_caps_str));
30 static GstStaticPadTemplate gst_h263encode_src_factory =
31 GST_STATIC_PAD_TEMPLATE(
35 GST_STATIC_CAPS(gst_h263encode_src_caps_str));
37 static void gst_h263encode_set_property(GObject *object, guint prop_id,
38 const GValue *value, GParamSpec *pspec);
39 static void gst_h263encode_get_property (GObject * object, guint prop_id,
40 GValue * value, GParamSpec * pspec);
47 GST_TYPE_VAAPI_ENCODE);
52 H263_PROP_INTRA_PERIOD,
59 gst_h263encode_base_init(gpointer klass)
61 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
63 gst_element_class_set_details(element_class, &gst_h263encode_details);
66 gst_element_class_add_pad_template(
68 gst_static_pad_template_get(&gst_h263encode_sink_factory)
72 gst_element_class_add_pad_template(
74 gst_static_pad_template_get(&gst_h263encode_src_factory)
79 gst_h263encode_class_init(GstH263EncodeClass *klass)
81 GObjectClass * const object_class = G_OBJECT_CLASS(klass);
83 GST_DEBUG_CATEGORY_INIT (gst_vaapi_h263_encode_debug, "vaapih263encode", 0,
84 "vaapih263encode element");
86 /* object_class->finalize = gst_h263encode_finalize; */
87 object_class->set_property = gst_h263encode_set_property;
88 object_class->get_property = gst_h263encode_get_property;
90 g_object_class_install_property (object_class, H263_PROP_BITRATE,
91 g_param_spec_uint ("bitrate",
92 "H263 encoding bitrate",
93 "H263 encoding bitrate, 10k~100M, (0, auto-calculate)",
98 g_object_class_install_property (object_class, H263_PROP_INTRA_PERIOD,
99 g_param_spec_uint ("intra-period",
100 "H263 encoding intra-period",
101 "H263 encoding intra-period",
104 H263_DEFAULT_INTRA_PERIOD,
106 g_object_class_install_property (object_class, H263_PROP_INIT_QP,
107 g_param_spec_uint ("init-qp",
112 H263_DEFAULT_INIT_QP,
114 g_object_class_install_property (object_class, H263_PROP_MIN_QP,
115 g_param_spec_uint ("min-qp",
126 gst_h263encode_init(GstH263Encode *h263_encode, GstH263EncodeClass *klass)
128 GstVaapiEncode *encode = GST_VAAPI_ENCODE(h263_encode);
129 encode->encoder = GST_VAAPI_ENCODER(gst_h263_encoder_new());
130 ENCODER_ASSERT(encode->encoder);
134 gst_h263encode_set_property(GObject *object, guint prop_id,
135 const GValue *value, GParamSpec *pspec)
137 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
138 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
140 ENCODER_ASSERT(h263encoder);
143 case H263_PROP_BITRATE: {
144 h263encoder->bitrate = g_value_get_uint(value);
148 case H263_PROP_INTRA_PERIOD: {
149 h263encoder->intra_period = g_value_get_uint(value);
153 case H263_PROP_INIT_QP: {
154 h263encoder->init_qp = g_value_get_uint(value);
158 case H263_PROP_MIN_QP: {
159 h263encoder->min_qp = g_value_get_uint(value);
164 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
170 gst_h263encode_get_property (GObject * object, guint prop_id,
171 GValue * value, GParamSpec * pspec)
173 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
174 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
175 ENCODER_ASSERT(h263encoder);
178 case H263_PROP_BITRATE:
179 g_value_set_uint (value, h263encoder->bitrate);
182 case H263_PROP_INTRA_PERIOD:
183 g_value_set_uint (value, h263encoder->intra_period);
186 case H263_PROP_INIT_QP:
187 g_value_set_uint (value, h263encoder->init_qp);
190 case H263_PROP_MIN_QP:
191 g_value_set_uint (value, h263encoder->min_qp);
195 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);