summaryrefslogtreecommitdiffstats
path: root/demux/demux_raw.c
diff options
context:
space:
mode:
Diffstat (limited to 'demux/demux_raw.c')
-rw-r--r--demux/demux_raw.c48
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;
}