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