summaryrefslogtreecommitdiffstats
path: root/demux/demux_raw.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2017-06-20 13:57:58 +0200
committerwm4 <wm4@nowhere>2017-06-20 14:22:10 +0200
commit1890529857a3b963df476f53ca41faacab48a6d2 (patch)
treecad31a2b753e5aa2040dd8d8d8adc34ececebea0 /demux/demux_raw.c
parent5bfbe6dfde01704979dd086d5184ea2e697cb510 (diff)
downloadmpv-1890529857a3b963df476f53ca41faacab48a6d2.tar.bz2
mpv-1890529857a3b963df476f53ca41faacab48a6d2.tar.xz
demux: get rid of DEMUXER_CTRL_GET_TIME_LENGTH
Similar purpose as f34e1a0deea45e. Somehow this is much more natural too, and needs less code. This breaks runtime updates to duration. This could easily be fixed, but no important demuxer does this anyway. Only demux_raw and demux_disc might (the latter for BD/DVD). For the latter it might actually have some importance when changing titles at runtime (I guess?), but guess what, I don't care.
Diffstat (limited to 'demux/demux_raw.c')
-rw-r--r--demux/demux_raw.c37
1 files changed, 14 insertions, 23 deletions
diff --git a/demux/demux_raw.c b/demux/demux_raw.c
index d9e7ebb63a..f2b20c597c 100644
--- a/demux/demux_raw.c
+++ b/demux/demux_raw.c
@@ -132,6 +132,18 @@ struct priv {
double frame_rate;
};
+static int generic_open(struct demuxer *demuxer)
+{
+ struct stream *s = demuxer->stream;
+ struct priv *p = demuxer->priv;
+
+ int64_t end = 0;
+ if (stream_control(s, STREAM_CTRL_GET_SIZE, &end) == STREAM_OK)
+ demuxer->duration = (end / p->frame_size) / p->frame_rate;
+
+ return 0;
+}
+
static int demux_rawaudio_open(demuxer_t *demuxer, enum demux_check check)
{
struct demux_rawaudio_opts *opts =
@@ -170,7 +182,7 @@ static int demux_rawaudio_open(demuxer_t *demuxer, enum demux_check check)
.read_frames = c->samplerate / 8,
};
- return 0;
+ return generic_open(demuxer);
}
static int demux_rawvideo_open(demuxer_t *demuxer, enum demux_check check)
@@ -255,7 +267,7 @@ static int demux_rawvideo_open(demuxer_t *demuxer, enum demux_check check)
.read_frames = 1,
};
- return 0;
+ return generic_open(demuxer);
}
static int raw_fill_buffer(demuxer_t *demuxer)
@@ -297,32 +309,12 @@ static void raw_seek(demuxer_t *demuxer, double seek_pts, int flags)
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;
- int64_t end = 0;
- if (stream_control(s, STREAM_CTRL_GET_SIZE, &end) != STREAM_OK)
- return CONTROL_FALSE;
-
- *((double *) arg) = (end / p->frame_size) / p->frame_rate;
- return CONTROL_OK;
- }
- default:
- return CONTROL_UNKNOWN;
- }
-}
-
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 = {
@@ -331,5 +323,4 @@ const demuxer_desc_t demuxer_desc_rawvideo = {
.open = demux_rawvideo_open,
.fill_buffer = raw_fill_buffer,
.seek = raw_seek,
- .control = raw_control,
};