Mercurial > mplayer.hg
comparison libmpdemux/video.c @ 9824:39b68c2664ec
H264-ES demuxer
author | michael |
---|---|
date | Fri, 04 Apr 2003 15:38:46 +0000 |
parents | 1d598bf65571 |
children | 0df8816f4665 |
comparison
equal
deleted
inserted
replaced
9823:da375915f47c | 9824:39b68c2664ec |
---|---|
122 return 0; | 122 return 0; |
123 } | 123 } |
124 } | 124 } |
125 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); | 125 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); |
126 sh_video->format=0x10000004; | 126 sh_video->format=0x10000004; |
127 break; | |
128 } | |
129 case DEMUXER_TYPE_H264_ES: { | |
130 videobuf_len=0; videobuf_code_len=0; | |
131 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for sequence parameter set... ");fflush(stdout); | |
132 while(1){ | |
133 int i=sync_video_packet(d_video); | |
134 if((i&~0x60) == 0x107 && i != 0x107) break; // found it! | |
135 if(!i || !skip_video_packet(d_video)){ | |
136 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n"); | |
137 return 0; | |
138 } | |
139 } | |
140 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); | |
141 if(!videobuffer) videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE); | |
142 if(!videobuffer){ | |
143 mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); | |
144 return 0; | |
145 } | |
146 mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for picture parameter set... ");fflush(stdout); | |
147 while(1){ | |
148 int i=sync_video_packet(d_video); | |
149 printf("0x%X\n",i); | |
150 if((i&~0x60) == 0x108 && i != 0x108) break; // found it! | |
151 if(!i || !read_video_packet(d_video)){ | |
152 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n"); | |
153 return 0; | |
154 } | |
155 } | |
156 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\nSearching for Slice... ");fflush(stdout); | |
157 while(1){ | |
158 int i=sync_video_packet(d_video); | |
159 if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; // found it! | |
160 if(!i || !read_video_packet(d_video)){ | |
161 mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n"); | |
162 return 0; | |
163 } | |
164 } | |
165 mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); | |
166 sh_video->format=0x10000005; | |
127 break; | 167 break; |
128 } | 168 } |
129 #ifdef STREAMING_LIVE_DOT_COM | 169 #ifdef STREAMING_LIVE_DOT_COM |
130 case DEMUXER_TYPE_RTP: | 170 case DEMUXER_TYPE_RTP: |
131 // If the RTP stream is a MPEG stream, then we use this code to check | 171 // If the RTP stream is a MPEG stream, then we use this code to check |
369 if(i==0x1B6) break; | 409 if(i==0x1B6) break; |
370 } | 410 } |
371 *start=videobuffer; in_size=videobuf_len; | 411 *start=videobuffer; in_size=videobuf_len; |
372 videobuf_len=0; | 412 videobuf_len=0; |
373 | 413 |
414 } else if(demuxer->file_format==DEMUXER_TYPE_H264_ES){ | |
415 // | |
416 while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ | |
417 int i=sync_video_packet(d_video); | |
418 if(!read_video_packet(d_video)) return -1; // EOF | |
419 if((i&~0x60) == 0x101 || (i&~0x60) == 0x102 || (i&~0x60) == 0x105) break; | |
420 } | |
421 *start=videobuffer; in_size=videobuf_len; | |
422 videobuf_len=0; | |
423 | |
374 } else { | 424 } else { |
375 // frame-based file formats: (AVI,ASF,MOV) | 425 // frame-based file formats: (AVI,ASF,MOV) |
376 in_size=ds_get_packet(d_video,start); | 426 in_size=ds_get_packet(d_video,start); |
377 if(in_size<0) return -1; // EOF | 427 if(in_size<0) return -1; // EOF |
378 // if(in_size>max_framesize) max_framesize=in_size; | 428 // if(in_size>max_framesize) max_framesize=in_size; |