X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Flibzmpeg3%2Ftoc.C;h=ef5a60a37a661b18c5f284a60e685c5b8a1a86bf;hb=c279e21fc2394a7908bbd1ba8c79b116fe9fb14a;hp=b542da0c400455dde42a1007d80d7478f03d4297;hpb=235c9cc4df8306babbbfda46189108fe262d44ef;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/libzmpeg3/toc.C b/cinelerra-5.1/libzmpeg3/toc.C index b542da0c..ef5a60a3 100644 --- a/cinelerra-5.1/libzmpeg3/toc.C +++ b/cinelerra-5.1/libzmpeg3/toc.C @@ -1054,27 +1054,27 @@ do_toc(int64_t *bytes_processed) if( !result ) { int idx = 0; /* Find current PID in tracks. */ - int custom_id = demuxer->custom_id; /* Got subtitle */ if( demuxer->got_subtitle ) handle_subtitle(); if( is_transport_stream() ) - dvb.atsc_tables(demuxer, custom_id); + dvb.atsc_tables(demuxer, demuxer->custom_id); /* In a transport stream the audio or video is determined by the PID. */ /* In other streams the data type is determined by stream ID. */ - if( demuxer->got_audio || is_transport_stream() || is_audio_stream() ) { + if( demuxer->got_audio >= 0 || is_transport_stream() || is_audio_stream() ) { + int audio_pid = is_transport_stream() ? demuxer->custom_id : demuxer->got_audio; atrack_t *atrk = 0; for( idx=0; idx < total_atracks; ++idx ) { - if( atrack[idx]->pid == custom_id ) { /* Update an audio track */ + if( atrack[idx]->pid == audio_pid ) { /* Update an audio track */ atrk = atrack[idx]; break; } } if( !atrk ) { if( is_audio_stream() || - (demuxer->got_audio && demuxer->astream_table[custom_id]) ) { - int format = demuxer->astream_table[custom_id]; - atrk = new_atrack_t(custom_id, format, demuxer, total_atracks); + (audio_pid >= 0 && demuxer->astream_table[audio_pid]) ) { + int format = demuxer->astream_table[audio_pid]; + atrk = new_atrack_t(audio_pid, format, demuxer, total_atracks); if( atrk ) { atrack[idx=total_atracks++] = atrk; atrk->prev_offset = start_byte; @@ -1086,18 +1086,19 @@ do_toc(int64_t *bytes_processed) atrk->handle_audio(idx); } } - if( demuxer->got_video || is_transport_stream() || is_video_stream() ) { + if( demuxer->got_video >= 0 || is_transport_stream() || is_video_stream() ) { + int video_pid = is_transport_stream() ? demuxer->custom_id : demuxer->got_video; vtrack_t *vtrk = 0; for( idx=0; idx < total_vtracks; ++idx ) { - if( vtrack[idx]->pid == custom_id ) { /* Update a video track */ + if( vtrack[idx]->pid == video_pid ) { /* Update a video track */ vtrk = vtrack[idx]; break; } } if( !vtrk ) { if( is_video_stream() || - (demuxer->got_video && demuxer->vstream_table[custom_id]) ) { - vtrk = new_vtrack_t(custom_id, demuxer, total_vtracks); + (video_pid >= 0 && demuxer->vstream_table[video_pid]) ) { + vtrk = new_vtrack_t(video_pid, demuxer, total_vtracks); /* Make the first offset correspond to the */ /* start of the first packet. */ if( vtrk ) {