diff --git a/src/gstducatih264enc.c b/src/gstducatih264enc.c
index 7006c082ed0397398fe1edc81db3843a9ff50a33..5c5f23459da75d81e9e76f822234a7763148b175 100644 (file)
--- a/src/gstducatih264enc.c
+++ b/src/gstducatih264enc.c
#define GST_CAT_DEFAULT gst_ducati_debug
-#define DEFAULT_PROFILE GST_DUCATI_H264ENC_PROFILE_HIGH
-#define DEFAULT_LEVEL GST_DUCATI_H264ENC_LEVEL_40
+#define DEFAULT_PROFILE IH264_HIGH_PROFILE
+#define DEFAULT_LEVEL IH264_LEVEL_40
#define DEFAULT_QPI 28
#define DEFAULT_QP_MAX_I 36
#define DEFAULT_QP_MIN_I 10
GST_STATIC_PAD_TEMPLATE ("sink",
GST_PAD_SINK,
GST_PAD_ALWAYS,
- GST_STATIC_CAPS (GST_VIDEO_CAPS_YUV ("NV12"))
+ GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE ("NV12"))
);
static GstStaticPadTemplate gst_ducati_h264enc_src_template =
("video/x-h264, alignment=(string)au, stream-format=(string)byte-stream")
);
-GST_BOILERPLATE (GstDucatiH264Enc, gst_ducati_h264enc, GstDucatiVidEnc,
- GST_TYPE_DUCATIVIDENC);
+#define gst_ducati_h264enc_parent_class parent_class
+G_DEFINE_TYPE (GstDucatiH264Enc, gst_ducati_h264enc, GST_TYPE_DUCATIVIDENC);
-/* the values for the following enums are taken from the codec */
-
-enum
-{
- GST_DUCATI_H264ENC_PROFILE_BASELINE = 66, /**< BaseLine Profile */
- GST_DUCATI_H264ENC_PROFILE_MAIN = 77, /**< Main Profile */
- GST_DUCATI_H264ENC_PROFILE_EXTENDED = 88, /**< Extended Profile */
- GST_DUCATI_H264ENC_PROFILE_HIGH = 100, /**< High Profile */
- GST_DUCATI_H264ENC_PROFILE_HIGH_10 = 110, /**< High 10 Profile */
- GST_DUCATI_H264ENC_PROFILE_HIGH_422 = 122 /**< High 4:2:2 Profile */
-};
-
-enum
-{
- GST_DUCATI_H264ENC_LEVEL_10 = 10, /**< Level 1.0 */
- GST_DUCATI_H264ENC_LEVEL_1b = 9, /**< Level 1.b */
- GST_DUCATI_H264ENC_LEVEL_11 = 11, /**< Level 1.1 */
- GST_DUCATI_H264ENC_LEVEL_12 = 12, /**< Level 1.2 */
- GST_DUCATI_H264ENC_LEVEL_13 = 13, /**< Level 1.3 */
- GST_DUCATI_H264ENC_LEVEL_20 = 20, /**< Level 2.0 */
- GST_DUCATI_H264ENC_LEVEL_21 = 21, /**< Level 2.1 */
- GST_DUCATI_H264ENC_LEVEL_22 = 22, /**< Level 2.2 */
- GST_DUCATI_H264ENC_LEVEL_30 = 30, /**< Level 3.0 */
- GST_DUCATI_H264ENC_LEVEL_31 = 31, /**< Level 3.1 */
- GST_DUCATI_H264ENC_LEVEL_32 = 32, /**< Level 3.2 */
- GST_DUCATI_H264ENC_LEVEL_40 = 40, /**< Level 4.0 */
- GST_DUCATI_H264ENC_LEVEL_41 = 41, /**< Level 4.1 */
- GST_DUCATI_H264ENC_LEVEL_42 = 42, /**< Level 4.2 */
- GST_DUCATI_H264ENC_LEVEL_50 = 50, /**< Level 5.0 */
- GST_DUCATI_H264ENC_LEVEL_51 = 51 /**< Level 5.1 */
-};
-
static GType
gst_ducati_h264enc_profile_get_type (void)
{
if (!type) {
static const GEnumValue vals[] = {
- {GST_DUCATI_H264ENC_PROFILE_BASELINE, "Base Profile", "baseline"},
- {GST_DUCATI_H264ENC_PROFILE_MAIN, "Main Profile", "main"},
- {GST_DUCATI_H264ENC_PROFILE_EXTENDED, "Extended Profile", "extended"},
- {GST_DUCATI_H264ENC_PROFILE_HIGH, "High Profile", "high"},
- {GST_DUCATI_H264ENC_PROFILE_HIGH_10, "High 10 Profile", "high-10"},
- {GST_DUCATI_H264ENC_PROFILE_HIGH_422, "High 4:2:2 Profile", "high-422"},
+ {IH264_BASELINE_PROFILE, "Base Profile", "baseline"},
+ {IH264_MAIN_PROFILE, "Main Profile", "main"},
+ {IH264_EXTENDED_PROFILE, "Extended Profile", "extended"},
+ {IH264_HIGH_PROFILE, "High Profile", "high"},
+ {IH264_HIGH10_PROFILE, "High 10 Profile", "high-10"},
+ {IH264_HIGH422_PROFILE, "High 4:2:2 Profile", "high-422"},
{0, NULL, NULL},
};
"rate-control-params-preset-user-defined"},
{IH264_RATECONTROLPARAMS_EXISTING, "Existing rate control params",
"rate-control-params-preset-existing"},
- {IH264_RATECONTROLPARAMS_MAX, "Max rate control",
- "rate-control-params-preset-control"},
{0, NULL, NULL},
};
"perceptual-rate-control"},
{IH264_RATECONTROL_PRC_LOW_DELAY, "Low delay rate control",
"low-delay-rate-control"},
- {IH264_RATECONTROL_DEFAULT, "Default rcAlgo (PRC)",
- "default-rate-control"},
{0, NULL, NULL},
};
if (!type) {
static const GEnumValue vals[] = {
- {GST_DUCATI_H264ENC_LEVEL_10, "Level 1", "level-1"},
- {GST_DUCATI_H264ENC_LEVEL_1b, "Level 1b", "level-1b"},
- {GST_DUCATI_H264ENC_LEVEL_11, "Level 11", "level-11"},
- {GST_DUCATI_H264ENC_LEVEL_12, "Level 12", "level-12"},
- {GST_DUCATI_H264ENC_LEVEL_13, "Level 13", "level-13"},
- {GST_DUCATI_H264ENC_LEVEL_20, "Level 2", "level-2"},
- {GST_DUCATI_H264ENC_LEVEL_21, "Level 21", "level-21"},
- {GST_DUCATI_H264ENC_LEVEL_22, "Level 22", "level-22"},
- {GST_DUCATI_H264ENC_LEVEL_30, "Level 3", "level-3"},
- {GST_DUCATI_H264ENC_LEVEL_31, "Level 31", "level-31"},
- {GST_DUCATI_H264ENC_LEVEL_32, "Level 32", "level-32"},
- {GST_DUCATI_H264ENC_LEVEL_40, "Level 4", "level-4"},
- {GST_DUCATI_H264ENC_LEVEL_41, "Level 41", "level-41"},
- {GST_DUCATI_H264ENC_LEVEL_42, "Level 42", "level-42"},
- {GST_DUCATI_H264ENC_LEVEL_50, "Level 5", "level-5"},
- {GST_DUCATI_H264ENC_LEVEL_51, "Level 51", "level-51"},
+ {IH264_LEVEL_10, "Level 1", "level-1"},
+ {IH264_LEVEL_1b, "Level 1b", "level-1b"},
+ {IH264_LEVEL_11, "Level 11", "level-11"},
+ {IH264_LEVEL_12, "Level 12", "level-12"},
+ {IH264_LEVEL_13, "Level 13", "level-13"},
+ {IH264_LEVEL_20, "Level 2", "level-2"},
+ {IH264_LEVEL_21, "Level 21", "level-21"},
+ {IH264_LEVEL_22, "Level 22", "level-22"},
+ {IH264_LEVEL_30, "Level 3", "level-3"},
+ {IH264_LEVEL_31, "Level 31", "level-31"},
+ {IH264_LEVEL_32, "Level 32", "level-32"},
+ {IH264_LEVEL_40, "Level 4", "level-4"},
+ {IH264_LEVEL_41, "Level 41", "level-41"},
+ {IH264_LEVEL_42, "Level 42", "level-42"},
+ {IH264_LEVEL_50, "Level 5", "level-5"},
+ {IH264_LEVEL_51, "Level 51", "level-51"},
{0, NULL, NULL},
};
if (!type) {
static const GEnumValue vals[] = {
{IH264_ENTROPYCODING_CAVLC, "CAVLC coding type", "cavlc"},
- {IH264_ENTROPYCODING_DEFAULT, "Default coding type (cavlc)", "default"},
{IH264_ENTROPYCODING_CABAC, "Cabac coding mode", "cabac"},
{0, NULL, NULL},
};
if (!type) {
static const GEnumValue vals[] = {
{IH264_SLICEMODE_NONE, "No slice mode", "none"},
- {IH264_SLICEMODE_DEFAULT, "Default slice coding mode is MB based",
- "default"},
{IH264_SLICEMODE_MBUNIT,
"Slices are controlled based upon number of Macroblocks", "mbunit"},
{IH264_SLICEMODE_BYTES,
"Slices are controlled based upon number of bytes", "bytes"},
{IH264_SLICEMODE_OFFSET,
- "Slices are controlled based upon user defined offset unit of Row",
+ "Slices are controlled based upon user defined offset unit of Row",
"offset"},
{0, NULL, NULL},
};
}
static void
-gst_ducati_h264enc_base_init (gpointer g_class)
+gst_ducati_h264enc_class_init (GstDucatiH264EncClass * klass)
{
+ GObjectClass *gobject_class;
+ GstDucatiVidEncClass *videnc_class;
+ GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
+
+ gobject_class = G_OBJECT_CLASS (klass);
+ videnc_class = GST_DUCATIVIDENC_CLASS (klass);
+ parent_class = g_type_class_peek_parent (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_ducati_h264enc_src_template));
gst_element_class_add_pad_template (element_class,
gst_static_pad_template_get (&gst_ducati_h264enc_sink_template));
- gst_element_class_set_details_simple (element_class, "H264 Encoder",
+ gst_element_class_set_metadata (element_class, "H264 Encoder",
"Codec/Encoder/Video",
"Encode raw video into H264 stream",
"Alessandro Decina <alessandro.decina@collabora.com>");
GST_DUCATIVIDENC_CLASS (element_class)->codec_name = "ivahd_h264enc";
-}
-
-static void
-gst_ducati_h264enc_class_init (GstDucatiH264EncClass * klass)
-{
- GObjectClass *gobject_class;
- GstDucatiVidEncClass *videnc_class;
-
- gobject_class = G_OBJECT_CLASS (klass);
- videnc_class = GST_DUCATIVIDENC_CLASS (klass);
gobject_class->set_property = gst_ducati_h264enc_set_property;
gobject_class->get_property = gst_ducati_h264enc_get_property;
"H.264 rate control params preset",
"This preset controls the USER_DEFINED versus "
"DEFAULT mode. If you are not aware about the "
- "fields, it should be set as IH264_RATECONTROLPARAMS_DEFAULT",
+ "fields, it should be set as 'rate-control-params-preset-default'",
GST_TYPE_DUCATI_H264ENC_RCPP, IH264_RATECONTROLPARAMS_DEFAULT,
G_PARAM_READWRITE));
}
static void
-gst_ducati_h264enc_init (GstDucatiH264Enc * self, GstDucatiH264EncClass * klass)
+gst_ducati_h264enc_init (GstDucatiH264Enc * self)
{
GST_DEBUG ("gst_ducati_h264enc_init");
get_profile_name (guint profile)
{
switch (profile) {
- case GST_DUCATI_H264ENC_PROFILE_BASELINE:
+ case IH264_BASELINE_PROFILE:
return "baseline";
- case GST_DUCATI_H264ENC_PROFILE_MAIN:
+ case IH264_MAIN_PROFILE:
return "main";
- case GST_DUCATI_H264ENC_PROFILE_EXTENDED:
+ case IH264_EXTENDED_PROFILE:
return "extended";
- case GST_DUCATI_H264ENC_PROFILE_HIGH:
+ case IH264_HIGH_PROFILE:
return "high";
- case GST_DUCATI_H264ENC_PROFILE_HIGH_10:
+ case IH264_HIGH10_PROFILE:
return "high-10";
- case GST_DUCATI_H264ENC_PROFILE_HIGH_422:
+ case IH264_HIGH422_PROFILE:
return "high-422";
default:
return NULL;
get_level_name (guint level)
{
switch (level) {
- case GST_DUCATI_H264ENC_LEVEL_10:
+ case IH264_LEVEL_10:
return "1";
- case GST_DUCATI_H264ENC_LEVEL_1b:
+ case IH264_LEVEL_1b:
return "1b";
- case GST_DUCATI_H264ENC_LEVEL_11:
+ case IH264_LEVEL_11:
return "1.1";
- case GST_DUCATI_H264ENC_LEVEL_12:
+ case IH264_LEVEL_12:
return "1.2";
- case GST_DUCATI_H264ENC_LEVEL_13:
+ case IH264_LEVEL_13:
return "1.3";
- case GST_DUCATI_H264ENC_LEVEL_20:
+ case IH264_LEVEL_20:
return "2";
- case GST_DUCATI_H264ENC_LEVEL_21:
+ case IH264_LEVEL_21:
return "2.1";
- case GST_DUCATI_H264ENC_LEVEL_22:
+ case IH264_LEVEL_22:
return "2.2";
- case GST_DUCATI_H264ENC_LEVEL_30:
+ case IH264_LEVEL_30:
return "3";
- case GST_DUCATI_H264ENC_LEVEL_31:
+ case IH264_LEVEL_31:
return "3.1";
- case GST_DUCATI_H264ENC_LEVEL_32:
+ case IH264_LEVEL_32:
return "3.2";
- case GST_DUCATI_H264ENC_LEVEL_40:
+ case IH264_LEVEL_40:
return "4";
- case GST_DUCATI_H264ENC_LEVEL_41:
+ case IH264_LEVEL_41:
return "4.1";
- case GST_DUCATI_H264ENC_LEVEL_42:
+ case IH264_LEVEL_42:
return "4.2";
- case GST_DUCATI_H264ENC_LEVEL_50:
+ case IH264_LEVEL_50:
return "5";
- case GST_DUCATI_H264ENC_LEVEL_51:
+ case IH264_LEVEL_51:
return "5.1";
default:
return NULL;
IH264ENC_DynamicParams *dynParams;
gboolean ret;
const char *s;
- const GstVideoState *state;
+ const GstVideoCodecState *state;
GstCaps *caps;
int inter_interval;
videnc->params->level = self->level;
inter_interval = self->inter_interval;
- if (self->profile == GST_DUCATI_H264ENC_PROFILE_BASELINE)
+ if (self->profile == IH264_BASELINE_PROFILE)
inter_interval = 1;
else if (videnc->rate_preset == IVIDEO_LOW_DELAY)
inter_interval = 1;
dynParams->sliceCodingParams.sliceMode = self->slice_mode;
videnc->dynParams->interFrameInterval = inter_interval;
- state = gst_base_video_encoder_get_state (GST_BASE_VIDEO_ENCODER (videnc));
+ state = videnc->input_state;
caps = gst_caps_new_simple ("video/x-h264",
"width", G_TYPE_INT, videnc->rect.w,
"height", G_TYPE_INT, videnc->rect.h,
- "framerate", GST_TYPE_FRACTION, state->fps_n, state->fps_d,
- "pixel-aspect-ratio", GST_TYPE_FRACTION, state->par_n, state->par_d,
+ "framerate", GST_TYPE_FRACTION, GST_VIDEO_INFO_FPS_N (&state->info), GST_VIDEO_INFO_FPS_D (&state->info),
+ "pixel-aspect-ratio", GST_TYPE_FRACTION, GST_VIDEO_INFO_PAR_N (&state->info), GST_VIDEO_INFO_PAR_D (&state->info),
"stream-format", G_TYPE_STRING, "byte-stream",
"align", G_TYPE_STRING, "au",
"num-reorder-frames", G_TYPE_INT, inter_interval - 1, NULL);
s = get_level_name (self->level);
if (s)
gst_caps_set_simple (caps, "level", G_TYPE_STRING, s, NULL);
- ret = gst_pad_set_caps (GST_BASE_VIDEO_CODEC_SRC_PAD (self), caps);
+ ret = gst_pad_set_caps (GST_VIDEO_ENCODER_SRC_PAD (self), caps);
return ret;
}