1 #include "gstvaapimpeg4encode.h"
2 #include "gstvaapimpeg4encoder.h"
4 GST_DEBUG_CATEGORY_STATIC (gst_vaapi_mpeg4_encode_debug);
5 #define GST_CAT_DEFAULT gst_vaapi_mpeg4_encode_debug
8 static const char gst_mpeg4encode_sink_caps_str[] =
9 GST_VAAPI_SURFACE_CAPS;
11 static const GstElementDetails gst_mpeg4encode_details =
13 "VA-API mpeg4 encoder",
14 "Codec/Encoder/Video",
15 "A VA-API based mpeg4 encoder",
16 "Feng Yuan<feng.yuan@intel.com>");
19 static const char gst_mpeg4encode_src_caps_str[] =
20 GST_CAPS_CODEC("video/mpeg, mpegversion=4");
22 static GstStaticPadTemplate gst_mpeg4encode_sink_factory =
23 GST_STATIC_PAD_TEMPLATE(
27 GST_STATIC_CAPS(gst_mpeg4encode_sink_caps_str));
29 static GstStaticPadTemplate gst_mpeg4encode_src_factory =
30 GST_STATIC_PAD_TEMPLATE(
34 GST_STATIC_CAPS(gst_mpeg4encode_src_caps_str));
36 static void gst_mpeg4encode_finalize(GObject *object);
37 static void gst_mpeg4encode_set_property(GObject *object, guint prop_id,
38 const GValue *value, GParamSpec *pspec);
39 static void gst_mpeg4encode_get_property (GObject * object, guint prop_id,
40 GValue * value, GParamSpec * pspec);
48 GST_TYPE_VAAPI_ENCODE);
54 MPEG4_PROP_INTRA_PERIOD,
61 gst_mpeg4encode_base_init(gpointer klass)
63 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
65 gst_element_class_set_details(element_class, &gst_mpeg4encode_details);
68 gst_element_class_add_pad_template(
70 gst_static_pad_template_get(&gst_mpeg4encode_sink_factory)
74 gst_element_class_add_pad_template(
76 gst_static_pad_template_get(&gst_mpeg4encode_src_factory)
81 gst_mpeg4encode_class_init(GstMPEG4EncodeClass *klass)
83 GObjectClass * const object_class = G_OBJECT_CLASS(klass);
85 GST_DEBUG_CATEGORY_INIT (gst_vaapi_mpeg4_encode_debug, "vaapimpeg4encode", 0,
86 "vaapimpeg4encode element");
88 object_class->finalize = gst_mpeg4encode_finalize;
89 object_class->set_property = gst_mpeg4encode_set_property;
90 object_class->get_property = gst_mpeg4encode_get_property;
93 g_object_class_install_property (object_class, MPEG4_PROP_PROFILE,
94 g_param_spec_uint ("profile",
96 "Profile supports: 2(Baseline), 3(ASP)",
101 g_object_class_install_property (object_class, MPEG4_PROP_BITRATE,
102 g_param_spec_uint ("bitrate",
103 "MPEG4 encoding bitrate",
104 "MPEG4 encoding bitrate, 10k~100M, (0, auto-calculate)",
109 g_object_class_install_property (object_class, MPEG4_PROP_INTRA_PERIOD,
110 g_param_spec_uint ("intra-period",
111 "MPEG4 encoding intra-period",
112 "MPEG4 encoding intra-period",
115 MPEG4_DEFAULT_INTRA_PERIOD,
117 g_object_class_install_property (object_class, MPEG4_PROP_INIT_QP,
118 g_param_spec_uint ("init-qp",
123 MPEG4_DEFAULT_INIT_QP,
125 g_object_class_install_property (object_class, MPEG4_PROP_MIN_QP,
126 g_param_spec_uint ("min-qp",
131 MPEG4_DEFAULT_MIN_QP,
137 gst_mpeg4encode_init(GstMPEG4Encode *mpeg4_encode, GstMPEG4EncodeClass *klass)
139 GstVaapiEncode *encode = GST_VAAPI_ENCODE(mpeg4_encode);
140 encode->encoder = GST_VAAPI_ENCODER(gst_mpeg4_encoder_new());
141 ENCODER_ASSERT(encode->encoder);
145 gst_mpeg4encode_finalize(GObject *object)
147 //GstMPEG4Encode * const mpeg4_encode = GST_MPEG4ENCODE(object);
148 G_OBJECT_CLASS(parent_class)->finalize(object);
152 gst_mpeg4encode_set_property(GObject *object, guint prop_id,
153 const GValue *value, GParamSpec *pspec)
155 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
156 GstMPEG4Encoder *mpeg4encoder = GST_MPEG4_ENCODER(encode->encoder);
158 ENCODER_ASSERT(mpeg4encoder);
161 case MPEG4_PROP_PROFILE: {
162 mpeg4encoder->profile = g_value_get_uint(value);
166 case MPEG4_PROP_BITRATE: {
167 mpeg4encoder->bitrate = g_value_get_uint(value);
171 case MPEG4_PROP_INTRA_PERIOD: {
172 mpeg4encoder->intra_period = g_value_get_uint(value);
176 case MPEG4_PROP_INIT_QP: {
177 mpeg4encoder->init_qp = g_value_get_uint(value);
181 case MPEG4_PROP_MIN_QP: {
182 mpeg4encoder->min_qp = g_value_get_uint(value);
187 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
193 gst_mpeg4encode_get_property (GObject * object, guint prop_id,
194 GValue * value, GParamSpec * pspec)
196 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
197 GstMPEG4Encoder *mpeg4encoder = GST_MPEG4_ENCODER(encode->encoder);
198 ENCODER_ASSERT(mpeg4encoder);
201 case MPEG4_PROP_PROFILE:
202 g_value_set_uint (value, mpeg4encoder->profile);
205 case MPEG4_PROP_BITRATE:
206 g_value_set_uint (value, mpeg4encoder->bitrate);
209 case MPEG4_PROP_INTRA_PERIOD:
210 g_value_set_uint (value, mpeg4encoder->intra_period);
213 case MPEG4_PROP_INIT_QP:
214 g_value_set_uint (value, mpeg4encoder->init_qp);
217 case MPEG4_PROP_MIN_QP:
218 g_value_set_uint (value, mpeg4encoder->min_qp);
222 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);