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 "; "
35 GST_VAAPI_BUFFER_SHARING_CAPS;
37 static const GstElementDetails gst_vaapi_encode_h263_details =
39 "VA-API h263 encoder",
40 "Codec/Encoder/Video",
41 "A VA-API based h263 encoder",
42 "Feng Yuan <feng.yuan@intel.com>");
45 static const char gst_vaapi_encode_h263_src_caps_str[] =
46 GST_CAPS_CODEC("video/x-h263");
48 static GstStaticPadTemplate gst_vaapi_encode_h263_sink_factory =
49 GST_STATIC_PAD_TEMPLATE(
53 GST_STATIC_CAPS(gst_vaapi_encode_h263_sink_caps_str));
55 static GstStaticPadTemplate gst_vaapi_encode_h263_src_factory =
56 GST_STATIC_PAD_TEMPLATE(
60 GST_STATIC_CAPS(gst_vaapi_encode_h263_src_caps_str));
65 gst_vaapi_encode_h263,
67 GST_TYPE_VAAPI_ENCODE)
72 H263_PROP_INTRA_PERIOD,
78 gst_vaapi_encode_h263_init(
79 GstVaapiEncodeH263 *h263_encode,
80 GstVaapiEncodeH263Class *klass
83 GstVaapiEncode *encode = GST_VAAPI_ENCODE(h263_encode);
84 encode->encoder = GST_VAAPI_ENCODER(gst_vaapi_encoder_h263_new());
85 ENCODER_ASSERT(encode->encoder);
89 gst_vaapi_encode_h263_set_property(
96 GstVaapiEncode *base = GST_VAAPI_ENCODE(object);
97 GstVaapiEncoderH263 *encoder = GST_VAAPI_ENCODER_H263(base->encoder);
99 ENCODER_ASSERT(encoder);
102 case H263_PROP_BITRATE: {
103 encoder->bitrate = g_value_get_uint(value);
107 case H263_PROP_INTRA_PERIOD: {
108 encoder->intra_period = g_value_get_uint(value);
112 case H263_PROP_INIT_QP: {
113 encoder->init_qp = g_value_get_uint(value);
117 case H263_PROP_MIN_QP: {
118 encoder->min_qp = g_value_get_uint(value);
123 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
129 gst_vaapi_encode_h263_get_property (
136 GstVaapiEncode *base = GST_VAAPI_ENCODE(object);
137 GstVaapiEncoderH263 *encoder = GST_VAAPI_ENCODER_H263(base->encoder);
138 ENCODER_ASSERT(encoder);
141 case H263_PROP_BITRATE:
142 g_value_set_uint (value, encoder->bitrate);
145 case H263_PROP_INTRA_PERIOD:
146 g_value_set_uint (value, encoder->intra_period);
149 case H263_PROP_INIT_QP:
150 g_value_set_uint (value, encoder->init_qp);
153 case H263_PROP_MIN_QP:
154 g_value_set_uint (value, encoder->min_qp);
158 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
164 gst_vaapi_encode_h263_base_init(gpointer klass)
166 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
168 gst_element_class_set_details(element_class, &gst_vaapi_encode_h263_details);
171 gst_element_class_add_pad_template(
173 gst_static_pad_template_get(&gst_vaapi_encode_h263_sink_factory)
177 gst_element_class_add_pad_template(
179 gst_static_pad_template_get(&gst_vaapi_encode_h263_src_factory)
184 gst_vaapi_encode_h263_class_init(GstVaapiEncodeH263Class *klass)
186 GObjectClass * const object_class = G_OBJECT_CLASS(klass);
188 GST_DEBUG_CATEGORY_INIT (gst_vaapi_h263_encode_debug,
191 "vaapih263encode element");
193 /* object_class->finalize = gst_vaapi_encode_h263_finalize; */
194 object_class->set_property = gst_vaapi_encode_h263_set_property;
195 object_class->get_property = gst_vaapi_encode_h263_get_property;
197 g_object_class_install_property (
202 "H263 encoding bitrate(kpbs)",
203 "H263 encoding bitrate(kbps), (0, auto-calculate)",
209 g_object_class_install_property (
211 H263_PROP_INTRA_PERIOD,
214 "H263 encoding intra-period",
215 "H263 encoding intra-period",
218 H263_DEFAULT_INTRA_PERIOD,
221 g_object_class_install_property (
230 H263_DEFAULT_INIT_QP,
233 g_object_class_install_property (