Mercurial > mplayer.hg
diff libmpdemux/video.c @ 9069:0d2b25a821c9
raw mpeg4-es support (you need to set -fps manually!)
author | arpi |
---|---|
date | Thu, 23 Jan 2003 02:12:15 +0000 |
parents | 95f0a0d006c5 |
children | 6ecc0b5c08cb |
line wrap: on
line diff
--- a/libmpdemux/video.c Thu Jan 23 01:16:49 2003 +0000 +++ b/libmpdemux/video.c Thu Jan 23 02:12:15 2003 +0000 @@ -89,6 +89,46 @@ if (!demux_is_mpeg_rtp_stream(d_video->demuxer)) break; // otherwise fall through to... #endif + case DEMUXER_TYPE_MPEG4_ES: { + videobuf_len=0; videobuf_code_len=0; + mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for Video Object Start code... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + if(i<=0x11F) break; // found it! + if(!i || !skip_video_packet(d_video)){ + mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n"); + return 0; + } + } + mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); + if(!videobuffer) videobuffer=(char*)memalign(8,VIDEOBUFFER_SIZE); + if(!videobuffer){ + mp_msg(MSGT_DECVIDEO,MSGL_ERR,MSGTR_ShMemAllocFail); + return 0; + } + mp_msg(MSGT_DECVIDEO,MSGL_V,"Searching for Video Object Layer Start code... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + printf("0x%X\n",i); + if(i>=0x120 && i<=0x12F) break; // found it! + if(!i || !read_video_packet(d_video)){ + mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n"); + return 0; + } + } + mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\nSearching for Video Object Plane Start code... ");fflush(stdout); + while(1){ + int i=sync_video_packet(d_video); + if(i==0x1B6) break; // found it! + if(!i || !read_video_packet(d_video)){ + mp_msg(MSGT_DECVIDEO,MSGL_V,"NONE :(\n"); + return 0; + } + } + mp_msg(MSGT_DECVIDEO,MSGL_V,"OK!\n"); + sh_video->format=0x10000004; + break; + } case DEMUXER_TYPE_PVA: case DEMUXER_TYPE_MPEG_ES: case DEMUXER_TYPE_MPEG_PS: { @@ -316,6 +356,16 @@ telecine=1; } + } else if(demuxer->file_format==DEMUXER_TYPE_MPEG4_ES){ + // + while(videobuf_len<VIDEOBUFFER_SIZE-MAX_VIDEO_PACKET_SIZE){ + int i=sync_video_packet(d_video); + if(!read_video_packet(d_video)) return -1; // EOF + if(i==0x1B6) break; + } + *start=videobuffer; in_size=videobuf_len; + videobuf_len=0; + } else { // frame-based file formats: (AVI,ASF,MOV) in_size=ds_get_packet(d_video,start);