Mercurial > mplayer.hg
comparison mplayer.c @ 1338:345585097137
mpeg PES steram support (only 1E0 & 1C0 packets, no 1BA/1BB headers)
author | arpi |
---|---|
date | Mon, 16 Jul 2001 20:21:26 +0000 |
parents | 061cabfbc07b |
children | c3e3b0ae4d06 |
comparison
equal
deleted
inserted
replaced
1337:421999eb6b9c | 1338:345585097137 |
---|---|
185 // MPEG video stream parser: | 185 // MPEG video stream parser: |
186 #include "parse_es.c" | 186 #include "parse_es.c" |
187 | 187 |
188 extern int num_elementary_packets100; // for MPEG-ES fileformat detection | 188 extern int num_elementary_packets100; // for MPEG-ES fileformat detection |
189 extern int num_elementary_packets101; | 189 extern int num_elementary_packets101; |
190 extern int num_elementary_packetsPES; | |
190 | 191 |
191 extern picture_t *picture; // exported from libmpeg2/decode.c | 192 extern picture_t *picture; // exported from libmpeg2/decode.c |
192 | 193 |
193 static const int frameratecode2framerate[16] = { | 194 static const int frameratecode2framerate[16] = { |
194 0, | 195 0, |
705 file_format=DEMUXER_TYPE_ASF; | 706 file_format=DEMUXER_TYPE_ASF; |
706 } | 707 } |
707 } | 708 } |
708 //=============== Try to open as MPEG-PS file: ================= | 709 //=============== Try to open as MPEG-PS file: ================= |
709 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){ | 710 if(file_format==DEMUXER_TYPE_UNKNOWN || file_format==DEMUXER_TYPE_MPEG_PS){ |
711 int pes=1; | |
712 while(pes>=0){ | |
710 stream_reset(stream); | 713 stream_reset(stream); |
711 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_PS,audio_id,video_id,dvdsub_id); | 714 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_PS,audio_id,video_id,dvdsub_id); |
712 stream_seek(demuxer->stream,seek_to_byte); | 715 stream_seek(demuxer->stream,seek_to_byte); |
716 if(!pes) demuxer->synced=1; // hack! | |
713 if(ds_fill_buffer(demuxer->video)){ | 717 if(ds_fill_buffer(demuxer->video)){ |
714 printf("Detected MPEG-PS file format!\n"); | 718 if(!pes) |
719 printf("Detected MPEG-PES file format!\n"); | |
720 else | |
721 printf("Detected MPEG-PS file format!\n"); | |
715 file_format=DEMUXER_TYPE_MPEG_PS; | 722 file_format=DEMUXER_TYPE_MPEG_PS; |
716 } else { | 723 } else { |
717 // some hack to get meaningfull error messages to our unhappy users: | 724 // some hack to get meaningfull error messages to our unhappy users: |
718 if(num_elementary_packets100>=2 && num_elementary_packets101>=2 && | 725 if(num_elementary_packets100>=2 && num_elementary_packets101>=2 && |
719 abs(num_elementary_packets101-num_elementary_packets100)<8){ | 726 abs(num_elementary_packets101-num_elementary_packets100)<8){ |
727 if(num_elementary_packetsPES>=4 && num_elementary_packetsPES>=num_elementary_packets100-4){ | |
728 --pes;continue; // tricky... | |
729 } | |
720 file_format=DEMUXER_TYPE_MPEG_ES; // <-- hack is here :) | 730 file_format=DEMUXER_TYPE_MPEG_ES; // <-- hack is here :) |
721 } else { | 731 } else { |
722 if(demuxer->synced==2) | 732 if(demuxer->synced==2) |
723 printf("Missing MPEG video stream!? contact the author, it may be a bug :(\n"); | 733 printf("Missing MPEG video stream!? contact the author, it may be a bug :(\n"); |
724 else | 734 else |
725 printf("Not MPEG System Stream format... (maybe Transport Stream?)\n"); | 735 printf("Not MPEG System Stream format... (maybe Transport Stream?)\n"); |
726 } | 736 } |
727 } | 737 } |
738 break; | |
739 } | |
728 } | 740 } |
729 //=============== Try to open as MPEG-ES file: ================= | 741 //=============== Try to open as MPEG-ES file: ================= |
730 if(file_format==DEMUXER_TYPE_MPEG_ES){ // little hack, see above! | 742 if(file_format==DEMUXER_TYPE_MPEG_ES){ // little hack, see above! |
731 stream_reset(stream); | 743 stream_reset(stream); |
732 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_ES,audio_id,video_id,dvdsub_id); | 744 demuxer=new_demuxer(stream,DEMUXER_TYPE_MPEG_ES,audio_id,video_id,dvdsub_id); |