diff --git a/src/gstducatividenc.c b/src/gstducatividenc.c
index 94ff04245450efdd5c30211215bb4102acf7cb9b..30470e620d412d741d0dc9f6a181d1454126f0b9 100644 (file)
--- a/src/gstducatividenc.c
+++ b/src/gstducatividenc.c
#define DEFAULT_BITRATE 2048
#define DEFAULT_RATE_PRESET GST_DUCATI_VIDENC_RATE_PRESET_STORAGE
+#define DEFAULT_INTRA_INTERVAL 15
#define GST_TYPE_DUCATI_VIDENC_RATE_PRESET (gst_ducati_videnc_rate_preset_get_type ())
{
PROP_0,
PROP_BITRATE,
- PROP_RATE_PRESET
+ PROP_RATE_PRESET,
+ PROP_INTRA_INTERVAL
};
static void gst_ducati_videnc_set_property (GObject * object, guint prop_id,
"H.264 Rate Control",
GST_TYPE_DUCATI_VIDENC_RATE_PRESET, DEFAULT_RATE_PRESET,
G_PARAM_READWRITE));
+
+ g_object_class_install_property (gobject_class, PROP_INTRA_INTERVAL,
+ g_param_spec_int ("intra-interval", "Intra-frame interval", "Interval between intra frames (keyframes)", 0,
+ INT_MAX, DEFAULT_INTRA_INTERVAL, G_PARAM_READWRITE));
}
static void
self->bitrate = DEFAULT_BITRATE * 1000;
self->rate_preset = DEFAULT_RATE_PRESET;
+ self->intra_interval = DEFAULT_INTRA_INTERVAL;
}
static gboolean
case PROP_RATE_PRESET:
self->rate_preset = g_value_get_enum (value);
break;
+ case PROP_INTRA_INTERVAL:
+ self->intra_interval = g_value_get_int (value);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
case PROP_RATE_PRESET:
g_value_set_enum (value, self->rate_preset);
break;
+ case PROP_INTRA_INTERVAL:
+ g_value_set_int (value, self->intra_interval);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
if (err) {
GST_ERROR_OBJECT (self, "XDM_SETPARAMS err=%d, extendedError=%08x",
err, self->status->extendedError);
+ gst_ducati_log_extended_error_info (self->status->extendedError);
return FALSE;
}
gst_ducati_videnc_configure_default (GstDucatiVidEnc * self)
{
VIDENC2_DynamicParams *dynParams;
+ VIDENC2_Params *params;
const GstVideoState *state;
int i;
if (self->rect.h == 0)
self->rect.h = state->height;
- self->params = (VIDENC2_Params *) self->params;
- self->params->encodingPreset = 0x03;
- self->params->rateControlPreset = self->rate_preset;
- self->params->maxHeight = self->rect.h;
- self->params->maxWidth = self->rect.w;
- self->params->dataEndianness = XDM_BYTE;
- self->params->maxInterFrameInterval = 1;
- self->params->maxBitRate = -1;
- self->params->minBitRate = 0;
- self->params->inputChromaFormat = XDM_YUV_420SP;
- self->params->inputContentType = IVIDEO_PROGRESSIVE;
- self->params->operatingMode = IVIDEO_ENCODE_ONLY;
- self->params->inputDataMode = IVIDEO_ENTIREFRAME;
- self->params->outputDataMode = IVIDEO_ENTIREFRAME;
- self->params->numInputDataUnits = 1;
- self->params->numOutputDataUnits = 1;
+ params = (VIDENC2_Params *) self->params;
+ params->encodingPreset = 0x03;
+ params->rateControlPreset = self->rate_preset;
+ params->maxHeight = self->rect.h;
+ params->maxWidth = self->rect.w;
+ params->dataEndianness = XDM_BYTE;
+ params->maxInterFrameInterval = 1;
+ params->maxBitRate = -1;
+ params->minBitRate = 0;
+ params->inputChromaFormat = XDM_YUV_420SP;
+ params->inputContentType = IVIDEO_PROGRESSIVE;
+ params->operatingMode = IVIDEO_ENCODE_ONLY;
+ params->inputDataMode = IVIDEO_ENTIREFRAME;
+ params->outputDataMode = IVIDEO_ENTIREFRAME;
+ params->numInputDataUnits = 1;
+ params->numOutputDataUnits = 1;
for (i = 0; i < IVIDEO_MAX_NUM_METADATA_PLANES; i++) {
- self->params->metadataType[i] = IVIDEO_METADATAPLANE_NONE;
+ params->metadataType[i] = IVIDEO_METADATAPLANE_NONE;
}
- dynParams = self->dynParams;
dynParams = (VIDENC2_DynamicParams *) self->dynParams;
dynParams->refFrameRate =
dynParams->inputWidth = self->rect.w;
dynParams->inputHeight = self->rect.h;
dynParams->targetBitRate = self->bitrate;
- dynParams->intraFrameInterval = 15;
+ dynParams->intraFrameInterval = self->intra_interval;
dynParams->captureWidth = dynParams->inputWidth;
dynParams->forceFrame = IVIDEO_NA_FRAME;
self->inArgs, self->outArgs);
if (err) {
GST_WARNING_OBJECT (self, "process failed: err=%d, extendedError=%08x",
- err, self->status->extendedError);
+ err, self->outArgs->extendedError);
+ gst_ducati_log_extended_error_info (self->outArgs->extendedError);
err = VIDENC2_control (self->codec,
XDM_GETSTATUS, (IVIDENC2_DynamicParams *) self->dynParams,