ext/vorbis/oggvorbisenc.c: properly fail when we can't setup the vorbis encoder due...
authorBenjamin Otte <otte@gnome.org>
Mon, 24 May 2004 19:19:29 +0000 (19:19 +0000)
committerBenjamin Otte <otte@gnome.org>
Mon, 24 May 2004 19:19:29 +0000 (19:19 +0000)
Original commit message from CVS:
* ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_sinkconnect),
(gst_oggvorbisenc_setup):
properly fail when we can't setup the vorbis encoder due to
unsupported settings
* ext/vorbis/vorbisenc.c: (gst_vorbisenc_sinkconnect),
(gst_vorbisenc_setup):
same
* gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
fix case where warnings occured when one pad was unlinked while the
other's link function was called

ChangeLog
ext/vorbis/oggvorbisenc.c
ext/vorbis/vorbisenc.c
gst/audioconvert/gstaudioconvert.c

index 54cffa825a07e416c1cda8b0052ae67a046f2423..89e74943ce1c9921dc54087ad3266d1a4c125318 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2004-05-24  Benjamin Otte  <otte@gnome.org>
+
+       * ext/vorbis/oggvorbisenc.c: (gst_oggvorbisenc_sinkconnect),
+       (gst_oggvorbisenc_setup):
+         properly fail when we can't setup the vorbis encoder due to
+         unsupported settings
+       * ext/vorbis/vorbisenc.c: (gst_vorbisenc_sinkconnect),
+       (gst_vorbisenc_setup):
+         same
+       * gst/audioconvert/gstaudioconvert.c: (gst_audio_convert_link):
+         fix case where warnings occured when one pad was unlinked while the
+         other's link function was called
+
 2004-05-24  Thomas Vander Stichele  <thomas at apestaart dot org>
 
        * gst/tcp/Makefile.am:
index ceca4e59ffd063e1355b9cf905b4be35a16d1aa0..9fb6ddcefb2bd082a1140d2f5eb250812575f42e 100644 (file)
@@ -224,6 +224,7 @@ gst_oggvorbisenc_sinkconnect (GstPad * pad, const GstCaps * caps)
   GstStructure *structure;
 
   vorbisenc = GST_OGGVORBISENC (gst_pad_get_parent (pad));
+  vorbisenc->setup = FALSE;
 
   structure = gst_caps_get_structure (caps, 0);
   gst_structure_get_int (structure, "channels", &vorbisenc->channels);
