theora: set the width/height/par on the srcpad caps
authorLuis de Bethencourt <luis.debethencourt@collabora.como>
Thu, 2 Jun 2011 16:57:05 +0000 (18:57 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Fri, 3 Jun 2011 06:00:53 +0000 (08:00 +0200)
ext/theora/gsttheoraenc.c
ext/theora/gsttheoraenc.h

index f9967d1e3e2bbc44021d5a54cfc304d57c438b58..15c9186a8cbc50a9c81889f01e0e32580f0cde94 100644 (file)
@@ -699,12 +699,16 @@ theora_enc_sink_setcaps (GstPad * pad, GstCaps * caps)
   enc->info.fps_denominator = enc->fps_d = fps_d;
   if (par) {
     enc->info.aspect_numerator = gst_value_get_fraction_numerator (par);
+    enc->par_n = gst_value_get_fraction_numerator (par);
     enc->info.aspect_denominator = gst_value_get_fraction_denominator (par);
+    enc->par_d = gst_value_get_fraction_denominator (par);
   } else {
     /* setting them to 0 indicates that the decoder can chose a good aspect
      * ratio, defaulting to 1/1 */
     enc->info.aspect_numerator = 0;
+    enc->par_n = 1;
     enc->info.aspect_denominator = 0;
+    enc->par_d = 1;
   }
 
   enc->info.colorspace = TH_CS_UNSPECIFIED;
@@ -1255,7 +1259,11 @@ theora_enc_chain (GstPad * pad, GstBuffer * buffer)
     buffers = g_slist_reverse (buffers);
 
     /* mark buffers and put on caps */
-    caps = gst_pad_get_caps (enc->srcpad);
+    caps = gst_caps_new_simple ("video/x-theora",
+        "width", G_TYPE_INT, enc->width,
+        "height", G_TYPE_INT, enc->height,
+        "framerate", GST_TYPE_FRACTION, enc->fps_n, enc->fps_d,
+        "pixel-aspect-ratio", GST_TYPE_FRACTION, enc->par_n, enc->par_d, NULL);
     caps = theora_set_header_on_caps (caps, buffers);
     GST_DEBUG ("here are the caps: %" GST_PTR_FORMAT, caps);
     gst_pad_set_caps (enc->srcpad, caps);
index 08707d85b1f412e37096009da0dee2010d7526bd..69d4050b877cbc45c78e7729236dc583e3083902 100644 (file)
@@ -102,6 +102,7 @@ struct _GstTheoraEnc
   gint info_width, info_height;
   gint width, height;
   gint fps_n, fps_d;
+  gint par_n, par_d;
   GstClockTime next_ts;
 
   GstClockTime expected_ts;