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 /* object_class->finalize = gst_h263encode_finalize; */
108 object_class->set_property = gst_h263encode_set_property;
109 object_class->get_property = gst_h263encode_get_property;
111 g_object_class_install_property (object_class, H263_PROP_BITRATE,
112 g_param_spec_uint ("bitrate",
113 "H263 encoding bitrate",
114 "H263 encoding bitrate, 10k~100M, (0, auto-calculate)",
119 g_object_class_install_property (object_class, H263_PROP_INTRA_PERIOD,
120 g_param_spec_uint ("intra-period",
121 "H263 encoding intra-period",
122 "H263 encoding intra-period",
125 H263_DEFAULT_INTRA_PERIOD,
127 g_object_class_install_property (object_class, H263_PROP_INIT_QP,
128 g_param_spec_uint ("init-qp",
133 H263_DEFAULT_INIT_QP,
135 g_object_class_install_property (object_class, H263_PROP_MIN_QP,
136 g_param_spec_uint ("min-qp",
147 gst_h263encode_init(GstH263Encode *h263_encode, GstH263EncodeClass *klass)
149 GstVaapiEncode *encode = GST_VAAPI_ENCODE(h263_encode);
150 encode->encoder = GST_VAAPI_ENCODER(gst_h263_encoder_new());
151 ENCODER_ASSERT(encode->encoder);
155 gst_h263encode_set_property(GObject *object, guint prop_id,
156 const GValue *value, GParamSpec *pspec)
158 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
159 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
161 ENCODER_ASSERT(h263encoder);
164 case H263_PROP_BITRATE: {
165 h263encoder->bitrate = g_value_get_uint(value);
169 case H263_PROP_INTRA_PERIOD: {
170 h263encoder->intra_period = g_value_get_uint(value);
174 case H263_PROP_INIT_QP: {
175 h263encoder->init_qp = g_value_get_uint(value);
179 case H263_PROP_MIN_QP: {
180 h263encoder->min_qp = g_value_get_uint(value);
185 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
191 gst_h263encode_get_property (GObject * object, guint prop_id,
192 GValue * value, GParamSpec * pspec)
194 GstVaapiEncode *encode = GST_VAAPI_ENCODE(object);
195 GstH263Encoder *h263encoder = GST_H263_ENCODER(encode->encoder);
196 ENCODER_ASSERT(h263encoder);
199 case H263_PROP_BITRATE:
200 g_value_set_uint (value, h263encoder->bitrate);
203 case H263_PROP_INTRA_PERIOD:
204 g_value_set_uint (value, h263encoder->intra_period);
207 case H263_PROP_INIT_QP:
208 g_value_set_uint (value, h263encoder->init_qp);
211 case H263_PROP_MIN_QP:
212 g_value_set_uint (value, h263encoder->min_qp);
216 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);