2 * gstvaapiencode_h263.c - VA-API H.263 encoder
4 * Copyright (C) 2011 Intel Corporation
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public License
8 * as published by the Free Software Foundation; either version 2.1
9 * of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free
18 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301 USA
22 #include "gstvaapiencode_h263.h"
23 #include "gst/vaapi/gstvaapiencoder_h263.h"
25 GST_DEBUG_CATEGORY_STATIC (gst_vaapi_h263_encode_debug);
26 #define GST_CAT_DEFAULT gst_vaapi_h263_encode_debug
28 #define GST_VAAPI_ENCODE_GET_PRIVATE(obj) \
29 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
30 GST_TYPE_VAAPI_ENCODE, \
31 GstVaapiEncodePrivate))
33 static const char gst_vaapi_encode_h263_sink_caps_str[] =
34 GST_VAAPI_SURFACE_CAPS;
36 static const GstElementDetails gst_vaapi_encode_h263_details =
38 "VA-API h263 encoder",
39 "Codec/Encoder/Video",
40 "A VA-API based h263 encoder",
41 "Feng Yuan <feng.yuan@intel.com>");
44 static const char gst_vaapi_encode_h263_src_caps_str[] =
45 GST_CAPS_CODEC("video/x-h263");
47 static GstStaticPadTemplate gst_vaapi_encode_h263_sink_factory =
48 GST_STATIC_PAD_TEMPLATE(
52 GST_STATIC_CAPS(gst_vaapi_encode_h263_sink_caps_str));
54 static GstStaticPadTemplate gst_vaapi_encode_h263_src_factory =
55 GST_STATIC_PAD_TEMPLATE(
59 GST_STATIC_CAPS(gst_vaapi_encode_h263_src_caps_str));
64 gst_vaapi_encode_h263,
66 GST_TYPE_VAAPI_ENCODE)
71 H263_PROP_INTRA_PERIOD,
77 gst_vaapi_encode_h263_init(
78 GstVaapiEncodeH263 *h263_encode,
79 GstVaapiEncodeH263Class *klass
82 GstVaapiEncode *encode = GST_VAAPI_ENCODE(h263_encode);
83 encode->encoder = GST_VAAPI_ENCODER(gst_vaapi_encoder_h263_new());
84 ENCODER_ASSERT(encode->encoder);
88 gst_vaapi_encode_h263_set_property(
95 GstVaapiEncode *base = GST_VAAPI_ENCODE(object);
96 GstVaapiEncoderH263 *encoder = GST_VAAPI_ENCODER_H263(base->encoder);
98 ENCODER_ASSERT(encoder);
101 case H263_PROP_BITRATE: {
102 encoder->bitrate = g_value_get_uint(value);
106 case H263_PROP_INTRA_PERIOD: {
107 encoder->intra_period = g_value_get_uint(value);
111 case H263_PROP_INIT_QP: {
112 encoder->init_qp = g_value_get_uint(value);
116 case H263_PROP_MIN_QP: {
117 encoder->min_qp = g_value_get_uint(value);
122 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
128 gst_vaapi_encode_h263_get_property (
135 GstVaapiEncode *base = GST_VAAPI_ENCODE(object);
136 GstVaapiEncoderH263 *encoder = GST_VAAPI_ENCODER_H263(base->encoder);
137 ENCODER_ASSERT(encoder);
140 case H263_PROP_BITRATE:
141 g_value_set_uint (value, encoder->bitrate);
144 case H263_PROP_INTRA_PERIOD:
145 g_value_set_uint (value, encoder->intra_period);
148 case H263_PROP_INIT_QP:
149 g_value_set_uint (value, encoder->init_qp);
152 case H263_PROP_MIN_QP:
153 g_value_set_uint (value, encoder->min_qp);
157 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
163 gst_vaapi_encode_h263_base_init(gpointer klass)
165 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
167 gst_element_class_set_details(element_class, &gst_vaapi_encode_h263_details);
170 gst_element_class_add_pad_template(
172 gst_static_pad_template_get(&gst_vaapi_encode_h263_sink_factory)
176 gst_element_class_add_pad_template(
178 gst_static_pad_template_get(&gst_vaapi_encode_h263_src_factory)
183 gst_vaapi_encode_h263_class_init(GstVaapiEncodeH263Class *klass)
185 GObjectClass * const object_class = G_OBJECT_CLASS(klass);
187 GST_DEBUG_CATEGORY_INIT (gst_vaapi_h263_encode_debug,
190 "vaapih263encode element");
192 /* object_class->finalize = gst_vaapi_encode_h263_finalize; */
193 object_class->set_property = gst_vaapi_encode_h263_set_property;
194 object_class->get_property = gst_vaapi_encode_h263_get_property;
196 g_object_class_install_property (
201 "H263 encoding bitrate(kpbs)",
202 "H263 encoding bitrate(kbps), (0, auto-calculate)",
208 g_object_class_install_property (
210 H263_PROP_INTRA_PERIOD,
213 "H263 encoding intra-period",
214 "H263 encoding intra-period",
217 H263_DEFAULT_INTRA_PERIOD,
220 g_object_class_install_property (
229 H263_DEFAULT_INIT_QP,
232 g_object_class_install_property (