PROP_ENTROPY_MODE,
PROP_CONSTRAINED_INTRA_PREDICTION,
PROP_LOOP_FILTER_MODE,
+ PROP_REF_FRAMES
};
#ifdef USE_OMX_TARGET_RPI
#define GST_OMX_H264_VIDEO_ENC_ENTROPY_MODE_DEFAULT (0xffffffff)
#define GST_OMX_H264_VIDEO_ENC_CONSTRAINED_INTRA_PREDICTION_DEFAULT (FALSE)
#define GST_OMX_H264_VIDEO_ENC_LOOP_FILTER_MODE_DEFAULT (0xffffffff)
-
+#define GST_OMX_H264_VIDEO_ENC_REF_FRAMES_DEFAULT 0
+#define GST_OMX_H264_VIDEO_ENC_REF_FRAMES_MIN 0
+#define GST_OMX_H264_VIDEO_ENC_REF_FRAMES_MAX 16
/* class initialization */
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
GST_PARAM_MUTABLE_READY));
+ g_object_class_install_property (gobject_class, PROP_REF_FRAMES,
+ g_param_spec_uchar ("ref-frames", "Reference frames",
+ "Number of reference frames used for inter-motion search (0=component default)",
+ GST_OMX_H264_VIDEO_ENC_REF_FRAMES_MIN,
+ GST_OMX_H264_VIDEO_ENC_REF_FRAMES_MAX,
+ GST_OMX_H264_VIDEO_ENC_REF_FRAMES_DEFAULT,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
+ GST_PARAM_MUTABLE_READY));
+
basevideoenc_class->flush = gst_omx_h264_enc_flush;
basevideoenc_class->stop = gst_omx_h264_enc_stop;
case PROP_LOOP_FILTER_MODE:
self->loop_filter_mode = g_value_get_enum (value);
break;
+ case PROP_REF_FRAMES:
+ self->ref_frames = g_value_get_uchar (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
case PROP_LOOP_FILTER_MODE:
g_value_set_enum (value, self->loop_filter_mode);
break;
+ case PROP_REF_FRAMES:
+ g_value_set_uchar (value, self->ref_frames);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
self->constrained_intra_prediction =
GST_OMX_H264_VIDEO_ENC_CONSTRAINED_INTRA_PREDICTION_DEFAULT;
self->loop_filter_mode = GST_OMX_H264_VIDEO_ENC_LOOP_FILTER_MODE_DEFAULT;
+ self->ref_frames = GST_OMX_H264_VIDEO_ENC_REF_FRAMES_DEFAULT;
}
static gboolean
param.nBFrames = self->b_frames;
}
+ if (self->ref_frames != GST_OMX_H264_VIDEO_ENC_REF_FRAMES_DEFAULT)
+ param.nRefFrames = self->ref_frames;
+
if (self->entropy_mode != GST_OMX_H264_VIDEO_ENC_ENTROPY_MODE_DEFAULT) {
param.bEntropyCodingCABAC = self->entropy_mode;
}