@@ -655,14 +656,24 @@ gst_oggvorbisenc_setup (OggVorbisEnc * vorbisenc)
       vorbis_encode_ctl (&vorbisenc->vi, OV_ECTL_RATEMANAGE_SET, &ai);
     }
   } else {
-    if (vorbis_encode_setup_managed (&vorbisenc->vi,
-            vorbisenc->channels,
-            vorbisenc->frequency,
-            vorbisenc->max_bitrate > 0 ? vorbisenc->max_bitrate : -1,
-            vorbisenc->bitrate,
-            vorbisenc->min_bitrate > 0 ? vorbisenc->min_bitrate : -1)) {
-      g_warning
-          ("vorbisenc: initialisation failed: invalid parameters for bitrate\n");
+    int ret;
+
+    GST_LOG_OBJECT (vorbisenc,
+        "calling setup_managed with channels=%d, frequency=%d, bitrate=[%d,%d,%d]",
+        vorbisenc->channels, vorbisenc->frequency,
+        vorbisenc->min_bitrate > 0 ? vorbisenc->min_bitrate : -1,
+        vorbisenc->bitrate,
+        vorbisenc->max_bitrate > 0 ? vorbisenc->max_bitrate : -1);
+    ret =
+        vorbis_encode_setup_managed (&vorbisenc->vi, vorbisenc->channels,
+        vorbisenc->frequency,
+        vorbisenc->max_bitrate > 0 ? vorbisenc->max_bitrate : -1,
+        vorbisenc->bitrate,
+        vorbisenc->min_bitrate > 0 ? vorbisenc->min_bitrate : -1);
+    if (ret != 0) {
+      GST_ERROR_OBJECT (vorbisenc,
+          "vorbisenc: initialisation failed: invalid parameters for bitrate (returned: %d)",
+          ret);
       vorbis_info_clear (&vorbisenc->vi);
       return FALSE;
     }
index 696cda44dd691605b38d28b17587e78a2280e821..b660e1e6dbe83ef0aee1b21ff43c28976ccaa324 100644 (file)
@@ -228,6 +228,7 @@ gst_vorbisenc_sinkconnect (GstPad * pad, const GstCaps * caps)
   GstStructure *structure;
 
   vorbisenc = GST_VORBISENC (gst_pad_get_parent (pad));
+  vorbisenc->setup = FALSE;
 
   structure = gst_caps_get_structure (caps, 0);
   gst_structure_get_int (structure, "channels", &vorbisenc->channels);
@@ -622,6 +623,8 @@ update_start_message (VorbisEnc * vorbisenc)
 static gboolean
 gst_vorbisenc_setup (VorbisEnc * vorbisenc)
 {
+  vorbisenc->setup = FALSE;
+
   if (vorbisenc->bitrate < 0 && vorbisenc->min_bitrate < 0
       && vorbisenc->max_bitrate < 0) {
     vorbisenc->quality_set = TRUE;
@@ -635,9 +638,10 @@ gst_vorbisenc_setup (VorbisEnc * vorbisenc)
 
   if (vorbisenc->quality_set) {
     if (vorbis_encode_setup_vbr (&vorbisenc->vi,
-            vorbisenc->channels, vorbisenc->frequency, vorbisenc->quality)) {
-      g_warning
-          ("vorbisenc: initialisation failed: invalid parameters for quality");
+            vorbisenc->channels, vorbisenc->frequency,
+            vorbisenc->quality) != 0) {
+      GST_ERROR_OBJECT (vorbisenc,
+          "vorbisenc: initialisation failed: invalid parameters for quality");
       vorbis_info_clear (&vorbisenc->vi);
       return FALSE;
     }
@@ -662,8 +666,8 @@ gst_vorbisenc_setup (VorbisEnc * vorbisenc)
             vorbisenc->max_bitrate > 0 ? vorbisenc->max_bitrate : -1,
             vorbisenc->bitrate,
             vorbisenc->min_bitrate > 0 ? vorbisenc->min_bitrate : -1)) {
-      g_warning
-          ("vorbisenc: initialisation failed: invalid parameters for bitrate\n");
+      GST_ERROR_OBJECT (vorbisenc,
+          "vorbisenc: initialisation failed: invalid parameters for bitrate");
       vorbis_info_clear (&vorbisenc->vi);
       return FALSE;
     }
index 78eb4817d942ea94978b6045b84f3cf139279261..6d24bd9bf4a7e93fe10f2a96bf33d32b237ca2a5 100644 (file)
@@ -400,10 +400,14 @@ gst_audio_convert_link (GstPad * pad, const GstCaps * caps)
     return ret;
 
   /* woohoo, got it */
-  if (!gst_audio_convert_parse_caps (gst_pad_get_negotiated_caps (otherpad),
-          &other_ac_caps)) {
-    g_critical ("internal negotiation error");
-    return GST_PAD_LINK_REFUSED;
+  othercaps = (GstCaps *) gst_pad_get_negotiated_caps (otherpad);
+  if (othercaps) {
+    if (!gst_audio_convert_parse_caps (othercaps, &other_ac_caps)) {
+      g_critical ("internal negotiation error");
+      return GST_PAD_LINK_REFUSED;
+    }
+  } else {
+    other_ac_caps = ac_caps;
   }
 
   if (this->sink == pad) {