mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 16:21:17 +00:00
gst/asfdemux/gstasfdemux.c: Instead of adding a fixes 25/1 framerate to the video caps, use the average frame duratio...
Original commit message from CVS: * gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream), (gst_asf_demux_process_ext_stream_props): Instead of adding a fixes 25/1 framerate to the video caps, use the average frame duration in the extended properties of the video stream as the framerate. Fixes #524346.
This commit is contained in:
parent
666d19fe1a
commit
5f2bca58b0
3 changed files with 35 additions and 5 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2008-04-01 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
|
* gst/asfdemux/gstasfdemux.c: (gst_asf_demux_add_video_stream),
|
||||||
|
(gst_asf_demux_process_ext_stream_props):
|
||||||
|
Instead of adding a fixes 25/1 framerate to the video caps, use the
|
||||||
|
average frame duration in the extended properties of the video stream as
|
||||||
|
the framerate. Fixes #524346.
|
||||||
|
|
||||||
2008-03-21 Sebastian Dröge <slomo@circular-chaos.org>
|
2008-03-21 Sebastian Dröge <slomo@circular-chaos.org>
|
||||||
|
|
||||||
* configure.ac:
|
* configure.ac:
|
||||||
|
|
2
common
2
common
|
@ -1 +1 @@
|
||||||
Subproject commit 9a358e5cc3977fd6121f12dd25a358081fd77041
|
Subproject commit 5421815aeed8b2d73a4d4d4a4b8eb2c93f1b7d02
|
|
@ -1748,6 +1748,9 @@ gst_asf_demux_add_video_stream (GstASFDemux * demux,
|
||||||
gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
|
gst_caps_set_simple (caps, "pixel-aspect-ratio", GST_TYPE_FRACTION,
|
||||||
ax, ay, NULL);
|
ax, ay, NULL);
|
||||||
}
|
}
|
||||||
|
/* remove the framerate we will guess and add it later */
|
||||||
|
s = gst_caps_get_structure (caps, 0);
|
||||||
|
gst_structure_remove_field (s, "framerate");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* add fourcc format to caps, some proprietary decoders seem to need it */
|
/* add fourcc format to caps, some proprietary decoders seem to need it */
|
||||||
|
@ -1766,8 +1769,6 @@ gst_asf_demux_add_video_stream (GstASFDemux * demux,
|
||||||
GST_INFO ("Adding video stream %u codec %" GST_FOURCC_FORMAT " (0x%08x)",
|
GST_INFO ("Adding video stream %u codec %" GST_FOURCC_FORMAT " (0x%08x)",
|
||||||
demux->num_video_streams, GST_FOURCC_ARGS (video->tag), video->tag);
|
demux->num_video_streams, GST_FOURCC_ARGS (video->tag), video->tag);
|
||||||
|
|
||||||
gst_caps_set_simple (caps, "framerate", GST_TYPE_FRACTION, 25, 1, NULL);
|
|
||||||
|
|
||||||
++demux->num_video_streams;
|
++demux->num_video_streams;
|
||||||
|
|
||||||
gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE, tags);
|
gst_asf_demux_setup_pad (demux, src_pad, caps, id, TRUE, tags);
|
||||||
|
@ -2715,7 +2716,7 @@ gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
|
||||||
esp.flags = gst_asf_demux_get_uint32 (&data, &size);
|
esp.flags = gst_asf_demux_get_uint32 (&data, &size);
|
||||||
stream_num = gst_asf_demux_get_uint16 (&data, &size);
|
stream_num = gst_asf_demux_get_uint16 (&data, &size);
|
||||||
esp.lang_idx = gst_asf_demux_get_uint16 (&data, &size);
|
esp.lang_idx = gst_asf_demux_get_uint16 (&data, &size);
|
||||||
esp.avg_time_per_frame = gst_asf_demux_get_uint64 (&data, &size) * 100;
|
esp.avg_time_per_frame = gst_asf_demux_get_uint64 (&data, &size);
|
||||||
stream_name_count = gst_asf_demux_get_uint16 (&data, &size);
|
stream_name_count = gst_asf_demux_get_uint16 (&data, &size);
|
||||||
num_payload_ext = gst_asf_demux_get_uint16 (&data, &size);
|
num_payload_ext = gst_asf_demux_get_uint16 (&data, &size);
|
||||||
|
|
||||||
|
@ -2725,7 +2726,7 @@ gst_asf_demux_process_ext_stream_props (GstASFDemux * demux, guint8 * data,
|
||||||
GST_TIME_ARGS (esp.end_time));
|
GST_TIME_ARGS (esp.end_time));
|
||||||
GST_INFO ("flags = %08x", esp.flags);
|
GST_INFO ("flags = %08x", esp.flags);
|
||||||
GST_INFO ("average time per frame = %" GST_TIME_FORMAT,
|
GST_INFO ("average time per frame = %" GST_TIME_FORMAT,
|
||||||
GST_TIME_ARGS (esp.avg_time_per_frame));
|
GST_TIME_ARGS (esp.avg_time_per_frame * 100));
|
||||||
GST_INFO ("stream number = %u", stream_num);
|
GST_INFO ("stream number = %u", stream_num);
|
||||||
GST_INFO ("stream language ID idx = %u (%s)", esp.lang_idx,
|
GST_INFO ("stream language ID idx = %u (%s)", esp.lang_idx,
|
||||||
(esp.lang_idx < demux->num_languages) ?
|
(esp.lang_idx < demux->num_languages) ?
|
||||||
|
@ -2812,6 +2813,27 @@ done:
|
||||||
if (stream) {
|
if (stream) {
|
||||||
stream->ext_props = esp;
|
stream->ext_props = esp;
|
||||||
|
|
||||||
|
/* try to set the framerate */
|
||||||
|
if (stream->is_video && stream->caps) {
|
||||||
|
GValue framerate = { 0 };
|
||||||
|
GstStructure *s;
|
||||||
|
gint num, denom;
|
||||||
|
|
||||||
|
g_value_init (&framerate, GST_TYPE_FRACTION);
|
||||||
|
|
||||||
|
num = GST_SECOND / 100;
|
||||||
|
denom = esp.avg_time_per_frame;
|
||||||
|
|
||||||
|
gst_value_set_fraction (&framerate, num, denom);
|
||||||
|
|
||||||
|
stream->caps = gst_caps_make_writable (stream->caps);
|
||||||
|
s = gst_caps_get_structure (stream->caps, 0);
|
||||||
|
gst_structure_set_value (s, "framerate", &framerate);
|
||||||
|
g_value_unset (&framerate);
|
||||||
|
GST_DEBUG_OBJECT (demux, "setting framerate of %d/%d = %f",
|
||||||
|
num, denom, ((gdouble) num) / denom);
|
||||||
|
}
|
||||||
|
|
||||||
/* add language info now if we have it */
|
/* add language info now if we have it */
|
||||||
if (stream->ext_props.lang_idx < demux->num_languages) {
|
if (stream->ext_props.lang_idx < demux->num_languages) {
|
||||||
if (stream->pending_tags == NULL)
|
if (stream->pending_tags == NULL)
|
||||||
|
|
Loading…
Reference in a new issue