Mercurial > libavcodec.hg
annotate mpeg12.h @ 8790:1045a26cb90d libavcodec
Fix crash when encoding using libschroedinger.
Currently only pixel and half-pixel motion vector precisions are supported in
libschroedinger. Setting the mv_precision field to 2 (i.e. quarter pixel)
causes a crash in the libschroedinger encoder calls. By not setting this
parameter, we fall back to the default value used in libschroedinger.
patch by Anuradha Suraparaju, anuradha rd.bbc.co uk
author | diego |
---|---|
date | Tue, 10 Feb 2009 14:27:16 +0000 |
parents | 92f032e1f9e1 |
children | 6d75bcdeaa30 |
rev | line source |
---|---|
5218 | 1 /* |
2 * MPEG1/2 common code | |
3 * Copyright (c) 2007 Aurelien Jacobs <aurel@gnuage.org> | |
4 * | |
5 * This file is part of FFmpeg. | |
6 * | |
7 * FFmpeg is free software; you can redistribute it and/or | |
8 * modify it under the terms of the GNU Lesser General Public | |
9 * License as published by the Free Software Foundation; either | |
10 * version 2.1 of the License, or (at your option) any later version. | |
11 * | |
12 * FFmpeg is distributed in the hope that it will be useful, | |
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 * Lesser General Public License for more details. | |
16 * | |
17 * You should have received a copy of the GNU Lesser General Public | |
18 * License along with FFmpeg; if not, write to the Free Software | |
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
20 */ | |
21 | |
7760 | 22 #ifndef AVCODEC_MPEG12_H |
23 #define AVCODEC_MPEG12_H | |
5218 | 24 |
25 #include "mpegvideo.h" | |
26 | |
7623
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
27 #define DC_VLC_BITS 9 |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
28 #define TEX_VLC_BITS 9 |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
29 |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
30 static VLC dc_lum_vlc; |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
31 static VLC dc_chroma_vlc; |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
32 |
5218 | 33 extern uint8_t ff_mpeg12_static_rl_table_store[2][2][2*MAX_RUN + MAX_LEVEL + 3]; |
34 | |
35 void ff_mpeg12_common_init(MpegEncContext *s); | |
7630
d6390123201d
Rename ff_init_vlcs function to the more descriptive name ff_mpeg12_init_vlcs.
diego
parents:
7623
diff
changeset
|
36 void ff_mpeg12_init_vlcs(void); |
7623
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
37 |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
38 static inline int decode_dc(GetBitContext *gb, int component) |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
39 { |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
40 int code, diff; |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
41 |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
42 if (component == 0) { |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
43 code = get_vlc2(gb, dc_lum_vlc.table, DC_VLC_BITS, 2); |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
44 } else { |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
45 code = get_vlc2(gb, dc_chroma_vlc.table, DC_VLC_BITS, 2); |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
46 } |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
47 if (code < 0){ |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
48 av_log(NULL, AV_LOG_ERROR, "invalid dc code at\n"); |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
49 return 0xffff; |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
50 } |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
51 if (code == 0) { |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
52 diff = 0; |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
53 } else { |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
54 diff = get_xbits(gb, code); |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
55 } |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
56 return diff; |
0bd920dcb7a5
Untangle mpeg12.c and mdec.c so that mdec.c can be compiled separately.
diego
parents:
5830
diff
changeset
|
57 } |
5218 | 58 |
8743 | 59 extern inline int ff_mpeg1_decode_block_intra(MpegEncContext *s, DCTELEM *block, int n); |
60 | |
7760 | 61 #endif /* AVCODEC_MPEG12_H */ |