static int demux_tv_fill_buffer(demuxer_t *demux, demux_stream_t *ds) { tvi_handle_t *tvh=(tvi_handle_t*)(demux->priv); demux_packet_t* dp; unsigned int len=0; /* ================== ADD AUDIO PACKET =================== */ if (ds==demux->audio && tvh->tv_param->noaudio == 0 && tvh->functions->control(tvh->priv, TVI_CONTROL_IS_AUDIO, 0) == TVI_CONTROL_TRUE) { len = tvh->functions->get_audio_framesize(tvh->priv); dp=new_demux_packet(len); dp->flags|=1; /* Keyframe */ dp->pts=tvh->functions->grab_audio_frame(tvh->priv, dp->buffer,len); ds_add_packet(demux->audio,dp); } /* ================== ADD VIDEO PACKET =================== */ if (ds==demux->video && tvh->functions->control(tvh->priv, TVI_CONTROL_IS_VIDEO, 0) == TVI_CONTROL_TRUE) { len = tvh->functions->get_video_framesize(tvh->priv); dp=new_demux_packet(len); dp->flags|=1; /* Keyframe */ dp->pts=tvh->functions->grab_video_frame(tvh->priv, dp->buffer, len); ds_add_packet(demux->video,dp); } if (tvh->tv_param->scan) tv_scan(tvh); return 1; }
static int demux_tv_fill_buffer(demuxer_t *demux) { tvi_handle_t *tvh=(tvi_handle_t*)(demux->priv); demux_packet_t* dp; unsigned int len=0; struct sh_stream *want_audio = NULL, *want_video = NULL; 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; if (sh->type == STREAM_VIDEO) want_video = sh; } } /* ================== ADD AUDIO PACKET =================== */ if (want_audio && tvh->tv_param->audio && tvh->functions->control(tvh->priv, TVI_CONTROL_IS_AUDIO, 0) == TVI_CONTROL_TRUE) { len = tvh->functions->get_audio_framesize(tvh->priv); dp=new_demux_packet(len); if (dp) { dp->keyframe = true; dp->pts=tvh->functions->grab_audio_frame(tvh->priv, dp->buffer,len); demux_add_packet(want_audio, dp); } } /* ================== ADD VIDEO PACKET =================== */ if (want_video && tvh->functions->control(tvh->priv, TVI_CONTROL_IS_VIDEO, 0) == TVI_CONTROL_TRUE) { len = tvh->functions->get_video_framesize(tvh->priv); dp=new_demux_packet(len); if (dp) { dp->keyframe = true; dp->pts=tvh->functions->grab_video_frame(tvh->priv, dp->buffer, len); demux_add_packet(want_video, dp); } } if (tvh->tv_param->scan) tv_scan(tvh); return 1; }