annotate mpegvideodec.c @ 6455:3f50c7effad1 libavformat

rtsp: 10l, try to update the correct rtp stream This fixes a bug from rev 22917. Now RTSP streams where the individual RTCP sender reports aren't sent at the same time actually are synced properly.
author mstorsjo
date Fri, 03 Sep 2010 07:10:21 +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 };