2 * gstvaapih263encode.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 "gstvaapih263encode.h"
23 #include "gstvaapih263encoder.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) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GST_TYPE_VAAPI_ENCODE, GstVaapiEncodePrivate))
30 static const char gst_h263encode_sink_caps_str[] =
31 GST_VAAPI_SURFACE_CAPS;
33 static const GstElementDetails gst_h263encode_details =
35 "VA-API h263 encoder",
36 "Codec/Encoder/Video",
37 "A VA-API based h263 encoder",
38 "Feng Yuan <feng.yuan@intel.com>");
41 static const char gst_h263encode_src_caps_str[] =
42 GST_CAPS_CODEC("video/x-h263");
44 static GstStaticPadTemplate gst_h263encode_sink_factory =
45 GST_STATIC_PAD_TEMPLATE(
49 GST_STATIC_CAPS(gst_h263encode_sink_caps_str));
51 static GstStaticPadTemplate gst_h263encode_src_factory =
52 GST_STATIC_PAD_TEMPLATE(
56 GST_STATIC_CAPS(gst_h263encode_src_caps_str));
58 static void gst_h263encode_set_property(GObject *object, guint prop_id,
59 const GValue *value, GParamSpec *pspec);
60 static void gst_h263encode_get_property (GObject * object, guint prop_id,
61 GValue * value, GParamSpec * pspec);
68 GST_TYPE_VAAPI_ENCODE);
73 H263_PROP_INTRA_PERIOD,
80 gst_h263encode_base_init(gpointer klass)
82 GstElementClass * const element_class = GST_ELEMENT_CLASS(klass);
84 gst_element_class_set_details(element_class, &gst_h263encode_details);
87 gst_element_class_add_pad_template(
89 gst_static_pad_template_get(&gst_h263encode_sink_factory)
93 gst_element_class_add_pad_template(
95 gst_static_pad_template_get(&gst_h263encode_src_factory)
100 gst_h263encode_class_init(GstH263EncodeClass *klass)
102 GObjectClass * const object_class = G_OBJECT_CLASS(klass);
104 GST_DEBUG_CATEGORY_INIT (gst_vaapi_h263_encode_debug, "vaapih263encode", 0,
105 "vaapih263encode element");
107 GST_DEBUG_CATEGORY_INIT (gst_vaapi_h263_encode_debug, "vaapih263encode", 0,
108 "vaapih263encode element");
110 /* object_class->finalize = gst_h263encode_finalize; */
111 object_class->set_property = gst_h263encode_set_property;
112 object_class->get_property = gst_h263encode_get_property;
114 g_object_class_install_property (object_class, H263_PROP_BITRATE,
115 g_param_spec_uint ("bitrate",
116 "H263 encoding bitrate",
117 "H263 encoding bitrate, 10k~100M, (0, auto-calculate)",
122 g_object_class_install_property (object_class, H263_PROP_INTRA_PERIOD,
123 g_param_spec_uint ("intra-period",
124 "H263 encoding intra-period",
125 "H263 encoding intra-period",
128 H263_DEFAULT_INTRA_PERIOD,
130 g_object_class_install_property (object_class, H263_PROP_INIT_QP,
131 g_param_spec_uint ("init-qp",
136 H263_DEFAULT_INIT_QP,
138 g_object_class_install_property (object_class, H263_PROP_MIN_QP,
139 g_param_spec_uint ("min-qp",
150 gst_h263encode_init(GstH263Encode *h263_encode, GstH263EncodeClass *klass)
152 GstVaapiEncode *encode = GST_VAAPI_ENCODE(h263_encode);
153 encode->encoder = GST_VAAPI_ENCODER(gst_h263_encoder_new());
154 ENCODER_ASSERT(encode->encoder);
158 gst_h263encode_set_property(GObject *object, guint prop_id,
159 const GValue *value, GParamSpec *pspec)
161 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
162 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
164 ENCODER_ASSERT(h263encoder);
167 case H263_PROP_BITRATE: {
168 h263encoder->bitrate = g_value_get_uint(value);
172 case H263_PROP_INTRA_PERIOD: {
173 h263encoder->intra_period = g_value_get_uint(value);
177 case H263_PROP_INIT_QP: {
178 h263encoder->init_qp = g_value_get_uint(value);
182 case H263_PROP_MIN_QP: {
183 h263encoder->min_qp = g_value_get_uint(value);
188 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
194 gst_h263encode_get_property (GObject * object, guint prop_id,
195 GValue * value, GParamSpec * pspec)
197 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
198 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
199 ENCODER_ASSERT(h263encoder);
202 case H263_PROP_BITRATE:
203 g_value_set_uint (value, h263encoder->bitrate);
206 case H263_PROP_INTRA_PERIOD:
207 g_value_set_uint (value, h263encoder->intra_period);
210 case H263_PROP_INIT_QP:
211 g_value_set_uint (value, h263encoder->init_qp);
214 case H263_PROP_MIN_QP:
215 g_value_set_uint (value, h263encoder->min_qp);
219 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);