summaryrefslogtreecommitdiffstats
path: root/demux_mpg.c
diff options
context:
space:
mode:
authorarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-16 20:21:26 +0000
committerarpi <arpi@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-07-16 20:21:26 +0000
commit0c1bac17b9e4eae2ba7ea4151150aa46190ed919 (patch)
tree8248c13f086cf0cc5713402f9506636211fd3a6b /demux_mpg.c
parent7acec28b2d5ea52048e17cc2b9638a35a56ae696 (diff)
downloadmpv-0c1bac17b9e4eae2ba7ea4151150aa46190ed919.tar.bz2
mpv-0c1bac17b9e4eae2ba7ea4151150aa46190ed919.tar.xz
mpeg PES steram support (only 1E0 & 1C0 packets, no 1BA/1BB headers)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@1339 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'demux_mpg.c')
-rw-r--r--demux_mpg.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/demux_mpg.c b/demux_mpg.c
index 2848808770..385a105118 100644
--- a/demux_mpg.c
+++ b/demux_mpg.c
@@ -237,6 +237,7 @@ static int demux_mpg_read_packet(demuxer_t *demux,int id){
int num_elementary_packets100=0;
int num_elementary_packets101=0;
int num_elementary_packets1B6=0;
+int num_elementary_packetsPES=0;
int demux_mpg_es_fill_buffer(demuxer_t *demux){
// Elementary video stream
@@ -278,6 +279,14 @@ do{
if(verbose>=4) printf("*** head=0x%X\n",head);
if(demux->synced==0){
if(head==0x1BA) demux->synced=1;
+#if 0
+ else if(head>=0x1C0 && head<=0x1EF){
+ demux->synced=2;
+ if(verbose) printf("Mpeg PES stream synced at 0x%X (%d)!\n",demux->filepos,demux->filepos);
+ num_elementary_packets100=0; // requires for re-sync!
+ num_elementary_packets101=0; // requires for re-sync!
+ }
+#endif
} else
if(demux->synced==1){
if(head==0x1BB || head==0x1BD || (head>=0x1C0 && head<=0x1EF)){
@@ -301,11 +310,15 @@ do{
if(head==0x101) ++num_elementary_packets101;
if(verbose>=3) printf("Opps... elementary video packet found: %03X\n",head);
} else
+ if(head>=0x1C0 && head<0x1F0){
+ ++num_elementary_packetsPES;
+ if(verbose>=3) printf("Opps... PES packet found: %03X\n",head);
+ } else
if(head==0x1B6) ++num_elementary_packets1B6;
#if 1
- if(num_elementary_packets100>50 && num_elementary_packets101>50
- && skipped>4000000){
- if(verbose) printf("sync_mpeg_ps: seems to be ES stream...\n");
+ if( ( (num_elementary_packets100>50 && num_elementary_packets101>50) ||
+ (num_elementary_packetsPES>50) ) && skipped>4000000){
+ if(verbose) printf("sync_mpeg_ps: seems to be ES/PES stream...\n");
demux->stream->eof=1;
break;
}