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_CAPS_CODEC("video/x-vaapi-surface ")
13 static const GstElementDetails gst_h263encode_details =
15 "VA-API h263 encoder",
16 "Codec/Encoder/Video",
17 "A VA-API based h263 encoder",
18 "Feng Yuan <feng.yuan@intel.com>");
21 static const char gst_h263encode_src_caps_str[] =
22 GST_CAPS_CODEC("video/x-h263");
24 static GstStaticPadTemplate gst_h263encode_sink_factory =
25 GST_STATIC_PAD_TEMPLATE(
29 GST_STATIC_CAPS(gst_h263encode_sink_caps_str));
31 static GstStaticPadTemplate gst_h263encode_src_factory =
32 GST_STATIC_PAD_TEMPLATE(
36 GST_STATIC_CAPS(gst_h263encode_src_caps_str));
38 static void gst_h263encode_set_property(GObject *object, guint prop_id,
39 const GValue *value, GParamSpec *pspec);
40 static void gst_h263encode_get_property (GObject * object, guint prop_id,
41 GValue * value, GParamSpec * pspec);
48 GST_TYPE_VAAPI_ENCODE);
53 H263_PROP_INTRA_PERIOD,
60 gst_h263encode_base_init(gpointer klass)
62 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
64 gst_element_class_set_details(element_class, &gst_h263encode_details);
67 gst_element_class_add_pad_template(
69 gst_static_pad_template_get(&gst_h263encode_sink_factory)
73 gst_element_class_add_pad_template(
75 gst_static_pad_template_get(&gst_h263encode_src_factory)
80 gst_h263encode_class_init(GstH263EncodeClass *klass)
82 GObjectClass * const object_class = G_OBJECT_CLASS(klass);
83 GstVaapiEncodeClass * const encode_class = GST_VAAPI_ENCODE_CLASS(klass);
85 GST_DEBUG_CATEGORY_INIT (gst_vaapi_h263_encode_debug, "vaapih263encode", 0,
86 "vaapih263encode element");
88 /* object_class->finalize = gst_h263encode_finalize; */
89 object_class->set_property = gst_h263encode_set_property;
90 object_class->get_property = gst_h263encode_get_property;
92 g_object_class_install_property (object_class, H263_PROP_BITRATE,
93 g_param_spec_uint ("bitrate",
94 "H263 encoding bitrate",
95 "H263 encoding bitrate, 10k~100M, (0, auto-calculate)",
100 g_object_class_install_property (object_class, H263_PROP_INTRA_PERIOD,
101 g_param_spec_uint ("intra-period",
102 "H263 encoding intra-period",
103 "H263 encoding intra-period",
106 H263_DEFAULT_INTRA_PERIOD,
108 g_object_class_install_property (object_class, H263_PROP_INIT_QP,
109 g_param_spec_uint ("init-qp",
114 H263_DEFAULT_INIT_QP,
116 g_object_class_install_property (object_class, H263_PROP_MIN_QP,
117 g_param_spec_uint ("min-qp",
128 gst_h263encode_init(GstH263Encode *h263_encode, GstH263EncodeClass *klass)
130 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
131 GstVaapiEncode *encode = GST_VAAPI_ENCODE(h263_encode);
132 encode->encoder = GST_VAAPI_ENCODER(gst_h263_encoder_new());
133 ENCODER_ASSERT(encode->encoder);
137 gst_h263encode_set_property(GObject *object, guint prop_id,
138 const GValue *value, GParamSpec *pspec)
140 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
141 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
143 ENCODER_ASSERT(h263encoder);
146 case H263_PROP_BITRATE: {
147 h263encoder->bitrate = g_value_get_uint(value);
151 case H263_PROP_INTRA_PERIOD: {
152 h263encoder->intra_period = g_value_get_uint(value);
156 case H263_PROP_INIT_QP: {
157 h263encoder->init_qp = g_value_get_uint(value);
161 case H263_PROP_MIN_QP: {
162 h263encoder->min_qp = g_value_get_uint(value);
167 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
173 gst_h263encode_get_property (GObject * object, guint prop_id,
174 GValue * value, GParamSpec * pspec)
176 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
177 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
178 ENCODER_ASSERT(h263encoder);
181 case H263_PROP_BITRATE:
182 g_value_set_uint (value, h263encoder->bitrate);
185 case H263_PROP_INTRA_PERIOD:
186 g_value_set_uint (value, h263encoder->intra_period);
189 case H263_PROP_INIT_QP:
190 g_value_set_uint (value, h263encoder->init_qp);
193 case H263_PROP_MIN_QP:
194 g_value_set_uint (value, h263encoder->min_qp);
198 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);