diff options
author | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-04-03 01:18:24 +0200 |
---|---|---|
committer | Diego 'Flameeyes' Pettenò <flameeyes@gmail.com> | 2007-04-03 01:18:24 +0200 |
commit | fb09531720a4aa2dfa97e5a9a246a453b6278fd2 (patch) | |
tree | 61525c3a8ddb419d3838a26e488fc3659079bbcd /contrib/ffmpeg/libavformat/raw.c | |
parent | 294d01046724e28b7193bcb65bf2a0391b0135b6 (diff) | |
download | xine-lib-fb09531720a4aa2dfa97e5a9a246a453b6278fd2.tar.gz xine-lib-fb09531720a4aa2dfa97e5a9a246a453b6278fd2.tar.bz2 |
Sync with a more recent version of FFmpeg.
Diffstat (limited to 'contrib/ffmpeg/libavformat/raw.c')
-rw-r--r-- | contrib/ffmpeg/libavformat/raw.c | 64 |
1 files changed, 61 insertions, 3 deletions
diff --git a/contrib/ffmpeg/libavformat/raw.c b/contrib/ffmpeg/libavformat/raw.c index e1ccbcd6d..73a20379a 100644 --- a/contrib/ffmpeg/libavformat/raw.c +++ b/contrib/ffmpeg/libavformat/raw.c @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ #include "avformat.h" +#include "ac3.h" #ifdef CONFIG_MUXERS /* simple formats */ @@ -336,9 +337,9 @@ static int mpegvideo_probe(AVProbeData *p) case PICTURE_START_CODE: pic++; break; case SLICE_START_CODE: slice++; break; case PACK_START_CODE: pspack++; break; - case VIDEO_ID: - case AUDIO_ID: pes++; break; } + if ((code & 0x1f0) == VIDEO_ID) pes++; + else if((code & 0x1e0) == AUDIO_ID) pes++; } } if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes) @@ -406,6 +407,37 @@ static int h261_probe(AVProbeData *p) return 0; } +static int ac3_probe(AVProbeData *p) +{ + int max_frames, first_frames, frames; + uint8_t *buf, *buf2, *end; + AC3HeaderInfo hdr; + + if(p->buf_size < 7) + return 0; + + max_frames = 0; + buf = p->buf; + end = buf + FFMIN(4096, p->buf_size - 7); + + for(; buf < end; buf++) { + buf2 = buf; + + for(frames = 0; buf2 < end; frames++) { + if(ff_ac3_parse_header(buf2, &hdr) < 0) + break; + buf2 += hdr.frame_size; + } + max_frames = FFMAX(max_frames, frames); + if(buf == p->buf) + first_frames = frames; + } + if (first_frames>=3) return AVPROBE_SCORE_MAX * 3 / 4; + else if(max_frames>=3) return AVPROBE_SCORE_MAX / 2; + else if(max_frames>=1) return 1; + else return 0; +} + AVInputFormat shorten_demuxer = { "shn", "raw shorten", @@ -414,6 +446,7 @@ AVInputFormat shorten_demuxer = { shorten_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "shn", }; @@ -425,6 +458,7 @@ AVInputFormat flac_demuxer = { flac_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "flac", }; @@ -448,10 +482,11 @@ AVInputFormat ac3_demuxer = { "ac3", "raw ac3", 0, - NULL, + ac3_probe, ac3_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "ac3", }; @@ -479,6 +514,7 @@ AVInputFormat dts_demuxer = { dts_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "dts", }; @@ -490,6 +526,7 @@ AVInputFormat aac_demuxer = { aac_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "aac", }; @@ -501,6 +538,7 @@ AVInputFormat h261_demuxer = { video_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "h261", .value = CODEC_ID_H261, }; @@ -529,6 +567,7 @@ AVInputFormat h263_demuxer = { video_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, // .extensions = "h263", //FIXME remove after writing mpeg4_probe .value = CODEC_ID_H263, }; @@ -557,6 +596,7 @@ AVInputFormat m4v_demuxer = { video_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "m4v", //FIXME remove after writing mpeg4_probe .value = CODEC_ID_MPEG4, }; @@ -585,6 +625,7 @@ AVInputFormat h264_demuxer = { video_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "h26l,h264,264", //FIXME remove after writing mpeg4_probe .value = CODEC_ID_H264, }; @@ -613,6 +654,7 @@ AVInputFormat mpegvideo_demuxer = { video_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .value = CODEC_ID_MPEG1VIDEO, }; @@ -656,6 +698,7 @@ AVInputFormat mjpeg_demuxer = { video_read_header, raw_read_partial_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "mjpg,mjpeg", .value = CODEC_ID_MJPEG, }; @@ -668,6 +711,7 @@ AVInputFormat ingenient_demuxer = { video_read_header, ingenient_read_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "cgi", // FIXME .value = CODEC_ID_MJPEG, }; @@ -688,6 +732,18 @@ AVOutputFormat mjpeg_muxer = { }; #endif //CONFIG_MUXERS +AVInputFormat vc1_demuxer = { + "vc1", + "raw vc1", + 0, + NULL /* vc1_probe */, + video_read_header, + raw_read_partial_packet, + raw_read_close, + .extensions = "vc1", + .value = CODEC_ID_VC1, +}; + /* pcm formats */ #define PCMINPUTDEF(name, long_name, ext, codec) \ @@ -700,6 +756,7 @@ AVInputFormat pcm_ ## name ## _demuxer = {\ raw_read_packet,\ raw_read_close,\ pcm_read_seek,\ + .flags= AVFMT_GENERIC_INDEX,\ .extensions = ext,\ .value = codec,\ }; @@ -797,6 +854,7 @@ AVInputFormat rawvideo_demuxer = { raw_read_header, rawvideo_read_packet, raw_read_close, + .flags= AVFMT_GENERIC_INDEX, .extensions = "yuv,cif,qcif", .value = CODEC_ID_RAWVIDEO, }; |