ducatih264enc: use base VIDENC2 structures where possible
[glsdk/gst-plugin-ducati.git] / src / gstducatih264enc.c
index d1f226dd00e9e0910e2a7309b830c60092028c25..7fbdccb4ac2d70997eb3d4cc20552b2cffcc15cb 100644 (file)
@@ -361,10 +361,9 @@ static gboolean
 gst_ducati_h264enc_configure (GstDucatiH264Enc * self)
 {
   int err, i, max_out_size = 0;
-  VIDENC2_DynamicParams *baseDynParams;
+  VIDENC2_DynamicParams *dynParams;
   VIDENC2_Params *baseParams;
   IH264ENC_Params *params;
-  IH264ENC_DynamicParams *dynParams;
   const GstVideoState *state;
 
   state = gst_base_video_encoder_get_state (GST_BASE_VIDEO_ENCODER (self));
@@ -392,12 +391,7 @@ gst_ducati_h264enc_configure (GstDucatiH264Enc * self)
     baseParams->metadataType[i] = IVIDEO_METADATAPLANE_NONE;
   }
 
-  params->rateControlParams.rateControlParamsPreset =
-      IH264_RATECONTROLPARAMS_DEFAULT;
-  params->interCodingParams.interCodingPreset = IH264_INTERCODING_DEFAULT;
-  params->intraCodingParams.intraCodingPreset = IH264_INTRACODING_DEFAULT;
-  params->nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_DEFAULT;
-  params->fmoCodingParams.fmoCodingPreset = IH264_FMOCODING_DEFAULT;
+  /* this is the only non-base field strictly required */
   params->maxIntraFrameInterval = 0x7fffffff;
 
   if (self->codec == NULL) {
@@ -410,44 +404,40 @@ gst_ducati_h264enc_configure (GstDucatiH264Enc * self)
   }
 
   dynParams = self->dynParams;
-  baseDynParams = (VIDENC2_DynamicParams *) self->dynParams;
-  baseDynParams->size = sizeof (IH264ENC_DynamicParams);
-  baseDynParams = &dynParams->videnc2DynamicParams;
+  dynParams = (VIDENC2_DynamicParams *) self->dynParams;
+  dynParams->size = sizeof (IVIDENC2_DynamicParams);
 
-  baseDynParams->refFrameRate =
+  dynParams->refFrameRate =
       gst_util_uint64_scale (1000, state->fps_n, state->fps_d);
-  baseDynParams->targetFrameRate = baseDynParams->refFrameRate;
-  baseDynParams->inputWidth = state->width;
-  baseDynParams->inputHeight = state->height;
-  baseDynParams->targetBitRate = self->bitrate;
-  baseDynParams->intraFrameInterval = 15;
-  baseDynParams->captureWidth = baseDynParams->inputWidth;
-  baseDynParams->forceFrame = IVIDEO_NA_FRAME;
-  baseDynParams->interFrameInterval = 1;
-  baseDynParams->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
-  baseDynParams->sampleAspectRatioHeight = 1;
-  baseDynParams->sampleAspectRatioWidth = 1;
-  baseDynParams->generateHeader = XDM_ENCODE_AU;
-  baseDynParams->ignoreOutbufSizeFlag = 1;
-  baseDynParams->lateAcquireArg = -1;
-
-  dynParams->rateControlParams.rateControlParamsPreset = 2;
-  dynParams->interCodingParams.interCodingPreset = 2;
+  dynParams->targetFrameRate = dynParams->refFrameRate;
+  dynParams->inputWidth = state->width;
+  dynParams->inputHeight = state->height;
+  dynParams->targetBitRate = self->bitrate;
+  dynParams->intraFrameInterval = 15;
+  dynParams->captureWidth = dynParams->inputWidth;
+  dynParams->forceFrame = IVIDEO_NA_FRAME;
+  dynParams->interFrameInterval = 1;
+  dynParams->mvAccuracy = IVIDENC2_MOTIONVECTOR_QUARTERPEL;
+  dynParams->sampleAspectRatioHeight = 1;
+  dynParams->sampleAspectRatioWidth = 1;
+  dynParams->generateHeader = XDM_ENCODE_AU;
+  dynParams->ignoreOutbufSizeFlag = 1;
+  dynParams->lateAcquireArg = -1;
 
   err = VIDENC2_control (self->codec,
-      XDM_SETPARAMS, baseDynParams, (IVIDENC2_Status *) self->status);
+      XDM_SETPARAMS, dynParams, self->status);
   if (err) {
     GST_ERROR_OBJECT (self, "XDM_SETPARAMS err=%d, extendedError=%08x",
-        err, self->status->videnc2Status.extendedError);
+        err, self->status->extendedError);
 
     return FALSE;
   }
 
   err = VIDENC2_control (self->codec,
-      XDM_GETBUFINFO, baseDynParams, (IVIDENC2_Status *) self->status);
+      XDM_GETBUFINFO, dynParams, self->status);
   if (err) {
     GST_ERROR_OBJECT (self, "XDM_GETBUFINFO err=%d, extendedError=%08x",
-        err, self->status->videnc2Status.extendedError);
+        err, self->status->extendedError);
 
     return FALSE;
   }
