summaryrefslogtreecommitdiffstats
path: root/gst/qtdemux/qtdemux.c
diff options
context:
space:
mode:
authorEdward Hervey <bilboed@bilboed.com>2006-01-24 11:58:53 +0000
committerEdward Hervey <bilboed@bilboed.com>2006-01-24 11:58:53 +0000
commit883bcdafbbd4552cfc2cfa1f96c5b0b807e42037 (patch)
treed7c26093825695e60eb591f44ddba9e39dcb7395 /gst/qtdemux/qtdemux.c
parent8d1719bd4fd5d593815f84ff6e6701b8edd0a124 (diff)
downloadgst-plugins-bad-883bcdafbbd4552cfc2cfa1f96c5b0b807e42037.tar.gz
gst-plugins-bad-883bcdafbbd4552cfc2cfa1f96c5b0b807e42037.tar.bz2
gst-plugins-bad-883bcdafbbd4552cfc2cfa1f96c5b0b807e42037.zip
gst/qtdemux/qtdemux.c: More coherent framerate setting on caps.
Original commit message from CVS: * gst/qtdemux/qtdemux.c: (gst_qtdemux_loop_header), (gst_qtdemux_add_stream), (qtdemux_parse_trak): More coherent framerate setting on caps. If sample_size is available, use that for the samples' duration in the index. This enables single frame streams to work (and I imagine fixes some other cases). Tested on testsuite, no regression.
Diffstat (limited to 'gst/qtdemux/qtdemux.c')
-rw-r--r--gst/qtdemux/qtdemux.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/gst/qtdemux/qtdemux.c b/gst/qtdemux/qtdemux.c
index 4b92ea8d..dff4453a 100644
--- a/gst/qtdemux/qtdemux.c
+++ b/gst/qtdemux/qtdemux.c
@@ -644,8 +644,7 @@ gst_qtdemux_loop_header (GstPad * pad)
buf = NULL;
if (size > 0) {
- GST_LOG_OBJECT (qtdemux, "reading %d bytes @ " G_GINT64_FORMAT,
- size, offset);
+ GST_LOG_OBJECT (qtdemux, "reading %d bytes @ %lld", size, offset);
if (gst_pad_pull_range (qtdemux->sinkpad, offset,
size, &buf) != GST_FLOW_OK)
@@ -744,12 +743,15 @@ gst_qtdemux_add_stream (GstQTDemux * qtdemux,
stream->pad = gst_pad_new_from_template (templ, name);
gst_object_unref (templ);
g_free (name);
- if (stream->samples[0].duration == 0) {
+ if ((stream->n_samples == 1) && (stream->samples[0].duration == 0)) {
stream->fps_n = 0;
stream->fps_d = 1;
} else {
stream->fps_n = stream->timescale;
- stream->fps_d = stream->samples[0].duration;
+ if (stream->samples[0].duration == 0)
+ stream->fps_d = 1;
+ else
+ stream->fps_d = stream->samples[0].duration;
}
if (stream->caps) {
@@ -2336,8 +2338,10 @@ qtdemux_parse_trak (GstQTDemux * qtdemux, GNode * trak)
samples[j].size =
samples_per_chunk * stream->bytes_per_frame /
stream->samples_per_packet / stream->compression;
- else
+ else if (stream->bytes_per_frame)
samples[j].size = stream->bytes_per_frame;
+ else
+ samples[j].size = sample_size;
samples[j].duration =
samples_per_chunk * stream->timescale / (stream->rate / 2);
samples[j].timestamp = timestamp;