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);