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;