Merge branch 'master' into 0.11
authorSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 16 Apr 2011 07:12:31 +0000 (09:12 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Sat, 16 Apr 2011 07:12:31 +0000 (09:12 +0200)
28 files changed:
ext/ogg/gstoggdemux.c
ext/ogg/gstoggmux.c
ext/ogg/gstoggstream.c
gst-libs/gst/pbutils/encoding-target.c
gst-libs/gst/rtsp/gstrtsptransport.c
gst-libs/gst/tag/gstexiftag.c
gst-libs/gst/tag/gstid3tag.c
gst-libs/gst/tag/gstxmptag.c
gst-libs/gst/tag/tag.h
gst-libs/gst/tag/tags.c
gst-libs/gst/video/video.c
gst-libs/gst/video/video.h
gst/encoding/gstencodebin.c
gst/ffmpegcolorspace/imgconvert_template.h
gst/playback/gstplaybasebin.c
gst/subparse/tmplayerparse.c
gst/tcp/gstmultifdsink.c
gst/typefind/gsttypefindfunctions.c
gst/videorate/gstvideorate.c
gst/videoscale/vs_image.c
tests/check/Makefile.am
tests/check/elements/encodebin.c
tests/check/libs/tag.c
tests/examples/encoding/gstcapslist.c
tests/examples/gio/giosrc-mounting.c
tests/examples/playrec/playrec.c
tests/examples/seek/jsseek.c
tests/examples/seek/seek.c

index 14b8564..e084546 100644 (file)
@@ -3087,14 +3087,12 @@ gst_ogg_demux_handle_page (GstOggDemux * ogg, ogg_page * page)
       pad = gst_ogg_demux_find_pad (ogg, serialno);
     } else {
       GstClockTime chain_time;
-      GstOggChain *current_chain;
       gint64 current_time;
 
       /* this can only happen in push mode */
       if (ogg->pullmode)
         goto unknown_chain;
 
-      current_chain = ogg->current_chain;
       current_time = ogg->segment.last_stop;
 
       /* time of new chain is current time */
index 7a91c91..ae3a173 100644 (file)
@@ -318,10 +318,9 @@ gst_ogg_mux_sink_event (GstPad * pad, GstEvent * event)
 {
   GstOggMux *ogg_mux = GST_OGG_MUX (gst_pad_get_parent (pad));
   GstOggPadData *ogg_pad = (GstOggPadData *) gst_pad_get_element_private (pad);
-  gboolean ret;
+  gboolean ret = FALSE;
 
-  GST_DEBUG ("Got %s event on pad %s:%s", GST_EVENT_TYPE_NAME (event),
-      GST_DEBUG_PAD_NAME (pad));
+  GST_DEBUG_OBJECT (pad, "Got %s event", GST_EVENT_TYPE_NAME (event));
 
   switch (GST_EVENT_TYPE (event)) {
     case GST_EVENT_NEWSEGMENT:{
@@ -337,8 +336,10 @@ gst_ogg_mux_sink_event (GstPad * pad, GstEvent * event)
       /* We don't support non time NEWSEGMENT events */
       if (format != GST_FORMAT_TIME) {
         gst_event_unref (event);
-        return FALSE;
+        event = NULL;
+        break;
       }
+
       gst_segment_set_newsegment_full (&ogg_pad->segment, update, rate,
           applied_rate, format, start, stop, position);
 
@@ -349,12 +350,11 @@ gst_ogg_mux_sink_event (GstPad * pad, GstEvent * event)
       break;
     }
     default:
-      ret = TRUE;
       break;
   }
 
   /* now GstCollectPads can take care of the rest, e.g. EOS */
-  if (ret)
+  if (event != NULL)
     ret = ogg_pad->collect_event (pad, event);
 
   gst_object_unref (ogg_mux);
@@ -883,7 +883,6 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux)
         GST_DEBUG_OBJECT (data->pad, "EOS on pad");
         if (!pad->eos) {
           ogg_page page;
-          GstFlowReturn ret;
 
           /* it's no longer active */
           ogg_mux->active_pads--;
@@ -893,8 +892,7 @@ gst_ogg_mux_queue_pads (GstOggMux * ogg_mux)
 
           while (ogg_stream_flush (&pad->map.stream, &page)) {
             /* Place page into the per-pad queue */
-            ret = gst_ogg_mux_pad_queue_page (ogg_mux, pad, &page,
-                pad->first_delta);
+            gst_ogg_mux_pad_queue_page (ogg_mux, pad, &page, pad->first_delta);
             /* increment the page number counter */
             pad->pageno++;
             /* mark other pages as delta */
index d192668..6102bcb 100644 (file)
@@ -494,22 +494,16 @@ setup_dirac_mapper (GstOggStream * pad, ogg_packet * packet)
 static gboolean
 is_keyframe_dirac (GstOggStream * pad, gint64 granulepos)
 {
-  gint64 pt;
   int dist_h;
   int dist_l;
   int dist;
-  int delay;
-  gint64 dt;
 
   if (granulepos == -1)
     return -1;
 
-  pt = ((granulepos >> 22) + (granulepos & OGG_DIRAC_GRANULE_LOW_MASK)) >> 9;
   dist_h = (granulepos >> 22) & 0xff;
   dist_l = granulepos & 0xff;
   dist = (dist_h << 8) | dist_l;
-  delay = (granulepos >> 9) & 0x1fff;
-  dt = pt - delay;
 
   return (dist == 0);
 }
@@ -518,16 +512,10 @@ static gint64
 granulepos_to_granule_dirac (GstOggStream * pad, gint64 gp)
 {
   gint64 pt;
-  int dist_h;
-  int dist_l;
-  int dist;
   int delay;
   gint64 dt;
 
   pt = ((gp >> 22) + (gp & OGG_DIRAC_GRANULE_LOW_MASK)) >> 9;
-  dist_h = (gp >> 22) & 0xff;
-  dist_l = gp & 0xff;
-  dist = (dist_h << 8) | dist_l;
   delay = (gp >> 9) & 0x1fff;
   dt = pt - delay;
 
index 525e70c..bb8223d 100644 (file)
@@ -449,21 +449,19 @@ serialize_encoding_profile (GKeyFile * out, GstEncodingProfile * prof)
   const GList *tmp;
   guint i;
   const gchar *profname, *profdesc, *profpreset, *proftype;
-  const GstCaps *profformat, *profrestriction;
+  const GstCaps *profformat;
 
   profname = gst_encoding_profile_get_name (prof);
   profdesc = gst_encoding_profile_get_description (prof);
   profformat = gst_encoding_profile_get_format (prof);
   profpreset = gst_encoding_profile_get_preset (prof);
   proftype = gst_encoding_profile_get_type_nick (prof);
-  profrestriction = gst_encoding_profile_get_restriction (prof);
 
   profgroupname = g_strdup_printf ("profile-%s", profname);
 
   g_key_file_set_string (out, profgroupname, "name", profname);
 
-  g_key_file_set_value (out, profgroupname, "type",
-      gst_encoding_profile_get_type_nick (prof));
+  g_key_file_set_value (out, profgroupname, "type", proftype);
 
   if (profdesc) {
     gchar *locale;
@@ -1002,7 +1000,6 @@ gst_encoding_target_save (GstEncodingTarget * target, GError ** error)
 {
   gchar *filename;
   gchar *lfilename;
-  gboolean res;
 
   g_return_val_if_fail (GST_IS_ENCODING_TARGET (target), FALSE);
   g_return_val_if_fail (target->category != NULL, FALSE);
@@ -1013,7 +1010,7 @@ gst_encoding_target_save (GstEncodingTarget * target, GError ** error)
       GST_ENCODING_TARGET_DIRECTORY, target->category, lfilename, NULL);
   g_free (lfilename);
 
-  res = gst_encoding_target_save_to_file (target, filename, error);
+  gst_encoding_target_save_to_file (target, filename, error);
   g_free (filename);
 
   return TRUE;
index ad1b8e2..de3085e 100644 (file)
@@ -270,6 +270,20 @@ parse_mode (GstRTSPTransport * transport, const gchar * str)
 }
 
 static gboolean
+check_range (const gchar * str, gchar ** tmp, gint * range)
+{
+  glong range_val;
+
+  range_val = strtol (str, tmp, 10);
+  if (range_val >= G_MININT && range_val <= G_MAXINT) {
+    *range = range_val;
+    return TRUE;
+  } else {
+    return FALSE;
+  }
+}
+
+static gboolean
 parse_range (const gchar * str, GstRTSPRange * range)
 {
   gchar *minus;
@@ -286,16 +300,14 @@ parse_range (const gchar * str, GstRTSPRange * range)
     if (g_ascii_isspace (minus[1]) || minus[1] == '+' || minus[1] == '-')
       goto invalid_range;
 
-    range->min = strtol (str, &tmp, 10);
-    if (str == tmp || tmp != minus)
+    if (!check_range (str, &tmp, &range->min) || str == tmp || tmp != minus)
       goto invalid_range;
 
-    range->max = strtol (minus + 1, &tmp, 10);
-    if (*tmp && *tmp != ';')
+    if (!check_range (minus + 1, &tmp, &range->max) || (*tmp && *tmp != ';'))
       goto invalid_range;
   } else {
-    range->min = strtol (str, &tmp, 10);
-    if (str == tmp || (*tmp && *tmp != ';'))
+    if (!check_range (str, &tmp, &range->min) || str == tmp ||
+        (*tmp && *tmp != ';'))
       goto invalid_range;
 
     range->max = -1;
index 620e330..e64ada4 100644 (file)
@@ -301,6 +301,7 @@ EXIF_DESERIALIZATION_FUNC (add_to_pending_tags);
 #define EXIF_TAG_DATE_TIME_DIGITIZED 0x9004
 #define EXIF_TAG_SHUTTER_SPEED_VALUE 0x9201
 #define EXIF_TAG_APERTURE_VALUE 0x9202
+#define EXIF_TAG_EXPOSURE_BIAS 0x9204
 #define EXIF_TAG_METERING_MODE 0x9207
 #define EXIF_TAG_FLASH 0x9209
 #define EXIF_TAG_FOCAL_LENGTH 0x920A
@@ -388,6 +389,8 @@ static const GstExifTagMatch tag_map_exif[] = {
   {GST_TAG_CAPTURING_FOCAL_RATIO, EXIF_TAG_APERTURE_VALUE, EXIF_TYPE_RATIONAL,
         0,
       serialize_aperture_value, deserialize_aperture_value},
+  {GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, EXIF_TAG_EXPOSURE_BIAS,
+      EXIF_TYPE_SRATIONAL, 0, NULL, NULL},
   {GST_TAG_CAPTURING_METERING_MODE, EXIF_TAG_METERING_MODE, EXIF_TYPE_SHORT, 0,
       serialize_metering_mode, deserialize_metering_mode},
   {GST_TAG_CAPTURING_FLASH_FIRED, EXIF_TAG_FLASH, EXIF_TYPE_SHORT, 0,
@@ -921,6 +924,41 @@ write_exif_rational_tag_from_taglist (GstExifWriter * writer,
 }
 
 static void
+write_exif_signed_rational_tag_from_taglist (GstExifWriter * writer,
+    const GstTagList * taglist, const GstExifTagMatch * exiftag)
+{
+  const GValue *value;
+  gdouble num = 0;
+  gint tag_size = gst_tag_list_get_tag_size (taglist, exiftag->gst_tag);
+
+  if (tag_size != 1) {
+    GST_WARNING ("Only the first item in the taglist will be serialized");
+    return;
+  }
+
+  value = gst_tag_list_get_value_index (taglist, exiftag->gst_tag, 0);
+
+  /* do some conversion if needed */
+  switch (G_VALUE_TYPE (value)) {
+    case G_TYPE_DOUBLE:
+      num = g_value_get_double (value);
+      gst_exif_writer_write_signed_rational_tag_from_double (writer,
+          exiftag->exif_tag, num);
+      break;
+    default:
+      if (G_VALUE_TYPE (value) == GST_TYPE_FRACTION) {
+        gst_exif_writer_write_signed_rational_tag (writer, exiftag->exif_tag,
+            gst_value_get_fraction_numerator (value),
+            gst_value_get_fraction_denominator (value));
+      } else {
+        GST_WARNING ("Conversion from %s to signed rational not supported",
+            G_VALUE_TYPE_NAME (value));
+      }
+      break;
+  }
+}
+
+static void
 write_exif_integer_tag_from_taglist (GstExifWriter * writer,
     const GstTagList * taglist, const GstExifTagMatch * exiftag)
 {
@@ -980,6 +1018,9 @@ write_exif_tag_from_taglist (GstExifWriter * writer, const GstTagList * taglist,
     case EXIF_TYPE_RATIONAL:
       write_exif_rational_tag_from_taglist (writer, taglist, exiftag);
       break;
+    case EXIF_TYPE_SRATIONAL:
+      write_exif_signed_rational_tag_from_taglist (writer, taglist, exiftag);
+      break;
     case EXIF_TYPE_LONG:
     case EXIF_TYPE_SHORT:
       write_exif_integer_tag_from_taglist (writer, taglist, exiftag);
@@ -1588,6 +1629,10 @@ parse_exif_ifd (GstExifReader * exif_reader, gint buf_offset,
         parse_exif_rational_tag (exif_reader, tag_map[map_index].gst_tag,
             tagdata.count, tagdata.offset, 1, FALSE);
         break;
+      case EXIF_TYPE_SRATIONAL:
+        parse_exif_rational_tag (exif_reader, tag_map[map_index].gst_tag,
+            tagdata.count, tagdata.offset, 1, TRUE);
+        break;
       case EXIF_TYPE_UNDEFINED:
         parse_exif_undefined_tag (exif_reader, &tag_map[map_index],
             tagdata.count, tagdata.offset, tagdata.offset_as_data);
index 8c9b352..2c3c661 100644 (file)
@@ -109,7 +109,7 @@ static const gchar *genres[] = {
   "Native American",
   "Cabaret",
   "New Wave",
-  "Psychadelic",
+  "Psychedelic",
   "Rave",
   "Showtunes",
   "Trailer",
@@ -135,7 +135,7 @@ static const gchar *genres[] = {
   "Avantgarde",
   "Gothic Rock",
   "Progressive Rock",
-  "Psychadelic Rock",
+  "Psychedelic Rock",
   "Symphonic Rock",
   "Slow Rock",
   "Big Band",
index ea60a74..7b0da72 100644 (file)
@@ -897,6 +897,9 @@ _init_xmp_tag_map (gpointer user_data)
   _gst_xmp_schema_add_simple_mapping (schema, GST_TAG_GEO_LOCATION_LONGITUDE,
       "exif:GPSLongitude", GST_XMP_TAG_TYPE_SIMPLE, serialize_exif_longitude,
       deserialize_exif_longitude);
+  _gst_xmp_schema_add_simple_mapping (schema,
+      GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, "exif:ExposureBiasValue",
+      GST_XMP_TAG_TYPE_SIMPLE, NULL, NULL);
 
   /* compound exif tags */
   array = g_ptr_array_sized_new (2);
@@ -1034,6 +1037,18 @@ read_one_tag (GstTagList * list, const gchar * tag, XmpTag * xmptag,
       gst_tag_list_add (list, merge_mode, tag, v, NULL);
       break;
     }
+    case G_TYPE_DOUBLE:{
+      gdouble value = 0;
+      gint frac_n, frac_d;
+
+      if (sscanf (v, "%d/%d", &frac_n, &frac_d) == 2) {
+        gst_util_fraction_to_double (frac_n, frac_d, &value);
+        gst_tag_list_add (list, merge_mode, tag, value, NULL);
+      } else {
+        GST_WARNING ("Failed to parse fraction: %s", v);
+      }
+      break;
+    }
     default:
       if (tag_type == GST_TYPE_DATE_TIME) {
         GstDateTime *datetime = NULL;
@@ -1463,6 +1478,8 @@ gst_value_serialize_xmp (const GValue * value)
       return g_strdup_printf ("%d", g_value_get_int (value));
     case G_TYPE_UINT:
       return g_strdup_printf ("%u", g_value_get_uint (value));
+    case G_TYPE_DOUBLE:
+      return double_to_fraction_string (g_value_get_double (value));
     default:
       break;
   }
index f8189f0..1e01c89 100644 (file)
@@ -203,6 +203,15 @@ G_BEGIN_DECLS
 #define GST_TAG_CAPTURING_EXPOSURE_MODE       "capturing-exposure-mode"
 
 /**
+ * GST_TAG_CAPTURING_EXPOSURE_COMPENSATION:
+ *
+ * Exposure compensation using when capturing an image in EV. (double)
+ *
+ * Since: 0.10.33
+ */
+#define GST_TAG_CAPTURING_EXPOSURE_COMPENSATION "capturing-exposure-compensation"
+
+/**
  * GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE:
  *
  * Scene mode used when capturing an image. (string)
index 6dbddf2..cb60b54 100644 (file)
@@ -133,6 +133,10 @@ gst_tag_register_tags_internal (gpointer unused)
       G_TYPE_STRING, _("capturing exposure mode"),
       _("The exposure mode used when capturing an image"), NULL);
 
+  gst_tag_register (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, GST_TAG_FLAG_META,
+      G_TYPE_DOUBLE, _("capturing exposure compensation"),
+      _("The exposure compensation used when capturing an image"), NULL);
+
   gst_tag_register (GST_TAG_CAPTURING_SCENE_CAPTURE_TYPE, GST_TAG_FLAG_META,
       G_TYPE_STRING, _("capturing scene capture type"),
       _("The scene capture mode used when capturing an image"), NULL);
index a369387..f680c5a 100644 (file)
@@ -1061,27 +1061,6 @@ gboolean
 gst_video_format_is_rgb (GstVideoFormat format)
 {
   switch (format) {
-    case GST_VIDEO_FORMAT_I420:
-    case GST_VIDEO_FORMAT_YV12:
-    case GST_VIDEO_FORMAT_YUY2:
-    case GST_VIDEO_FORMAT_YVYU:
-    case GST_VIDEO_FORMAT_UYVY:
-    case GST_VIDEO_FORMAT_AYUV:
-    case GST_VIDEO_FORMAT_Y41B:
-    case GST_VIDEO_FORMAT_Y42B:
-    case GST_VIDEO_FORMAT_Y444:
-    case GST_VIDEO_FORMAT_v210:
-    case GST_VIDEO_FORMAT_v216:
-    case GST_VIDEO_FORMAT_NV12:
-    case GST_VIDEO_FORMAT_NV21:
-    case GST_VIDEO_FORMAT_v308:
-    case GST_VIDEO_FORMAT_UYVP:
-    case GST_VIDEO_FORMAT_A420:
-    case GST_VIDEO_FORMAT_YUV9:
-    case GST_VIDEO_FORMAT_YVU9:
-    case GST_VIDEO_FORMAT_IYU1:
-    case GST_VIDEO_FORMAT_AYUV64:
-      return FALSE;
     case GST_VIDEO_FORMAT_RGBx:
     case GST_VIDEO_FORMAT_BGRx:
     case GST_VIDEO_FORMAT_xRGB:
@@ -1142,24 +1121,6 @@ gst_video_format_is_yuv (GstVideoFormat format)
     case GST_VIDEO_FORMAT_IYU1:
     case GST_VIDEO_FORMAT_AYUV64:
       return TRUE;
-    case GST_VIDEO_FORMAT_RGBx:
-    case GST_VIDEO_FORMAT_BGRx:
-    case GST_VIDEO_FORMAT_xRGB:
-    case GST_VIDEO_FORMAT_xBGR:
-    case GST_VIDEO_FORMAT_RGBA:
-    case GST_VIDEO_FORMAT_BGRA:
-    case GST_VIDEO_FORMAT_ARGB:
-    case GST_VIDEO_FORMAT_ABGR:
-    case GST_VIDEO_FORMAT_RGB:
-    case GST_VIDEO_FORMAT_BGR:
-    case GST_VIDEO_FORMAT_RGB16:
-    case GST_VIDEO_FORMAT_BGR16:
-    case GST_VIDEO_FORMAT_RGB15:
-    case GST_VIDEO_FORMAT_BGR15:
-    case GST_VIDEO_FORMAT_RGB8_PALETTED:
-    case GST_VIDEO_FORMAT_ARGB64:
-    case GST_VIDEO_FORMAT_r210:
-      return FALSE;
     default:
       return FALSE;
   }
@@ -1205,26 +1166,6 @@ gboolean
 gst_video_format_has_alpha (GstVideoFormat format)
 {
   switch (format) {
-    case GST_VIDEO_FORMAT_I420:
-    case GST_VIDEO_FORMAT_YV12:
-    case GST_VIDEO_FORMAT_YUY2:
-    case GST_VIDEO_FORMAT_YVYU:
-    case GST_VIDEO_FORMAT_UYVY:
-    case GST_VIDEO_FORMAT_Y41B:
-    case GST_VIDEO_FORMAT_Y42B:
-    case GST_VIDEO_FORMAT_Y444:
-    case GST_VIDEO_FORMAT_v210:
-    case GST_VIDEO_FORMAT_v216:
-    case GST_VIDEO_FORMAT_NV12:
-    case GST_VIDEO_FORMAT_NV21:
-    case GST_VIDEO_FORMAT_v308:
-    case GST_VIDEO_FORMAT_Y800:
-    case GST_VIDEO_FORMAT_Y16:
-    case GST_VIDEO_FORMAT_UYVP:
-    case GST_VIDEO_FORMAT_YUV9:
-    case GST_VIDEO_FORMAT_YVU9:
-    case GST_VIDEO_FORMAT_IYU1:
-      return FALSE;
     case GST_VIDEO_FORMAT_AYUV:
     case GST_VIDEO_FORMAT_RGBA:
     case GST_VIDEO_FORMAT_BGRA:
@@ -1235,18 +1176,6 @@ gst_video_format_has_alpha (GstVideoFormat format)
     case GST_VIDEO_FORMAT_ARGB64:
     case GST_VIDEO_FORMAT_AYUV64:
       return TRUE;
-    case GST_VIDEO_FORMAT_RGBx:
-    case GST_VIDEO_FORMAT_BGRx:
-    case GST_VIDEO_FORMAT_xRGB:
-    case GST_VIDEO_FORMAT_xBGR:
-    case GST_VIDEO_FORMAT_RGB:
-    case GST_VIDEO_FORMAT_BGR:
-    case GST_VIDEO_FORMAT_RGB16:
-    case GST_VIDEO_FORMAT_BGR16:
-    case GST_VIDEO_FORMAT_RGB15:
-    case GST_VIDEO_FORMAT_BGR15:
-    case GST_VIDEO_FORMAT_r210:
-      return FALSE;
     default:
       return FALSE;
   }
index 8f5cabf..fdd6b43 100644 (file)
@@ -70,7 +70,7 @@ G_BEGIN_DECLS
  * @GST_VIDEO_FORMAT_YVU9: planar 4:1:0 YUV (like YUV9 but UV planes swapped) (Since: 0.10.32)
  * @GST_VIDEO_FORMAT_IYU1: packed 4:1:1 YUV (Cb-Y0-Y1-Cr-Y2-Y3 ...) (Since: 0.10.32)
  * @GST_VIDEO_FORMAT_ARGB64: rgb with alpha channel first, 16 bits per channel (Since: 0.10.33)
- * @GST_VIDEO_FORMAT_AY64: packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) (Since: 0.10.33)
+ * @GST_VIDEO_FORMAT_AYUV64: packed 4:4:4 YUV with alpha channel, 16 bits per channel (A0-Y0-U0-V0 ...) (Since: 0.10.33)
  * @GST_VIDEO_FORMAT_r210: packed 4:4:4 RGB, 10 bits per channel (Since: 0.10.33)
  *
  * Enum value describing the most common video formats.
index 1380fe2..7b0f1b4 100644 (file)
@@ -1559,6 +1559,7 @@ stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup)
   /* Capsfilter - outqueue */
   gst_element_set_state (sgroup->outfilter, GST_STATE_NULL);
   gst_element_unlink (sgroup->outfilter, sgroup->outqueue);
+  gst_element_set_state (sgroup->outqueue, GST_STATE_NULL);
   gst_bin_remove (GST_BIN (ebin), sgroup->outqueue);
 
   /* streamcombiner - parser - capsfilter */
@@ -1566,6 +1567,7 @@ stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup)
     gst_element_set_state (sgroup->parser, GST_STATE_NULL);
     gst_element_unlink (sgroup->parser, sgroup->outfilter);
     gst_element_unlink (sgroup->combiner, sgroup->parser);
+    gst_bin_remove ((GstBin *) ebin, sgroup->parser);
   }
 
   /* Sink Ghostpad */
@@ -1606,6 +1608,8 @@ stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup)
       gst_iterator_resync (it);
     }
     gst_iterator_free (it);
+    gst_element_set_state (sgroup->combiner, GST_STATE_NULL);
+    gst_bin_remove ((GstBin *) ebin, sgroup->combiner);
   }
 
   if (sgroup->splitter) {
@@ -1616,15 +1620,23 @@ stream_group_free (GstEncodeBin * ebin, StreamGroup * sgroup)
       gst_iterator_resync (it);
     }
     gst_iterator_free (it);
+
+    gst_element_set_state (sgroup->splitter, GST_STATE_NULL);
+    gst_bin_remove ((GstBin *) ebin, sgroup->splitter);
   }
 
   if (sgroup->inqueue)
     gst_bin_remove ((GstBin *) ebin, sgroup->inqueue);
+
   if (sgroup->encoder)
     gst_bin_remove ((GstBin *) ebin, sgroup->encoder);
+
   if (sgroup->smartencoder)
     gst_bin_remove ((GstBin *) ebin, sgroup->smartencoder);
 
+  if (sgroup->outfilter)
+    gst_bin_remove ((GstBin *) ebin, sgroup->outfilter);
+
   g_slice_free (StreamGroup, sgroup);
 }
 
@@ -1653,6 +1665,7 @@ gst_encode_bin_tear_down_profile (GstEncodeBin * ebin)
 
   /* Remove muxer if present */
   if (ebin->muxer) {
+    gst_element_set_state (ebin->muxer, GST_STATE_NULL);
     gst_bin_remove (GST_BIN (ebin), ebin->muxer);
     ebin->muxer = NULL;
   }
index fa0e8c2..3b287e7 100644 (file)
@@ -2153,7 +2153,7 @@ static int glue (get_alpha_info_, RGB_NAME) (const AVPicture * src,
 {
   const unsigned char *p;
   int src_wrap, ret, x, y;
-  unsigned int r, g, b, a;
+  unsigned int G_GNUC_UNUSED r, G_GNUC_UNUSED g, G_GNUC_UNUSED b, a;
 
   p = src->data[0];
   src_wrap = src->linesize[0] - BPP * width;
index 530d401..847e12f 100644 (file)
@@ -425,7 +425,6 @@ group_commit (GstPlayBaseBin * play_base_bin, gboolean fatal, gboolean subtitle)
 {
   GstPlayBaseGroup *group;
   gboolean had_active_group;
-  gboolean res;
 
   GROUP_LOCK (play_base_bin);
   group = play_base_bin->building_group;
@@ -486,8 +485,7 @@ group_commit (GstPlayBaseBin * play_base_bin, gboolean fatal, gboolean subtitle)
 
     setup_substreams (play_base_bin);
     GST_DEBUG_OBJECT (play_base_bin, "Emitting signal");
-    res =
-        GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)->setup_output_pads
+    GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)->setup_output_pads
         (play_base_bin, group);
     GST_DEBUG_OBJECT (play_base_bin, "done");
 
@@ -1167,7 +1165,6 @@ probe_triggered (GstPad * pad, GstEvent * event, gpointer user_data)
   GstPlayBaseGroup *group;
   GstPlayBaseBin *play_base_bin;
   GstStreamInfo *info;
-  gboolean res;
   GstEventType type;
 
   type = GST_EVENT_TYPE (event);
@@ -1231,8 +1228,7 @@ probe_triggered (GstPad * pad, GstEvent * event, gpointer user_data)
       setup_substreams (play_base_bin);
       GST_DEBUG ("switching to next group %p - emitting signal", group);
       /* and signal the new group */
-      res =
-          GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)->setup_output_pads
+      GST_PLAY_BASE_BIN_GET_CLASS (play_base_bin)->setup_output_pads
           (play_base_bin, group);
 
       GROUP_UNLOCK (play_base_bin);
index 8f48c6e..3937de6 100644 (file)
@@ -84,7 +84,6 @@ tmplayer_parse_line (ParserState * state, const gchar * line, guint line_num)
 {
   GstClockTime ts = GST_CLOCK_TIME_NONE;
   const gchar *text_start = NULL;
-  gboolean multiline = FALSE;
   gchar *ret = NULL;
   gchar divc = '\0';
   guint h, m, s, l = 1;
@@ -94,7 +93,6 @@ tmplayer_parse_line (ParserState * state, const gchar * line, guint line_num)
     GST_LOG ("multiline format %u %u %u %u", h, m, s, l);
     ts = GST_SECOND * ((((h * 60) + m) * 60) + s);
     text_start = strchr (line, '=');
-    multiline = TRUE;
   } else if (sscanf (line, "%u:%02u:%02u%c", &h, &m, &s, &divc) == 4 &&
       (divc == '=' || divc == ':')) {
     GST_LOG ("single line format %u %u %u %u %c", h, m, s, l, divc);
index 6ef10eb..51c36e4 100644 (file)
@@ -812,7 +812,7 @@ gst_multi_fd_sink_add_full (GstMultiFdSink * sink, int fd,
   GstTCPClient *client;
   GList *clink;
   GTimeVal now;
-  gint flags, res;
+  gint flags;
   struct stat statbuf;
 
   GST_DEBUG_OBJECT (sink, "[fd %5d] adding client, sync_method %d, "
@@ -867,7 +867,11 @@ gst_multi_fd_sink_add_full (GstMultiFdSink * sink, int fd,
   sink->clients_cookie++;
 
   /* set the socket to non blocking */
-  res = fcntl (fd, F_SETFL, O_NONBLOCK);
+  if (fcntl (fd, F_SETFL, O_NONBLOCK) < 0) {
+    GST_ERROR_OBJECT (sink, "failed to make socket %d non-blocking: %s", fd,
+        g_strerror (errno));
+  }
+
   /* we always read from a client */
   gst_poll_add_fd (sink->fdset, &client->fd);
 
@@ -879,8 +883,7 @@ gst_multi_fd_sink_add_full (GstMultiFdSink * sink, int fd,
     }
   }
   /* figure out the mode, can't use send() for non sockets */
-  res = fstat (fd, &statbuf);
-  if (S_ISSOCK (statbuf.st_mode)) {
+  if (fstat (fd, &statbuf) == 0 && S_ISSOCK (statbuf.st_mode)) {
     client->is_socket = TRUE;
     setup_dscp_client (sink, client);
   }
@@ -1775,7 +1778,6 @@ gst_multi_fd_sink_new_client (GstMultiFdSink * sink, GstTCPClient * client)
     }
     case GST_SYNC_METHOD_BURST_KEYFRAME:
     {
-      gboolean ok;
       gint min_idx, max_idx;
       gint next_syncframe, prev_syncframe;
 
@@ -1787,7 +1789,7 @@ gst_multi_fd_sink_new_client (GstMultiFdSink * sink, GstTCPClient * client)
        * NEXT_KEYFRAME.
        */
       /* gather burst limits */
-      ok = count_burst_unit (sink, &min_idx, client->burst_min_unit,
+      count_burst_unit (sink, &min_idx, client->burst_min_unit,
           client->burst_min_value, &max_idx, client->burst_max_unit,
           client->burst_max_value);
 
@@ -1824,7 +1826,6 @@ gst_multi_fd_sink_new_client (GstMultiFdSink * sink, GstTCPClient * client)
     }
     case GST_SYNC_METHOD_BURST_WITH_KEYFRAME:
     {
-      gboolean ok;
       gint min_idx, max_idx;
       gint next_syncframe;
 
@@ -1835,7 +1836,7 @@ gst_multi_fd_sink_new_client (GstMultiFdSink * sink, GstTCPClient * client)
        * amount of data up 'till min.
        */
       /* gather enough data to burst */
-      ok = count_burst_unit (sink, &min_idx, client->burst_min_unit,
+      count_burst_unit (sink, &min_idx, client->burst_min_unit,
           client->burst_min_value, &max_idx, client->burst_max_unit,
           client->burst_max_value);
 
index 21ec413..1000a52 100644 (file)
@@ -1018,7 +1018,7 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
       while (found < GST_MP3_TYPEFIND_TRY_HEADERS) {
         guint32 head;
         guint length;
-        guint prev_layer = 0, prev_bitrate = 0;
+        guint prev_layer = 0;
         guint prev_channels = 0, prev_samplerate = 0;
         gboolean free = FALSE;
 
@@ -1065,7 +1065,6 @@ mp3_type_find_at_offset (GstTypeFind * tf, guint64 start_off,
            * be a freaking funky encoded mp3 though. We'll just not count
            * this header*/
           prev_layer = layer;
-          prev_bitrate = bitrate;
           prev_channels = channels;
           prev_samplerate = samplerate;
         } else {
index 4ec96ad..7d1d9c0 100644 (file)
@@ -340,6 +340,12 @@ gst_video_rate_setcaps (GstPad * pad, GstCaps * caps)
 
       GST_DEBUG_OBJECT (videorate, "intersect %" GST_PTR_FORMAT, caps);
 
+      /* could turn up empty, due to e.g. colorspace etc */
+      if (gst_caps_get_size (caps) == 0) {
+        gst_caps_unref (caps);
+        goto no_transform;
+      }
+
       /* take first possibility */
       gst_caps_truncate (caps);
       structure = gst_caps_get_structure (caps, 0);
index bff8ac7..6919144 100644 (file)
@@ -85,7 +85,6 @@ vs_image_scale_linear_RGBA (const VSImage * dest, const VSImage * src,
   int y_increment;
   int x_increment;
   int y1;
-  int y2;
   int i;
   int j;
   int x;
@@ -106,7 +105,6 @@ vs_image_scale_linear_RGBA (const VSImage * dest, const VSImage * src,
 #define LINE(x) ((tmpbuf) + (dest_size)*((x)&1))
 
   acc = 0;
-  y2 = -1;
   gst_videoscale_orc_resample_bilinear_u32 (LINE (0), src->pixels,
       0, x_increment, dest->width);
   y1 = 0;
@@ -574,7 +572,6 @@ vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
   int j;
   int x;
   int dest_size;
-  int xacc;
 
   if (dest->height == 1)
     y_increment = 0;
@@ -592,7 +589,6 @@ vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
   tmp2 = tmpbuf + dest_size;
 
   acc = 0;
-  xacc = 0;
   y2 = -1;
   gst_videoscale_orc_resample_bilinear_u8 (tmp1, src->pixels,
       0, x_increment, dest->width);
@@ -607,7 +603,6 @@ vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
       } else if (j == y2) {
         memcpy (dest->pixels + i * dest->stride, tmp2, dest_size);
       } else {
-        xacc = 0;
         gst_videoscale_orc_resample_bilinear_u8 (tmp1,
             src->pixels + j * src->stride, 0, x_increment, dest->width);
         y1 = j;
@@ -616,7 +611,6 @@ vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
     } else {
       if (j == y1) {
         if (j + 1 != y2) {
-          xacc = 0;
           gst_videoscale_orc_resample_bilinear_u8 (tmp2,
               src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
           y2 = j + 1;
@@ -629,7 +623,6 @@ vs_image_scale_linear_Y (const VSImage * dest, const VSImage * src,
         }
       } else if (j == y2) {
         if (j + 1 != y1) {
-          xacc = 0;
           gst_videoscale_orc_resample_bilinear_u8 (tmp1,
               src->pixels + (j + 1) * src->stride, 0, x_increment, dest->width);
           y1 = j + 1;
@@ -1098,7 +1091,6 @@ vs_image_scale_linear_AYUV64 (const VSImage * dest, const VSImage * src,
   int y_increment;
   int x_increment;
   int y1;
-  int y2;
   int i;
   int j;
   int x;
@@ -1121,7 +1113,6 @@ vs_image_scale_linear_AYUV64 (const VSImage * dest, const VSImage * src,
 #define LINE(x) ((guint16 *)((tmpbuf) + (dest_size)*((x)&1)))
 
   acc = 0;
-  y2 = -1;
   //gst_videoscale_orc_resample_bilinear_u64 (LINE (0), src->pixels,
   //    0, x_increment, dest->width);
   xacc = 0;
index 9a9a962..e0b159d 100644 (file)
@@ -171,13 +171,7 @@ VALGRIND_TO_FIX = \
 noinst_PROGRAMS = $(check_libvisual)
 
 noinst_HEADERS = \
-       libs/struct_i386.h
-#      libs/struct_arm.h \
-#      libs/struct_hppa.h \
-#      libs/struct_ppc32.h \
-#      libs/struct_ppc64.h \
-#      libs/struct_sparc.h \
-#      libs/struct_x86_64.h
+       libs/struct_*.h
 
 AM_CFLAGS = -I$(top_srcdir)/gst-libs -I$(top_builddir)/gst-libs \
        $(GST_CFLAGS) $(GST_CHECK_CFLAGS) \
index 0d0d009..77606cd 100644 (file)
@@ -359,15 +359,15 @@ GST_START_TEST (test_encodebin_sink_pads_multiple_dynamic)
   fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_PAUSED),
       GST_STATE_CHANGE_SUCCESS);
 
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
   gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpadvorbis);
   gst_object_unref (sinkpadvorbis);
   gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpadtheora);
   gst_object_unref (sinkpadtheora);
 
-  /* Set back to NULL */
-  fail_unless_equals_int (gst_element_set_state (ebin, GST_STATE_NULL),
-      GST_STATE_CHANGE_SUCCESS);
-
   gst_object_unref (ebin);
 };
 
@@ -604,13 +604,13 @@ GST_START_TEST (test_encodebin_render_audio_dynamic)
     }
   }
 
-  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad);
-  gst_object_unref (sinkpad);
-
   /* Set back to NULL */
   fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
       GST_STATE_CHANGE_SUCCESS);
 
+  gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad);
+  gst_object_unref (sinkpad);
+
   gst_object_unref (bus);
 
   gst_object_unref (pipeline);
@@ -745,15 +745,15 @@ GST_START_TEST (test_encodebin_render_audio_video_dynamic)
     }
   }
 
+  /* Set back to NULL */
+  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
+      GST_STATE_CHANGE_SUCCESS);
+
   gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad1);
   gst_object_unref (sinkpad1);
   gst_element_release_request_pad (GST_ELEMENT (ebin), sinkpad2);
   gst_object_unref (sinkpad2);
 
-  /* Set back to NULL */
-  fail_unless_equals_int (gst_element_set_state (pipeline, GST_STATE_NULL),
-      GST_STATE_CHANGE_SUCCESS);
-
   gst_object_unref (bus);
 
   gst_object_unref (pipeline);
@@ -867,6 +867,8 @@ GST_START_TEST (test_encodebin_reuse)
   _test_encodebin_reuse (prof2, prof3);
 
   gst_encoding_profile_unref (prof1);
+  gst_encoding_profile_unref (prof2);
+  gst_encoding_profile_unref (prof3);
 };
 
 GST_END_TEST;
index 414ca3d..198ba99 100644 (file)
@@ -178,7 +178,7 @@ GST_END_TEST;
         "%f does not match expected %f", ___d, d);                         \
   }
 
-GST_START_TEST (test_muscibrainz_tag_registration)
+GST_START_TEST (test_musicbrainz_tag_registration)
 {
   GstTagList *list;
 
@@ -957,6 +957,8 @@ GST_START_TEST (test_xmp_tags_serialization_deserialization)
   GDate *date;
   GstDateTime *datetime;
 
+  gst_tag_register_musicbrainz_tags ();
+
   g_value_init (&value, G_TYPE_STRING);
   g_value_set_static_string (&value, "my string");
   do_simple_xmp_tag_serialization_deserialization (GST_TAG_ARTIST, &value);
@@ -1067,6 +1069,16 @@ GST_START_TEST (test_xmp_tags_serialization_deserialization)
   g_value_set_double (&value, 359.99);
   do_simple_xmp_tag_serialization_deserialization
       (GST_TAG_GEO_LOCATION_CAPTURE_DIRECTION, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, 1.0);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, -2.5);
+  do_simple_xmp_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
   g_value_unset (&value);
 
   g_value_init (&value, GST_TYPE_DATE);
@@ -1538,6 +1550,16 @@ GST_START_TEST (test_exif_tags_serialization_deserialization)
   g_value_set_double (&value, 600.0);
   do_simple_exif_tag_serialization_deserialization
       (GST_TAG_IMAGE_VERTICAL_PPI, &value);
+
+  g_value_set_double (&value, 0.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, 1.0);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
+  g_value_set_double (&value, -2.5);
+  do_simple_exif_tag_serialization_deserialization
+      (GST_TAG_CAPTURING_EXPOSURE_COMPENSATION, &value);
   g_value_unset (&value);
 
   g_value_init (&value, G_TYPE_INT);
@@ -1615,7 +1637,7 @@ tag_suite (void)
   TCase *tc_chain = tcase_create ("general");
 
   suite_add_tcase (s, tc_chain);
-  tcase_add_test (tc_chain, test_muscibrainz_tag_registration);
+  tcase_add_test (tc_chain, test_musicbrainz_tag_registration);
   tcase_add_test (tc_chain, test_parse_extended_comment);
   tcase_add_test (tc_chain, test_vorbis_tags);
   tcase_add_test (tc_chain, test_id3_tags);
index 4908e43..aed5821 100644 (file)
@@ -27,7 +27,7 @@ static gboolean
 remove_range_foreach (GQuark field_id, const GValue * value, GstStructure * st)
 {
   GType ftype = G_VALUE_TYPE (value);
-  const gchar *fname;
+  /* const gchar *fname; */
 
   if (ftype == GST_TYPE_INT_RANGE || ftype == GST_TYPE_DOUBLE_RANGE ||
       ftype == GST_TYPE_FRACTION_RANGE) {
@@ -35,8 +35,7 @@ remove_range_foreach (GQuark field_id, const GValue * value, GstStructure * st)
     return FALSE;
   }
 
-  fname = g_quark_to_string (field_id);
-
+  /* fname = g_quark_to_string (field_id); */
   /* if (strstr (fname, "framerate") || strstr (fname, "pixel-aspect-ratio") || */
   /*     strstr (fname, "rate")) { */
   /*   gst_structure_remove_field (st, g_quark_to_string (field_id)); */
index 8ca4a3c..0a8e202 100644 (file)
@@ -119,6 +119,7 @@ main (int argc, char *argv[])
 
   gtk_main ();
 
+  g_source_remove (watch_id);
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (pipeline);
 
index b1c1a62..352f65a 100644 (file)
@@ -156,6 +156,7 @@ main (int argc, char *argv[])
 
   g_main_loop_run (loop);
 
+  g_source_remove (watch_id);
   gst_element_set_state (pipeline, GST_STATE_NULL);
   gst_object_unref (pipeline);
 
index 7a22682..b7283e8 100644 (file)
@@ -2119,6 +2119,10 @@ step_cb (GtkButton * button, gpointer data)
   event = gst_event_new_step (format, amount, rate, flush, FALSE);
 
   res = send_event (event);
+
+  if (!res) {
+    g_print ("Sending step event failed\n");
+  }
 }
 
 static void
@@ -2658,6 +2662,8 @@ read_joystick (GIOChannel * source, GIOCondition condition, gpointer user_data)
     g_print ("error reading joystick, read %u bytes of %u\n",
         (guint) bytes_read, (guint) sizeof (struct js_event));
     return TRUE;
+  } else if (result != G_IO_STATUS_NORMAL) {
+    g_print ("reading from joystick returned status %d", result);
   }
 
   switch (js->type & ~JS_EVENT_INIT) {
index 4dde974..b20574e 100644 (file)
@@ -2106,6 +2106,10 @@ step_cb (GtkButton * button, gpointer data)
   event = gst_event_new_step (format, amount, rate, flush, FALSE);
 
   res = send_event (event);
+
+  if (!res) {
+    g_print ("Sending step event failed\n");
+  }
 }
 
 static void