diff options
Diffstat (limited to 'demux/demux_raw.c')
-rw-r--r-- | demux/demux_raw.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/demux/demux_raw.c b/demux/demux_raw.c index a67287792b..7fd9fdefa2 100644 --- a/demux/demux_raw.c +++ b/demux/demux_raw.c @@ -117,6 +117,7 @@ const struct m_sub_options demux_rawvideo_conf = { }; struct priv { + struct sh_stream *sh; int frame_size; int read_frames; double frame_rate; @@ -125,29 +126,30 @@ struct priv { static int demux_rawaudio_open(demuxer_t *demuxer, enum demux_check check) { struct demux_rawaudio_opts *opts = demuxer->opts->demux_rawaudio; - struct sh_stream *sh; - sh_audio_t *sh_audio; if (check != DEMUX_CHECK_REQUEST && check != DEMUX_CHECK_FORCE) return -1; - sh = new_sh_stream(demuxer, STREAM_AUDIO); - sh_audio = sh->audio; - sh_audio->channels = opts->channels; - sh_audio->force_channels = true; - sh_audio->samplerate = opts->samplerate; + struct sh_stream *sh = demux_alloc_sh_stream(STREAM_AUDIO); + struct mp_codec_params *c = sh->codec; + c->channels = opts->channels; + c->force_channels = true; + c->samplerate = opts->samplerate; int f = opts->aformat; - // See PCM(): sign float bits endian - mp_set_pcm_codec(sh, f & 1, f & 2, f >> 3, f & 4); + // See PCM(): sign float bits endian + mp_set_pcm_codec(sh->codec, f & 1, f & 2, f >> 3, f & 4); int samplesize = ((f >> 3) + 7) / 8; + demux_add_sh_stream(demuxer, sh); + struct priv *p = talloc_ptrtype(demuxer, p); demuxer->priv = p; *p = (struct priv) { - .frame_size = samplesize * sh_audio->channels.num, - .frame_rate = sh_audio->samplerate, - .read_frames = sh_audio->samplerate / 8, + .sh = sh, + .frame_size = samplesize * c->channels.num, + .frame_rate = c->samplerate, + .read_frames = c->samplerate / 8, }; return 0; @@ -156,8 +158,6 @@ static int demux_rawaudio_open(demuxer_t *demuxer, enum demux_check check) static int demux_rawvideo_open(demuxer_t *demuxer, enum demux_check check) { struct demux_rawvideo_opts *opts = demuxer->opts->demux_rawvideo; - struct sh_stream *sh; - sh_video_t *sh_video; if (check != DEMUX_CHECK_REQUEST && check != DEMUX_CHECK_FORCE) return -1; @@ -219,19 +219,21 @@ static int demux_rawvideo_open(demuxer_t *demuxer, enum demux_check check) imgsize = width * height * bpp / 8; } - sh = new_sh_stream(demuxer, STREAM_VIDEO); - sh_video = sh->video; - sh->codec = decoder; - sh->codec_tag = imgfmt; - sh_video->fps = opts->fps; - sh_video->disp_w = width; - sh_video->disp_h = height; + struct sh_stream *sh = demux_alloc_sh_stream(STREAM_VIDEO); + struct mp_codec_params *c = sh->codec; + c->codec = decoder; + c->codec_tag = imgfmt; + c->fps = opts->fps; + c->disp_w = width; + c->disp_h = height; + demux_add_sh_stream(demuxer, sh); struct priv *p = talloc_ptrtype(demuxer, p); demuxer->priv = p; *p = (struct priv) { + .sh = sh, .frame_size = imgsize, - .frame_rate = sh_video->fps, + .frame_rate = c->fps, .read_frames = 1, }; @@ -256,7 +258,7 @@ static int raw_fill_buffer(demuxer_t *demuxer) int len = stream_read(demuxer->stream, dp->buffer, dp->len); demux_packet_shorten(dp, len); - demux_add_packet(demuxer->streams[0], dp); + demux_add_packet(p->sh, dp); return 1; } |