diff options
Diffstat (limited to 'demux/demux_raw.c')
-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, }; |