diff options
author | Alessandro Decina <alessandro.d@gmail.com> | 2009-12-30 21:50:32 +0100 |
---|---|---|
committer | Alessandro Decina <alessandro.d@gmail.com> | 2009-12-30 21:50:32 +0100 |
commit | 52f5f42da0c2230f55a3aebdc57851184db4437d (patch) | |
tree | 81bff7ae2483d5152c57ba8e3781b4399124c97d | |
parent | 80aa8e70ec9fc13e28802e9e2b6a3cf1f14f40e6 (diff) |
h264parse: fix caps handling in _update_src_caps.
-rw-r--r-- | gst/h264parse/gsth264parse.c | 19 |
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); |