summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Decina <alessandro.d@gmail.com>2009-12-30 21:50:32 +0100
committerAlessandro Decina <alessandro.d@gmail.com>2009-12-30 21:50:32 +0100
commit52f5f42da0c2230f55a3aebdc57851184db4437d (patch)
tree81bff7ae2483d5152c57ba8e3781b4399124c97d
parent80aa8e70ec9fc13e28802e9e2b6a3cf1f14f40e6 (diff)
h264parse: fix caps handling in _update_src_caps.
-rw-r--r--gst/h264parse/gsth264parse.c19
1 files changed, 6 insertions, 13 deletions
diff --git a/gst/h264parse/gsth264parse.c b/gst/h264parse/gsth264parse.c
index 736b6ecc0..43696dab6 100644
--- a/gst/h264parse/gsth264parse.c
+++ b/gst/h264parse/gsth264parse.c
@@ -1184,13 +1184,13 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
1184 sps = h264parse->sps; 1184 sps = h264parse->sps;
1185 } 1185 }
1186 1186
1187 src_caps = h264parse->src_caps; 1187 if (G_UNLIKELY (h264parse->src_caps == NULL))
1188 if (G_UNLIKELY (src_caps == NULL)) 1188 src_caps = gst_caps_copy (caps);
1189 src_caps = caps; 1189 else
1190 src_caps = gst_caps_ref (h264parse->src_caps);
1191 src_caps = gst_caps_make_writable (src_caps);
1190 1192
1191 g_return_val_if_fail (src_caps != NULL, FALSE); 1193 g_return_val_if_fail (src_caps != NULL, FALSE);
1192 gst_caps_ref (src_caps);
1193 caps = src_caps;
1194 1194
1195 /* if some upstream metadata missing, fill in from parsed stream */ 1195 /* if some upstream metadata missing, fill in from parsed stream */
1196 /* width / height */ 1196 /* width / height */
@@ -1202,8 +1202,6 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
1202 height = h264parse->height = sps->height; 1202 height = h264parse->height = sps->height;
1203 1203
1204 GST_DEBUG_OBJECT (h264parse, "updating caps w/h %dx%d", width, height); 1204 GST_DEBUG_OBJECT (h264parse, "updating caps w/h %dx%d", width, height);
1205 gst_caps_replace (&src_caps, gst_caps_copy (src_caps));
1206 gst_caps_unref (src_caps);
1207 gst_caps_set_simple (src_caps, "width", G_TYPE_INT, width, 1205 gst_caps_set_simple (src_caps, "width", G_TYPE_INT, width,
1208 "height", G_TYPE_INT, height, NULL); 1206 "height", G_TYPE_INT, height, NULL);
1209 } 1207 }
@@ -1219,10 +1217,7 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
1219 1217
1220 /* FIXME verify / also handle other cases */ 1218 /* FIXME verify / also handle other cases */
1221 if (sps->fixed_frame_rate_flag && sps->frame_mbs_only_flag) { 1219 if (sps->fixed_frame_rate_flag && sps->frame_mbs_only_flag) {
1222 src_caps = gst_caps_copy (caps);
1223 GST_DEBUG_OBJECT (h264parse, "updating caps fps %d/%d", fps_num, fps_den); 1220 GST_DEBUG_OBJECT (h264parse, "updating caps fps %d/%d", fps_num, fps_den);
1224 gst_caps_replace (&src_caps, gst_caps_copy (src_caps));
1225 gst_caps_unref (src_caps);
1226 gst_caps_set_simple (src_caps, 1221 gst_caps_set_simple (src_caps,
1227 "framerate", GST_TYPE_FRACTION, fps_num, fps_den, NULL); 1222 "framerate", GST_TYPE_FRACTION, fps_num, fps_den, NULL);
1228 } 1223 }
@@ -1235,7 +1230,7 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
1235 const GValue *value = NULL; 1230 const GValue *value = NULL;
1236 const GstBuffer *codec_data = NULL; 1231 const GstBuffer *codec_data = NULL;
1237 1232
1238 structure = gst_caps_get_structure (caps, 0); 1233 structure = gst_caps_get_structure (src_caps, 0);
1239 value = gst_structure_get_value (structure, "codec_data"); 1234 value = gst_structure_get_value (structure, "codec_data");
1240 if (value != NULL) 1235 if (value != NULL)
1241 codec_data = gst_value_get_buffer (value); 1236 codec_data = gst_value_get_buffer (value);
@@ -1245,8 +1240,6 @@ gst_h264_parse_update_src_caps (GstH264Parse * h264parse, GstCaps * caps)
1245 || memcmp (GST_BUFFER_DATA (buf), GST_BUFFER_DATA (codec_data), 1240 || memcmp (GST_BUFFER_DATA (buf), GST_BUFFER_DATA (codec_data),
1246 GST_BUFFER_SIZE (buf))) { 1241 GST_BUFFER_SIZE (buf))) {
1247 GST_DEBUG_OBJECT (h264parse, "setting new codec_data"); 1242 GST_DEBUG_OBJECT (h264parse, "setting new codec_data");
1248 gst_caps_replace (&src_caps, gst_caps_copy (src_caps));
1249 gst_caps_unref (src_caps);
1250 gst_caps_set_simple (src_caps, "codec_data", GST_TYPE_BUFFER, buf, 1243 gst_caps_set_simple (src_caps, "codec_data", GST_TYPE_BUFFER, buf,
1251 NULL); 1244 NULL);
1252 gst_buffer_unref (buf); 1245 gst_buffer_unref (buf);