diff options
author | wm4 <wm4@nowhere> | 2013-07-12 23:09:45 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-07-12 23:09:45 +0200 |
commit | 32b828e442a933ad0c06d0b8d167db0f7d1b1e75 (patch) | |
tree | c7597f27525d1a8ae9bab240b52c5ff5cab4be89 | |
parent | cfa571253a6f7ac49736e2d0042c120571ddf2a2 (diff) | |
download | mpv-32b828e442a933ad0c06d0b8d167db0f7d1b1e75.tar.bz2 mpv-32b828e442a933ad0c06d0b8d167db0f7d1b1e75.tar.xz |
demux_raw: calculate duration
-rw-r--r-- | demux/demux_raw.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/demux/demux_raw.c b/demux/demux_raw.c index 1b93d2c23e..54d237e11c 100644 --- a/demux/demux_raw.c +++ b/demux/demux_raw.c @@ -232,12 +232,34 @@ static void raw_seek(demuxer_t *demuxer,float rel_seek_secs,float audio_delay,in stream_seek(s, (pos / p->frame_size) * p->frame_size); } +static int raw_control(demuxer_t *demuxer, int cmd, void *arg) +{ + struct priv *p = demuxer->priv; + + switch (cmd) { + case DEMUXER_CTRL_GET_TIME_LENGTH: { + stream_t *s = demuxer->stream; + stream_update_size(s); + int64_t start = s->start_pos; + int64_t end = s->end_pos; + if (!end) + return DEMUXER_CTRL_DONTKNOW; + + *((double *) arg) = ((end - start) / p->frame_size) / p->frame_rate; + return DEMUXER_CTRL_OK; + } + default: + return DEMUXER_CTRL_NOTIMPL; + } +} + const demuxer_desc_t demuxer_desc_rawaudio = { .name = "rawaudio", .desc = "Uncompressed audio", .open = demux_rawaudio_open, .fill_buffer = raw_fill_buffer, .seek = raw_seek, + .control = raw_control, }; const demuxer_desc_t demuxer_desc_rawvideo = { @@ -246,4 +268,5 @@ const demuxer_desc_t demuxer_desc_rawvideo = { .open = demux_rawvideo_open, .fill_buffer = raw_fill_buffer, .seek = raw_seek, + .control = raw_control, }; |