annotate mpegvideodec.c @ 6459:cf0ea082dad2 libavformat

Vorbis metadata writing. Patch by James Darnley <james.darnley gmail com>.
author rbultje
date Fri, 03 Sep 2010 19:30:27 +0000
parents 4775a49a6045
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
885
da1d5db0ce5c COSMETICS: Remove all trailing whitespace.
diego
parents: 868
diff changeset
1 /*
6431
b36b683626e6 move mpegvideo demuxer to its own file
aurel
parents: 6430
diff changeset
2 * RAW MPEG video demuxer
b36b683626e6 move mpegvideo demuxer to its own file
aurel
parents: 6430
diff changeset
3 * Copyright (c) 2002-2003 Fabrice Bellard
b36b683626e6 move mpegvideo demuxer to its own file
aurel
parents: 6430
diff changeset
4 * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
5 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1245
diff changeset
6 * This file is part of FFmpeg.
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1245
diff changeset
7 *
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1245
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1245
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
12 *
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1245
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
16 * Lesser General Public License for more details.
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
17 *
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
1358
0899bfe4105c Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents: 1245
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
896
edbe5c3717f9 Update licensing information: The FSF changed postal address.
diego
parents: 887
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
21 */
3286
6f61c3b36632 Use full path for #includes from another directory.
diego
parents: 3274
diff changeset
22
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
23 #include "avformat.h"
6448
4775a49a6045 split raw.c into rawdec.c and rawenc.c
aurel
parents: 6431
diff changeset
24 #include "rawdec.h"
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
25
887
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
26 #define SEQ_START_CODE 0x000001b3
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
27 #define GOP_START_CODE 0x000001b8
d70e50f1495f COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 885
diff changeset
28 #define PICTURE_START_CODE 0x00000100
924
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
29 #define SLICE_START_CODE 0x00000101
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
30 #define PACK_START_CODE 0x000001ba
985
7f8b1a1ac020 can't have PES headers in MPEG video elementary streams so fail probe
mru
parents: 939
diff changeset
31 #define VIDEO_ID 0x000001e0
7f8b1a1ac020 can't have PES headers in MPEG video elementary streams so fail probe
mru
parents: 939
diff changeset
32 #define AUDIO_ID 0x000001c0
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
33
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
34 static int mpegvideo_probe(AVProbeData *p)
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
35 {
924
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
36 uint32_t code= -1;
985
7f8b1a1ac020 can't have PES headers in MPEG video elementary streams so fail probe
mru
parents: 939
diff changeset
37 int pic=0, seq=0, slice=0, pspack=0, pes=0;
924
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
38 int i;
49
3e7e13e08b27 avoid too many false detections
bellard
parents: 28
diff changeset
39
924
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
40 for(i=0; i<p->buf_size; i++){
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
41 code = (code<<8) + p->buf[i];
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
42 if ((code & 0xffffff00) == 0x100) {
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
43 switch(code){
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
44 case SEQ_START_CODE: seq++; break;
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
45 case PICTURE_START_CODE: pic++; break;
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
46 case SLICE_START_CODE: slice++; break;
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
47 case PACK_START_CODE: pspack++; break;
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
48 }
1965
f73b9a471583 fix probe of 001.vdr-broken-6025
michael
parents: 1931
diff changeset
49 if ((code & 0x1f0) == VIDEO_ID) pes++;
f73b9a471583 fix probe of 001.vdr-broken-6025
michael
parents: 1931
diff changeset
50 else if((code & 0x1e0) == AUDIO_ID) pes++;
924
6a9265af0009 improve mpeg1/2-es detection
michael
parents: 896
diff changeset
51 }
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
52 }
985
7f8b1a1ac020 can't have PES headers in MPEG video elementary streams so fail probe
mru
parents: 939
diff changeset
53 if(seq && seq*9<=pic*10 && pic*9<=slice*10 && !pspack && !pes)
5191
9affc096944c Make h261 and mpegvideo probe a little more robust so they dont fail with
michael
parents: 5184
diff changeset
54 return pic>1 ? AVPROBE_SCORE_MAX/2+1 : AVPROBE_SCORE_MAX/4; // +1 for .mpg
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
55 return 0;
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
56 }
4548
2c9ebc4029ae add raw demuxer for Chinese AVS elementary streams
stefang
parents: 4510
diff changeset
57
3546
45c3d2b2b2fb Alphabetically order AVInputFormat/AVOutputFormat declarations.
diego
parents: 3545
diff changeset
58 AVInputFormat mpegvideo_demuxer = {
45c3d2b2b2fb Alphabetically order AVInputFormat/AVOutputFormat declarations.
diego
parents: 3545
diff changeset
59 "mpegvideo",
4501
3e5b9c1a413e Make format long_names consistent.
diego
parents: 4293
diff changeset
60 NULL_IF_CONFIG_SMALL("raw MPEG video"),
0
05318cf2e886 renamed libav to libavformat
bellard
parents:
diff changeset
61 0,
3546
45c3d2b2b2fb Alphabetically order AVInputFormat/AVOutputFormat declarations.
diego
parents: 3545
diff changeset
62 mpegvideo_probe,
6430
d3a51b32b769 move ingenient demuxer to its own file
aurel
parents: 6429
diff changeset
63 ff_raw_video_read_header,
4610
41542d2edcf4 Separate the raw FLAC demuxer from raw.c and put in a new file,
jbr
parents: 4577
diff changeset
64 ff_raw_read_partial_packet,
1756
5d72afc6c8aa better generic index building and seeking code
michael
parents: 1463
diff changeset
65 .flags= AVFMT_GENERIC_INDEX,
3546
45c3d2b2b2fb Alphabetically order AVInputFormat/AVOutputFormat declarations.
diego
parents: 3545
diff changeset
66 .value = CODEC_ID_MPEG1VIDEO,
868
c6b1dde68f3a Ingenient MJPEG support, more at http://www.artificis.hu/files/texts/ingenient.txt
alex
parents: 858
diff changeset
67 };