@@ -455,9 +445,9 @@ gst_ducati_h264enc_configure (GstDucatiH264Enc * self)
   self->inBufs->chromaFormat = XDM_YUV_420SP;
   self->inBufs->numPlanes = 2;
 
-  self->outBufs->numBufs = self->status->videnc2Status.bufInfo.minNumOutBufs;
+  self->outBufs->numBufs = self->status->bufInfo.minNumOutBufs;
   for (i = 0; i < self->outBufs->numBufs; i++) {
-    int size = self->status->videnc2Status.bufInfo.minOutBufSize[i].bytes;
+    int size = self->status->bufInfo.minOutBufSize[i].bytes;
     if (size > max_out_size)
       max_out_size = size;
   }
@@ -493,13 +483,13 @@ gst_ducati_h264enc_alloc_dce (GstDucatiH264Enc * self)
 
   self->codec = NULL;
 
-  self->dynParams = dce_alloc (sizeof (IH264ENC_DynamicParams));
-  memset (self->dynParams, 0, sizeof (IH264ENC_DynamicParams));
-  self->dynParams->videnc2DynamicParams.size = sizeof (IH264ENC_DynamicParams);
+  self->dynParams = dce_alloc (sizeof (IVIDENC2_DynamicParams));
+  memset (self->dynParams, 0, sizeof (IVIDENC2_DynamicParams));
+  self->dynParams->size = sizeof (IVIDENC2_DynamicParams);
 
-  self->status = dce_alloc (sizeof (IH264ENC_Status));
-  memset (self->status, 0, sizeof (IH264ENC_Status));
-  self->status->videnc2Status.size = sizeof (IH264ENC_Status);
+  self->status = dce_alloc (sizeof (IVIDENC2_Status));
+  memset (self->status, 0, sizeof (IVIDENC2_Status));
+  self->status->size = sizeof (IVIDENC2_Status);
 
   self->inBufs = dce_alloc (sizeof (IVIDEO2_BufDesc));
   memset (self->inBufs, 0, sizeof (IVIDEO2_BufDesc));
@@ -679,14 +669,14 @@ gst_ducati_h264enc_handle_frame (GstBaseVideoEncoder * base_video_encoder,
       self->inArgs, self->outArgs);
   if (err) {
     GST_WARNING_OBJECT (self, "process failed: err=%d, extendedError=%08x",
-        err, self->status->videnc2Status.extendedError);
+        err, self->status->extendedError);
 
     err = VIDENC2_control (self->codec,
         XDM_GETSTATUS, (IVIDENC2_DynamicParams *) self->dynParams,
-        (IVIDENC2_Status *) self->status);
+        self->status);
 
     GST_WARNING_OBJECT (self, "XDM_GETSTATUS: err=%d, extendedError=%08x",
-        err, self->status->videnc2Status.extendedError);
+        err, self->status->extendedError);
 
     return GST_FLOW_ERROR;
   }