diff options
Diffstat (limited to 'demux/demux_tv.c')
-rw-r--r-- | demux/demux_tv.c | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/demux/demux_tv.c b/demux/demux_tv.c index ab584874cb..4f1e3ac1c2 100644 --- a/demux/demux_tv.c +++ b/demux/demux_tv.c @@ -20,8 +20,6 @@ static int demux_open_tv(demuxer_t *demuxer, enum demux_check check) { tvi_handle_t *tvh; - sh_video_t *sh_video; - sh_audio_t *sh_audio = NULL; const tvi_functions_t *funcs; if (check > DEMUX_CHECK_REQUEST || demuxer->stream->type != STREAMTYPE_TV) @@ -50,31 +48,30 @@ static int demux_open_tv(demuxer_t *demuxer, enum demux_check check) funcs = tvh->functions; demuxer->priv=tvh; - struct sh_stream *sh_v = new_sh_stream(demuxer, STREAM_VIDEO); - sh_video = sh_v->video; + struct sh_stream *sh_v = demux_alloc_sh_stream(STREAM_VIDEO); /* get IMAGE FORMAT */ int fourcc; funcs->control(tvh->priv, TVI_CONTROL_VID_GET_FORMAT, &fourcc); if (fourcc == MP_FOURCC_MJPEG) { - sh_v->codec = "mjpeg"; + sh_v->codec->codec = "mjpeg"; } else { - sh_v->codec = "rawvideo"; - sh_v->codec_tag = fourcc; + sh_v->codec->codec = "rawvideo"; + sh_v->codec->codec_tag = fourcc; } /* set FPS and FRAMETIME */ - if(!sh_video->fps) + if(!sh_v->codec->fps) { float tmp; if (funcs->control(tvh->priv, TVI_CONTROL_VID_GET_FPS, &tmp) != TVI_CONTROL_TRUE) - sh_video->fps = 25.0f; /* on PAL */ - else sh_video->fps = tmp; + sh_v->codec->fps = 25.0f; /* on PAL */ + else sh_v->codec->fps = tmp; } if (tvh->tv_param->fps != -1.0f) - sh_video->fps = tvh->tv_param->fps; + sh_v->codec->fps = tvh->tv_param->fps; /* If playback only mode, go to immediate mode, fail silently */ if(tvh->tv_param->immediate == 1) @@ -84,10 +81,12 @@ static int demux_open_tv(demuxer_t *demuxer, enum demux_check check) } /* set width */ - funcs->control(tvh->priv, TVI_CONTROL_VID_GET_WIDTH, &sh_video->disp_w); + funcs->control(tvh->priv, TVI_CONTROL_VID_GET_WIDTH, &sh_v->codec->disp_w); /* set height */ - funcs->control(tvh->priv, TVI_CONTROL_VID_GET_HEIGHT, &sh_video->disp_h); + funcs->control(tvh->priv, TVI_CONTROL_VID_GET_HEIGHT, &sh_v->codec->disp_h); + + demux_add_sh_stream(demuxer, sh_v); demuxer->seekable = 0; @@ -115,21 +114,22 @@ static int demux_open_tv(demuxer_t *demuxer, enum demux_check check) goto no_audio; } - struct sh_stream *sh_a = new_sh_stream(demuxer, STREAM_AUDIO); - sh_audio = sh_a->audio; + struct sh_stream *sh_a = demux_alloc_sh_stream(STREAM_AUDIO); funcs->control(tvh->priv, TVI_CONTROL_AUD_GET_SAMPLERATE, - &sh_audio->samplerate); - int nchannels = sh_audio->channels.num; + &sh_a->codec->samplerate); + int nchannels = sh_a->codec->channels.num; funcs->control(tvh->priv, TVI_CONTROL_AUD_GET_CHANNELS, &nchannels); - mp_chmap_from_channels(&sh_audio->channels, nchannels); + mp_chmap_from_channels(&sh_a->codec->channels, nchannels); // s16ne - mp_set_pcm_codec(sh_a, true, false, 16, BYTE_ORDER == BIG_ENDIAN); + mp_set_pcm_codec(sh_a->codec, true, false, 16, BYTE_ORDER == BIG_ENDIAN); + + demux_add_sh_stream(demuxer, sh_a); MP_VERBOSE(tvh, " TV audio: %d channels, %d bits, %d Hz\n", - nchannels, 16, sh_audio->samplerate); + nchannels, 16, sh_a->codec->samplerate); } no_audio: @@ -168,8 +168,9 @@ static int demux_tv_fill_buffer(demuxer_t *demux) unsigned int len=0; struct sh_stream *want_audio = NULL, *want_video = NULL; - for (int n = 0; n < demux->num_streams; n++) { - struct sh_stream *sh = demux->streams[n]; + int num_streams = demux_get_num_stream(demux); + for (int n = 0; n < num_streams; n++) { + struct sh_stream *sh = demux_get_stream(demux, n); if (!demux_has_packet(sh) && demux_stream_is_selected(sh)) { if (sh->type == STREAM_AUDIO) want_audio = sh; |