ducatimpeg4enc: set caps in configure
[glsdk/gst-plugin-ducati.git] / src / gstducatimpeg4enc.c
index 7dc7ced725f4a13edd9a7e100d0e56f533fb0dd6..5ee040dd7eb58cb2351d61dea377db8b51d8f568 100644 (file)
@@ -199,7 +199,7 @@ static void
 gst_ducati_mpeg4enc_set_property (GObject * object, guint prop_id,
     const GValue * value, GParamSpec * pspec)
 {
-  GstDucatiMPEG4Enc *self = GST_DUCATIMPEG4ENC (object);
+  GstDucatiMPEG4Enc *self;
 
   g_return_if_fail (GST_IS_DUCATIMPEG4ENC (object));
   self = GST_DUCATIMPEG4ENC (object);
@@ -220,7 +220,7 @@ static void
 gst_ducati_mpeg4enc_get_property (GObject * object, guint prop_id,
     GValue * value, GParamSpec * pspec)
 {
-  GstDucatiMPEG4Enc *self = GST_DUCATIMPEG4ENC (object);
+  GstDucatiMPEG4Enc *self;
 
   g_return_if_fail (GST_IS_DUCATIMPEG4ENC (object));
   self = GST_DUCATIMPEG4ENC (object);
@@ -237,33 +237,50 @@ gst_ducati_mpeg4enc_get_property (GObject * object, guint prop_id,
   }
 }
 
+static const char *
+get_profile_name (guint profile)
+{
+  switch (profile) {
+    case GST_DUCATI_MPEG4ENC_PROFILE_SIMPLE:
+      return "simple";
+    default:
+      return NULL;
+  }
+}
+
 static gboolean
 gst_ducati_mpeg4enc_configure (GstDucatiVidEnc * videnc)
 {
   GstDucatiMPEG4Enc *self = GST_DUCATIMPEG4ENC (videnc);
-  IMPEG4ENC_Params *params;
-  IMPEG4ENC_DynamicParams *dynParams;
+  const GstVideoState *state;
+  GstCaps *caps;
+  const char *s;
+  gboolean ret = TRUE;
 
   if (!GST_DUCATIVIDENC_CLASS (parent_class)->configure (videnc))
     return FALSE;
 
-  params = (IMPEG4ENC_Params *) videnc->params;
-  dynParams = (IMPEG4ENC_DynamicParams *) videnc->dynParams;
-
   videnc->params->profile = self->profile;
   videnc->params->level = self->level;
   videnc->params->maxInterFrameInterval = 0;
-
-  params->vopTimeIncrementResolution = 60;
-  params->nonMultiple16RefPadMethod = 1;
-
   videnc->dynParams->mvAccuracy = IVIDENC2_MOTIONVECTOR_HALFPEL;
   videnc->dynParams->interFrameInterval = 0;
 
-  /* 1 = square */
-  dynParams->aspectRatioIdc = 1;
-
-  return TRUE;
+  state = gst_base_video_encoder_get_state (GST_BASE_VIDEO_ENCODER (videnc));
+  caps = gst_caps_new_simple ("video/mpeg",
+      "mpegversion", G_TYPE_INT, 4,
+      "systemstream", G_TYPE_BOOLEAN, FALSE,
+      "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,
+      NULL);
+  s = get_profile_name (self->profile);
+  if (s)
+    gst_caps_set_simple (caps, "profile", G_TYPE_STRING, s, NULL);
+  ret = gst_pad_set_caps (GST_BASE_VIDEO_CODEC_SRC_PAD (self), caps);
+
+  return ret;
 }
 
 static gboolean
@@ -272,7 +289,7 @@ gst_ducati_mpeg4enc_allocate_params (GstDucatiVidEnc *
     gint outargs_sz)
 {
   return GST_DUCATIVIDENC_CLASS (parent_class)->allocate_params (videnc,
-      sizeof (IMPEG4ENC_Params), sizeof (IMPEG4ENC_DynamicParams),
+      sizeof (IVIDENC2_Params), sizeof (IVIDENC2_DynamicParams),
       sizeof (IVIDENC2_Status), sizeof (IVIDENC2_InArgs),
       sizeof (IVIDENC2_OutArgs));
 }