summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMohamed Tarek <mt@rockbox.org>2009-08-14 08:12:28 +0000
committerMohamed Tarek <mt@rockbox.org>2009-08-14 08:12:28 +0000
commitebd67b1c6f06b93235700bfef0011b331669ee2f (patch)
treeb925fcf49a6c2353f7c4aa7400a87376133986fa
parent4f72502329e3bdfe1d668362f139aa3467197999 (diff)
downloadrockbox-ebd67b1c6f06b93235700bfef0011b331669ee2f.tar.gz
rockbox-ebd67b1c6f06b93235700bfef0011b331669ee2f.zip
Replace av_log() with DEBUGF and drop some now-useless files.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22306 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/codecs/libatrac/Makefile.test2
-rw-r--r--apps/codecs/libatrac/atrac3.c36
-rw-r--r--apps/codecs/libatrac/avcodec.h3433
-rw-r--r--apps/codecs/libatrac/bytestream.h1
-rw-r--r--apps/codecs/libatrac/libavutil/common.h7
-rw-r--r--apps/codecs/libatrac/libavutil/internal.h328
-rw-r--r--apps/codecs/libatrac/libavutil/log.c89
-rw-r--r--apps/codecs/libatrac/libavutil/log.h116
-rw-r--r--apps/codecs/libatrac/libavutil/mem.c159
-rw-r--r--apps/codecs/libatrac/libavutil/mem.h104
10 files changed, 19 insertions, 4256 deletions
diff --git a/apps/codecs/libatrac/Makefile.test b/apps/codecs/libatrac/Makefile.test
index d1d35860e0..13809d1feb 100644
--- a/apps/codecs/libatrac/Makefile.test
+++ b/apps/codecs/libatrac/Makefile.test
@@ -1,5 +1,5 @@
1CFLAGS = -Wall -O3 -DTEST -D"DEBUGF=printf" -D"ROCKBOX_LITTLE_ENDIAN=1" -D"ICONST_ATTR=" -D"ICODE_ATTR=" 1CFLAGS = -Wall -O3 -DTEST -D"DEBUGF=printf" -D"ROCKBOX_LITTLE_ENDIAN=1" -D"ICONST_ATTR=" -D"ICODE_ATTR="
2OBJS = atrac3.o bitstream.o libavutil/log.o libavutil/mem.o ../librm/rm.o fixp_math.o ../lib/mdct2.o ../lib/mdct_lookup.o 2OBJS = atrac3.o bitstream.o ../librm/rm.o fixp_math.o ../lib/mdct2.o ../lib/mdct_lookup.o
3 3
4atractest: $(OBJS) 4atractest: $(OBJS)
5 gcc -o atractest $(OBJS) 5 gcc -o atractest $(OBJS)
diff --git a/apps/codecs/libatrac/atrac3.c b/apps/codecs/libatrac/atrac3.c
index dd706ec021..f7181f7e6b 100644
--- a/apps/codecs/libatrac/atrac3.c
+++ b/apps/codecs/libatrac/atrac3.c
@@ -36,7 +36,6 @@
36#include <stddef.h> 36#include <stddef.h>
37#include <stdio.h> 37#include <stdio.h>
38 38
39#include "avcodec.h"
40#include "bitstream.h" 39#include "bitstream.h"
41#include "bytestream.h" 40#include "bytestream.h"
42 41
@@ -245,7 +244,7 @@ static int decode_bytes(const uint8_t* inbuffer, uint8_t* out, int bytes){
245 obuf[i] = c ^ buf[i]; 244 obuf[i] = c ^ buf[i];
246 245
247 if (off) 246 if (off)
248 av_log(NULL,AV_LOG_DEBUG,"Offset of %d not handled, post sample on ffmpeg-dev.\n",off); 247 DEBUGF("Offset of %d not handled, post sample on ffmpeg-dev.\n",off);
249 248
250 return off; 249 return off;
251} 250}
@@ -644,7 +643,8 @@ static void reverseMatrixing(int32_t *su1, int32_t *su2, int *pPrevCode, int *pC
644 } 643 }
645 break; 644 break;
646 default: 645 default:
647 assert(0); 646 //assert(0);
647 break;
648 } 648 }
649 } 649 }
650} 650}
@@ -703,12 +703,12 @@ static int decodeChannelSoundUnit (ATRAC3Context *q, GetBitContext *gb, channel_
703 int band, result=0, numSubbands, lastTonal, numBands; 703 int band, result=0, numSubbands, lastTonal, numBands;
704 if (codingMode == JOINT_STEREO && channelNum == 1) { 704 if (codingMode == JOINT_STEREO && channelNum == 1) {
705 if (get_bits(gb,2) != 3) { 705 if (get_bits(gb,2) != 3) {
706 av_log(NULL,AV_LOG_ERROR,"JS mono Sound Unit id != 3.\n"); 706 DEBUGF("JS mono Sound Unit id != 3.\n");
707 return -1; 707 return -1;
708 } 708 }
709 } else { 709 } else {
710 if (get_bits(gb,6) != 0x28) { 710 if (get_bits(gb,6) != 0x28) {
711 av_log(NULL,AV_LOG_ERROR,"Sound Unit id != 0x28.\n"); 711 DEBUGF("Sound Unit id != 0x28.\n");
712 return -1; 712 return -1;
713 } 713 }
714 } 714 }
@@ -880,7 +880,7 @@ static int atrac3_decode_frame(RMContext *rmctx, ATRAC3Context *q,
880 result = decodeFrame(q, databuf); 880 result = decodeFrame(q, databuf);
881 881
882 if (result != 0) { 882 if (result != 0) {
883 av_log(NULL,AV_LOG_ERROR,"Frame decoding error!\n"); 883 DEBUGF("Frame decoding error!\n");
884 return -1; 884 return -1;
885 } 885 }
886 886
@@ -925,12 +925,12 @@ static av_cold int atrac3_decode_init(ATRAC3Context *q, RMContext *rmctx)
925 /* Take care of the codec-specific extradata. */ 925 /* Take care of the codec-specific extradata. */
926 if (rmctx->extradata_size == 14) { 926 if (rmctx->extradata_size == 14) {
927 /* Parse the extradata, WAV format */ 927 /* Parse the extradata, WAV format */
928 av_log(rmctx,AV_LOG_DEBUG,"[0-1] %d\n",bytestream_get_le16(&edata_ptr)); //Unknown value always 1 928 DEBUGF("[0-1] %d\n",bytestream_get_le16(&edata_ptr)); //Unknown value always 1
929 q->samples_per_channel = bytestream_get_le32(&edata_ptr); 929 q->samples_per_channel = bytestream_get_le32(&edata_ptr);
930 q->codingMode = bytestream_get_le16(&edata_ptr); 930 q->codingMode = bytestream_get_le16(&edata_ptr);
931 av_log(rmctx,AV_LOG_DEBUG,"[8-9] %d\n",bytestream_get_le16(&edata_ptr)); //Dupe of coding mode 931 DEBUGF("[8-9] %d\n",bytestream_get_le16(&edata_ptr)); //Dupe of coding mode
932 q->frame_factor = bytestream_get_le16(&edata_ptr); //Unknown always 1 932 q->frame_factor = bytestream_get_le16(&edata_ptr); //Unknown always 1
933 av_log(rmctx,AV_LOG_DEBUG,"[12-13] %d\n",bytestream_get_le16(&edata_ptr)); //Unknown always 0 933 DEBUGF("[12-13] %d\n",bytestream_get_le16(&edata_ptr)); //Unknown always 0
934 934
935 /* setup */ 935 /* setup */
936 q->samples_per_frame = 1024 * q->channels; 936 q->samples_per_frame = 1024 * q->channels;
@@ -944,7 +944,7 @@ static av_cold int atrac3_decode_init(ATRAC3Context *q, RMContext *rmctx)
944 944
945 if ((q->bytes_per_frame == 96*q->channels*q->frame_factor) || (q->bytes_per_frame == 152*q->channels*q->frame_factor) || (q->bytes_per_frame == 192*q->channels*q->frame_factor)) { 945 if ((q->bytes_per_frame == 96*q->channels*q->frame_factor) || (q->bytes_per_frame == 152*q->channels*q->frame_factor) || (q->bytes_per_frame == 192*q->channels*q->frame_factor)) {
946 } else { 946 } else {
947 av_log(rmctx,AV_LOG_ERROR,"Unknown frame/channel/frame_factor configuration %d/%d/%d\n", q->bytes_per_frame, q->channels, q->frame_factor); 947 DEBUGF("Unknown frame/channel/frame_factor configuration %d/%d/%d\n", q->bytes_per_frame, q->channels, q->frame_factor);
948 return -1; 948 return -1;
949 } 949 }
950 950
@@ -959,36 +959,36 @@ static av_cold int atrac3_decode_init(ATRAC3Context *q, RMContext *rmctx)
959 q->scrambled_stream = 1; 959 q->scrambled_stream = 1;
960 960
961 } else { 961 } else {
962 av_log(NULL,AV_LOG_ERROR,"Unknown extradata size %d.\n",rmctx->extradata_size); 962 DEBUGF("Unknown extradata size %d.\n",rmctx->extradata_size);
963 } 963 }
964 /* Check the extradata. */ 964 /* Check the extradata. */
965 965
966 if (q->atrac3version != 4) { 966 if (q->atrac3version != 4) {
967 av_log(rmctx,AV_LOG_ERROR,"Version %d != 4.\n",q->atrac3version); 967 DEBUGF("Version %d != 4.\n",q->atrac3version);
968 return -1; 968 return -1;
969 } 969 }
970 970
971 if (q->samples_per_frame != 1024 && q->samples_per_frame != 2048) { 971 if (q->samples_per_frame != 1024 && q->samples_per_frame != 2048) {
972 av_log(rmctx,AV_LOG_ERROR,"Unknown amount of samples per frame %d.\n",q->samples_per_frame); 972 DEBUGF("Unknown amount of samples per frame %d.\n",q->samples_per_frame);
973 return -1; 973 return -1;
974 } 974 }
975 975
976 if (q->delay != 0x88E) { 976 if (q->delay != 0x88E) {
977 av_log(rmctx,AV_LOG_ERROR,"Unknown amount of delay %x != 0x88E.\n",q->delay); 977 DEBUGF("Unknown amount of delay %x != 0x88E.\n",q->delay);
978 return -1; 978 return -1;
979 } 979 }
980 980
981 if (q->codingMode == STEREO) { 981 if (q->codingMode == STEREO) {
982 av_log(rmctx,AV_LOG_DEBUG,"Normal stereo detected.\n"); 982 DEBUGF("Normal stereo detected.\n");
983 } else if (q->codingMode == JOINT_STEREO) { 983 } else if (q->codingMode == JOINT_STEREO) {
984 av_log(rmctx,AV_LOG_DEBUG,"Joint stereo detected.\n"); 984 DEBUGF("Joint stereo detected.\n");
985 } else { 985 } else {
986 av_log(rmctx,AV_LOG_ERROR,"Unknown channel coding mode %x!\n",q->codingMode); 986 DEBUGF("Unknown channel coding mode %x!\n",q->codingMode);
987 return -1; 987 return -1;
988 } 988 }
989 989
990 if (rmctx->nb_channels <= 0 || rmctx->nb_channels > 2 /*|| ((rmctx->channels * 1024) != q->samples_per_frame)*/) { 990 if (rmctx->nb_channels <= 0 || rmctx->nb_channels > 2 /*|| ((rmctx->channels * 1024) != q->samples_per_frame)*/) {
991 av_log(rmctx,AV_LOG_ERROR,"Channel configuration error!\n"); 991 DEBUGF("Channel configuration error!\n");
992 return -1; 992 return -1;
993 } 993 }
994 994
diff --git a/apps/codecs/libatrac/avcodec.h b/apps/codecs/libatrac/avcodec.h
deleted file mode 100644
index ed1bdecfce..0000000000
--- a/apps/codecs/libatrac/avcodec.h
+++ /dev/null
@@ -1,3433 +0,0 @@
1/*
2 * copyright (c) 2001 Fabrice Bellard
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVCODEC_AVCODEC_H
22#define AVCODEC_AVCODEC_H
23
24/**
25 * @file libavcodec/avcodec.h
26 * external API header
27 */
28
29#include <errno.h>
30#include "libavutil/avutil.h"
31
32#define LIBAVCODEC_VERSION_MAJOR 52
33#define LIBAVCODEC_VERSION_MINOR 22
34#define LIBAVCODEC_VERSION_MICRO 0
35
36#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
37 LIBAVCODEC_VERSION_MINOR, \
38 LIBAVCODEC_VERSION_MICRO)
39#define LIBAVCODEC_VERSION AV_VERSION(LIBAVCODEC_VERSION_MAJOR, \
40 LIBAVCODEC_VERSION_MINOR, \
41 LIBAVCODEC_VERSION_MICRO)
42#define LIBAVCODEC_BUILD LIBAVCODEC_VERSION_INT
43
44#define LIBAVCODEC_IDENT "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
45
46#define AV_NOPTS_VALUE INT64_C(0x8000000000000000)
47#define AV_TIME_BASE 1000000
48#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
49
50/**
51 * Identifies the syntax and semantics of the bitstream.
52 * The principle is roughly:
53 * Two decoders with the same ID can decode the same streams.
54 * Two encoders with the same ID can encode compatible streams.
55 * There may be slight deviations from the principle due to implementation
56 * details.
57 *
58 * If you add a codec ID to this list, add it so that
59 * 1. no value of a existing codec ID changes (that would break ABI),
60 * 2. it is as close as possible to similar codecs.
61 */
62enum CodecID {
63 CODEC_ID_NONE,
64
65 /* video codecs */
66 CODEC_ID_MPEG1VIDEO,
67 CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
68 CODEC_ID_MPEG2VIDEO_XVMC,
69 CODEC_ID_H261,
70 CODEC_ID_H263,
71 CODEC_ID_RV10,
72 CODEC_ID_RV20,
73 CODEC_ID_MJPEG,
74 CODEC_ID_MJPEGB,
75 CODEC_ID_LJPEG,
76 CODEC_ID_SP5X,
77 CODEC_ID_JPEGLS,
78 CODEC_ID_MPEG4,
79 CODEC_ID_RAWVIDEO,
80 CODEC_ID_MSMPEG4V1,
81 CODEC_ID_MSMPEG4V2,
82 CODEC_ID_MSMPEG4V3,
83 CODEC_ID_WMV1,
84 CODEC_ID_WMV2,
85 CODEC_ID_H263P,
86 CODEC_ID_H263I,
87 CODEC_ID_FLV1,
88 CODEC_ID_SVQ1,
89 CODEC_ID_SVQ3,
90 CODEC_ID_DVVIDEO,
91 CODEC_ID_HUFFYUV,
92 CODEC_ID_CYUV,
93 CODEC_ID_H264,
94 CODEC_ID_INDEO3,
95 CODEC_ID_VP3,
96 CODEC_ID_THEORA,
97 CODEC_ID_ASV1,
98 CODEC_ID_ASV2,
99 CODEC_ID_FFV1,
100 CODEC_ID_4XM,
101 CODEC_ID_VCR1,
102 CODEC_ID_CLJR,
103 CODEC_ID_MDEC,
104 CODEC_ID_ROQ,
105 CODEC_ID_INTERPLAY_VIDEO,
106 CODEC_ID_XAN_WC3,
107 CODEC_ID_XAN_WC4,
108 CODEC_ID_RPZA,
109 CODEC_ID_CINEPAK,
110 CODEC_ID_WS_VQA,
111 CODEC_ID_MSRLE,
112 CODEC_ID_MSVIDEO1,
113 CODEC_ID_IDCIN,
114 CODEC_ID_8BPS,
115 CODEC_ID_SMC,
116 CODEC_ID_FLIC,
117 CODEC_ID_TRUEMOTION1,
118 CODEC_ID_VMDVIDEO,
119 CODEC_ID_MSZH,
120 CODEC_ID_ZLIB,
121 CODEC_ID_QTRLE,
122 CODEC_ID_SNOW,
123 CODEC_ID_TSCC,
124 CODEC_ID_ULTI,
125 CODEC_ID_QDRAW,
126 CODEC_ID_VIXL,
127 CODEC_ID_QPEG,
128 CODEC_ID_XVID,
129 CODEC_ID_PNG,
130 CODEC_ID_PPM,
131 CODEC_ID_PBM,
132 CODEC_ID_PGM,
133 CODEC_ID_PGMYUV,
134 CODEC_ID_PAM,
135 CODEC_ID_FFVHUFF,
136 CODEC_ID_RV30,
137 CODEC_ID_RV40,
138 CODEC_ID_VC1,
139 CODEC_ID_WMV3,
140 CODEC_ID_LOCO,
141 CODEC_ID_WNV1,
142 CODEC_ID_AASC,
143 CODEC_ID_INDEO2,
144 CODEC_ID_FRAPS,
145 CODEC_ID_TRUEMOTION2,
146 CODEC_ID_BMP,
147 CODEC_ID_CSCD,
148 CODEC_ID_MMVIDEO,
149 CODEC_ID_ZMBV,
150 CODEC_ID_AVS,
151 CODEC_ID_SMACKVIDEO,
152 CODEC_ID_NUV,
153 CODEC_ID_KMVC,
154 CODEC_ID_FLASHSV,
155 CODEC_ID_CAVS,
156 CODEC_ID_JPEG2000,
157 CODEC_ID_VMNC,
158 CODEC_ID_VP5,
159 CODEC_ID_VP6,
160 CODEC_ID_VP6F,
161 CODEC_ID_TARGA,
162 CODEC_ID_DSICINVIDEO,
163 CODEC_ID_TIERTEXSEQVIDEO,
164 CODEC_ID_TIFF,
165 CODEC_ID_GIF,
166 CODEC_ID_FFH264,
167 CODEC_ID_DXA,
168 CODEC_ID_DNXHD,
169 CODEC_ID_THP,
170 CODEC_ID_SGI,
171 CODEC_ID_C93,
172 CODEC_ID_BETHSOFTVID,
173 CODEC_ID_PTX,
174 CODEC_ID_TXD,
175 CODEC_ID_VP6A,
176 CODEC_ID_AMV,
177 CODEC_ID_VB,
178 CODEC_ID_PCX,
179 CODEC_ID_SUNRAST,
180 CODEC_ID_INDEO4,
181 CODEC_ID_INDEO5,
182 CODEC_ID_MIMIC,
183 CODEC_ID_RL2,
184 CODEC_ID_8SVX_EXP,
185 CODEC_ID_8SVX_FIB,
186 CODEC_ID_ESCAPE124,
187 CODEC_ID_DIRAC,
188 CODEC_ID_BFI,
189 CODEC_ID_CMV,
190 CODEC_ID_MOTIONPIXELS,
191 CODEC_ID_TGV,
192 CODEC_ID_TGQ,
193 CODEC_ID_TQI,
194
195 /* various PCM "codecs" */
196 CODEC_ID_PCM_S16LE= 0x10000,
197 CODEC_ID_PCM_S16BE,
198 CODEC_ID_PCM_U16LE,
199 CODEC_ID_PCM_U16BE,
200 CODEC_ID_PCM_S8,
201 CODEC_ID_PCM_U8,
202 CODEC_ID_PCM_MULAW,
203 CODEC_ID_PCM_ALAW,
204 CODEC_ID_PCM_S32LE,
205 CODEC_ID_PCM_S32BE,
206 CODEC_ID_PCM_U32LE,
207 CODEC_ID_PCM_U32BE,
208 CODEC_ID_PCM_S24LE,
209 CODEC_ID_PCM_S24BE,
210 CODEC_ID_PCM_U24LE,
211 CODEC_ID_PCM_U24BE,
212 CODEC_ID_PCM_S24DAUD,
213 CODEC_ID_PCM_ZORK,
214 CODEC_ID_PCM_S16LE_PLANAR,
215 CODEC_ID_PCM_DVD,
216 CODEC_ID_PCM_F32BE,
217 CODEC_ID_PCM_F32LE,
218 CODEC_ID_PCM_F64BE,
219 CODEC_ID_PCM_F64LE,
220
221 /* various ADPCM codecs */
222 CODEC_ID_ADPCM_IMA_QT= 0x11000,
223 CODEC_ID_ADPCM_IMA_WAV,
224 CODEC_ID_ADPCM_IMA_DK3,
225 CODEC_ID_ADPCM_IMA_DK4,
226 CODEC_ID_ADPCM_IMA_WS,
227 CODEC_ID_ADPCM_IMA_SMJPEG,
228 CODEC_ID_ADPCM_MS,
229 CODEC_ID_ADPCM_4XM,
230 CODEC_ID_ADPCM_XA,
231 CODEC_ID_ADPCM_ADX,
232 CODEC_ID_ADPCM_EA,
233 CODEC_ID_ADPCM_G726,
234 CODEC_ID_ADPCM_CT,
235 CODEC_ID_ADPCM_SWF,
236 CODEC_ID_ADPCM_YAMAHA,
237 CODEC_ID_ADPCM_SBPRO_4,
238 CODEC_ID_ADPCM_SBPRO_3,
239 CODEC_ID_ADPCM_SBPRO_2,
240 CODEC_ID_ADPCM_THP,
241 CODEC_ID_ADPCM_IMA_AMV,
242 CODEC_ID_ADPCM_EA_R1,
243 CODEC_ID_ADPCM_EA_R3,
244 CODEC_ID_ADPCM_EA_R2,
245 CODEC_ID_ADPCM_IMA_EA_SEAD,
246 CODEC_ID_ADPCM_IMA_EA_EACS,
247 CODEC_ID_ADPCM_EA_XAS,
248 CODEC_ID_ADPCM_EA_MAXIS_XA,
249 CODEC_ID_ADPCM_IMA_ISS,
250
251 /* AMR */
252 CODEC_ID_AMR_NB= 0x12000,
253 CODEC_ID_AMR_WB,
254
255 /* RealAudio codecs*/
256 CODEC_ID_RA_144= 0x13000,
257 CODEC_ID_RA_288,
258
259 /* various DPCM codecs */
260 CODEC_ID_ROQ_DPCM= 0x14000,
261 CODEC_ID_INTERPLAY_DPCM,
262 CODEC_ID_XAN_DPCM,
263 CODEC_ID_SOL_DPCM,
264
265 /* audio codecs */
266 CODEC_ID_MP2= 0x15000,
267 CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
268 CODEC_ID_AAC,
269 CODEC_ID_AC3,
270 CODEC_ID_DTS,
271 CODEC_ID_VORBIS,
272 CODEC_ID_DVAUDIO,
273 CODEC_ID_WMAV1,
274 CODEC_ID_WMAV2,
275 CODEC_ID_MACE3,
276 CODEC_ID_MACE6,
277 CODEC_ID_VMDAUDIO,
278 CODEC_ID_SONIC,
279 CODEC_ID_SONIC_LS,
280 CODEC_ID_FLAC,
281 CODEC_ID_MP3ADU,
282 CODEC_ID_MP3ON4,
283 CODEC_ID_SHORTEN,
284 CODEC_ID_ALAC,
285 CODEC_ID_WESTWOOD_SND1,
286 CODEC_ID_GSM, ///< as in Berlin toast format
287 CODEC_ID_QDM2,
288 CODEC_ID_COOK,
289 CODEC_ID_TRUESPEECH,
290 CODEC_ID_TTA,
291 CODEC_ID_SMACKAUDIO,
292 CODEC_ID_QCELP,
293 CODEC_ID_WAVPACK,
294 CODEC_ID_DSICINAUDIO,
295 CODEC_ID_IMC,
296 CODEC_ID_MUSEPACK7,
297 CODEC_ID_MLP,
298 CODEC_ID_GSM_MS, /* as found in WAV */
299 CODEC_ID_ATRAC3,
300 CODEC_ID_VOXWARE,
301 CODEC_ID_APE,
302 CODEC_ID_NELLYMOSER,
303 CODEC_ID_MUSEPACK8,
304 CODEC_ID_SPEEX,
305 CODEC_ID_WMAVOICE,
306 CODEC_ID_WMAPRO,
307 CODEC_ID_WMALOSSLESS,
308 CODEC_ID_ATRAC3P,
309 CODEC_ID_EAC3,
310 CODEC_ID_SIPR,
311 CODEC_ID_MP1,
312 CODEC_ID_TWINVQ,
313 CODEC_ID_TRUEHD,
314
315 /* subtitle codecs */
316 CODEC_ID_DVD_SUBTITLE= 0x17000,
317 CODEC_ID_DVB_SUBTITLE,
318 CODEC_ID_TEXT, ///< raw UTF-8 text
319 CODEC_ID_XSUB,
320 CODEC_ID_SSA,
321 CODEC_ID_MOV_TEXT,
322
323 /* other specific kind of codecs (generally used for attachments) */
324 CODEC_ID_TTF= 0x18000,
325
326 CODEC_ID_PROBE= 0x19000, ///< codec_id is not known (like CODEC_ID_NONE) but lavf should attempt to identify it
327
328 CODEC_ID_MPEG2TS= 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
329 * stream (only used by libavformat) */
330};
331
332enum CodecType {
333 CODEC_TYPE_UNKNOWN = -1,
334 CODEC_TYPE_VIDEO,
335 CODEC_TYPE_AUDIO,
336 CODEC_TYPE_DATA,
337 CODEC_TYPE_SUBTITLE,
338 CODEC_TYPE_ATTACHMENT,
339 CODEC_TYPE_NB
340};
341
342/**
343 * all in native-endian format
344 */
345enum SampleFormat {
346 SAMPLE_FMT_NONE = -1,
347 SAMPLE_FMT_U8, ///< unsigned 8 bits
348 SAMPLE_FMT_S16, ///< signed 16 bits
349 SAMPLE_FMT_S32, ///< signed 32 bits
350 SAMPLE_FMT_FLT, ///< float
351 SAMPLE_FMT_DBL, ///< double
352 SAMPLE_FMT_NB ///< Number of sample formats. DO NOT USE if dynamically linking to libavcodec
353};
354
355/* Audio channel masks */
356#define CH_FRONT_LEFT 0x00000001
357#define CH_FRONT_RIGHT 0x00000002
358#define CH_FRONT_CENTER 0x00000004
359#define CH_LOW_FREQUENCY 0x00000008
360#define CH_BACK_LEFT 0x00000010
361#define CH_BACK_RIGHT 0x00000020
362#define CH_FRONT_LEFT_OF_CENTER 0x00000040
363#define CH_FRONT_RIGHT_OF_CENTER 0x00000080
364#define CH_BACK_CENTER 0x00000100
365#define CH_SIDE_LEFT 0x00000200
366#define CH_SIDE_RIGHT 0x00000400
367#define CH_TOP_CENTER 0x00000800
368#define CH_TOP_FRONT_LEFT 0x00001000
369#define CH_TOP_FRONT_CENTER 0x00002000
370#define CH_TOP_FRONT_RIGHT 0x00004000
371#define CH_TOP_BACK_LEFT 0x00008000
372#define CH_TOP_BACK_CENTER 0x00010000
373#define CH_TOP_BACK_RIGHT 0x00020000
374#define CH_STEREO_LEFT 0x20000000 ///< Stereo downmix.
375#define CH_STEREO_RIGHT 0x40000000 ///< See CH_STEREO_LEFT.
376
377/* Audio channel convenience macros */
378#define CH_LAYOUT_MONO (CH_FRONT_CENTER)
379#define CH_LAYOUT_STEREO (CH_FRONT_LEFT|CH_FRONT_RIGHT)
380#define CH_LAYOUT_SURROUND (CH_LAYOUT_STEREO|CH_FRONT_CENTER)
381#define CH_LAYOUT_QUAD (CH_LAYOUT_STEREO|CH_BACK_LEFT|CH_BACK_RIGHT)
382#define CH_LAYOUT_5POINT0 (CH_LAYOUT_SURROUND|CH_SIDE_LEFT|CH_SIDE_RIGHT)
383#define CH_LAYOUT_5POINT1 (CH_LAYOUT_5POINT0|CH_LOW_FREQUENCY)
384#define CH_LAYOUT_7POINT1 (CH_LAYOUT_5POINT1|CH_BACK_LEFT|CH_BACK_RIGHT)
385#define CH_LAYOUT_7POINT1_WIDE (CH_LAYOUT_SURROUND|CH_LOW_FREQUENCY|\
386 CH_BACK_LEFT|CH_BACK_RIGHT|\
387 CH_FRONT_LEFT_OF_CENTER|CH_FRONT_RIGHT_OF_CENTER)
388#define CH_LAYOUT_STEREO_DOWNMIX (CH_STEREO_LEFT|CH_STEREO_RIGHT)
389
390/* in bytes */
391#define AVCODEC_MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
392
393/**
394 * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
395 * This is mainly needed because some optimized bitstream readers read
396 * 32 or 64 bit at once and could read over the end.<br>
397 * Note: If the first 23 bits of the additional bytes are not 0, then damaged
398 * MPEG bitstreams could cause overread and segfault.
399 */
400#define FF_INPUT_BUFFER_PADDING_SIZE 8
401
402/**
403 * minimum encoding buffer size
404 * Used to avoid some checks during header writing.
405 */
406#define FF_MIN_BUFFER_SIZE 16384
407
408#if 0/* MT : DELETE THIS LINE.*/
409/**
410 * motion estimation type.
411 */
412enum Motion_Est_ID {
413 ME_ZERO = 1, ///< no search, that is use 0,0 vector whenever one is needed
414 ME_FULL,
415 ME_LOG,
416 ME_PHODS,
417 ME_EPZS, ///< enhanced predictive zonal search
418 ME_X1, ///< reserved for experiments
419 ME_HEX, ///< hexagon based search
420 ME_UMH, ///< uneven multi-hexagon search
421 ME_ITER, ///< iterative search
422 ME_TESA, ///< transformed exhaustive search algorithm
423};
424
425enum AVDiscard{
426 /* We leave some space between them for extensions (drop some
427 * keyframes for intra-only or drop just some bidir frames). */
428 AVDISCARD_NONE =-16, ///< discard nothing
429 AVDISCARD_DEFAULT= 0, ///< discard useless packets like 0 size packets in avi
430 AVDISCARD_NONREF = 8, ///< discard all non reference
431 AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
432 AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
433 AVDISCARD_ALL = 48, ///< discard all
434};
435
436typedef struct RcOverride{
437 int start_frame;
438 int end_frame;
439 int qscale; // If this is 0 then quality_factor will be used instead.
440 float quality_factor;
441} RcOverride;
442
443#define FF_MAX_B_FRAMES 16
444
445/* encoding support
446 These flags can be passed in AVCodecContext.flags before initialization.
447 Note: Not everything is supported yet.
448*/
449
450#define CODEC_FLAG_QSCALE 0x0002 ///< Use fixed qscale.
451#define CODEC_FLAG_4MV 0x0004 ///< 4 MV per MB allowed / advanced prediction for H.263.
452#define CODEC_FLAG_QPEL 0x0010 ///< Use qpel MC.
453#define CODEC_FLAG_GMC 0x0020 ///< Use GMC.
454#define CODEC_FLAG_MV0 0x0040 ///< Always try a MB with MV=<0,0>.
455#define CODEC_FLAG_PART 0x0080 ///< Use data partitioning.
456/**
457 * The parent program guarantees that the input for B-frames containing
458 * streams is not written to for at least s->max_b_frames+1 frames, if
459 * this is not set the input will be copied.
460 */
461#define CODEC_FLAG_INPUT_PRESERVED 0x0100
462#define CODEC_FLAG_PASS1 0x0200 ///< Use internal 2pass ratecontrol in first pass mode.
463#define CODEC_FLAG_PASS2 0x0400 ///< Use internal 2pass ratecontrol in second pass mode.
464#define CODEC_FLAG_EXTERN_HUFF 0x1000 ///< Use external Huffman table (for MJPEG).
465#define CODEC_FLAG_GRAY 0x2000 ///< Only decode/encode grayscale.
466#define CODEC_FLAG_EMU_EDGE 0x4000 ///< Don't draw edges.
467#define CODEC_FLAG_PSNR 0x8000 ///< error[?] variables will be set during encoding.
468#define CODEC_FLAG_TRUNCATED 0x00010000 /** Input bitstream might be truncated at a random
469 location instead of only at frame boundaries. */
470#define CODEC_FLAG_NORMALIZE_AQP 0x00020000 ///< Normalize adaptive quantization.
471#define CODEC_FLAG_INTERLACED_DCT 0x00040000 ///< Use interlaced DCT.
472#define CODEC_FLAG_LOW_DELAY 0x00080000 ///< Force low delay.
473#define CODEC_FLAG_ALT_SCAN 0x00100000 ///< Use alternate scan.
474#define CODEC_FLAG_GLOBAL_HEADER 0x00400000 ///< Place global headers in extradata instead of every keyframe.
475#define CODEC_FLAG_BITEXACT 0x00800000 ///< Use only bitexact stuff (except (I)DCT).
476/* Fx : Flag for h263+ extra options */
477#define CODEC_FLAG_AC_PRED 0x01000000 ///< H.263 advanced intra coding / MPEG-4 AC prediction
478#define CODEC_FLAG_H263P_UMV 0x02000000 ///< unlimited motion vector
479#define CODEC_FLAG_CBP_RD 0x04000000 ///< Use rate distortion optimization for cbp.
480#define CODEC_FLAG_QP_RD 0x08000000 ///< Use rate distortion optimization for qp selectioon.
481#define CODEC_FLAG_H263P_AIV 0x00000008 ///< H.263 alternative inter VLC
482#define CODEC_FLAG_OBMC 0x00000001 ///< OBMC
483#define CODEC_FLAG_LOOP_FILTER 0x00000800 ///< loop filter
484#define CODEC_FLAG_H263P_SLICE_STRUCT 0x10000000
485#define CODEC_FLAG_INTERLACED_ME 0x20000000 ///< interlaced motion estimation
486#define CODEC_FLAG_SVCD_SCAN_OFFSET 0x40000000 ///< Will reserve space for SVCD scan offset user data.
487#define CODEC_FLAG_CLOSED_GOP 0x80000000
488#define CODEC_FLAG2_FAST 0x00000001 ///< Allow non spec compliant speedup tricks.
489#define CODEC_FLAG2_STRICT_GOP 0x00000002 ///< Strictly enforce GOP size.
490#define CODEC_FLAG2_NO_OUTPUT 0x00000004 ///< Skip bitstream encoding.
491#define CODEC_FLAG2_LOCAL_HEADER 0x00000008 ///< Place global headers at every keyframe instead of in extradata.
492#define CODEC_FLAG2_BPYRAMID 0x00000010 ///< H.264 allow B-frames to be used as references.
493#define CODEC_FLAG2_WPRED 0x00000020 ///< H.264 weighted biprediction for B-frames
494#define CODEC_FLAG2_MIXED_REFS 0x00000040 ///< H.264 one reference per partition, as opposed to one reference per macroblock
495#define CODEC_FLAG2_8X8DCT 0x00000080 ///< H.264 high profile 8x8 transform
496#define CODEC_FLAG2_FASTPSKIP 0x00000100 ///< H.264 fast pskip
497#define CODEC_FLAG2_AUD 0x00000200 ///< H.264 access unit delimiters
498#define CODEC_FLAG2_BRDO 0x00000400 ///< B-frame rate-distortion optimization
499#define CODEC_FLAG2_INTRA_VLC 0x00000800 ///< Use MPEG-2 intra VLC table.
500#define CODEC_FLAG2_MEMC_ONLY 0x00001000 ///< Only do ME/MC (I frames -> ref, P frame -> ME+MC).
501#define CODEC_FLAG2_DROP_FRAME_TIMECODE 0x00002000 ///< timecode is in drop frame format.
502#define CODEC_FLAG2_SKIP_RD 0x00004000 ///< RD optimal MB level residual skipping
503#define CODEC_FLAG2_CHUNKS 0x00008000 ///< Input bitstream might be truncated at a packet boundaries instead of only at frame boundaries.
504#define CODEC_FLAG2_NON_LINEAR_QUANT 0x00010000 ///< Use MPEG-2 nonlinear quantizer.
505#define CODEC_FLAG2_BIT_RESERVOIR 0x00020000 ///< Use a bit reservoir when encoding if possible
506
507/* Unsupported options :
508 * Syntax Arithmetic coding (SAC)
509 * Reference Picture Selection
510 * Independent Segment Decoding */
511/* /Fx */
512/* codec capabilities */
513
514#define CODEC_CAP_DRAW_HORIZ_BAND 0x0001 ///< Decoder can use draw_horiz_band callback.
515/**
516 * Codec uses get_buffer() for allocating buffers.
517 * direct rendering method 1
518 */
519#define CODEC_CAP_DR1 0x0002
520/* If 'parse_only' field is true, then avcodec_parse_frame() can be used. */
521#define CODEC_CAP_PARSE_ONLY 0x0004
522#define CODEC_CAP_TRUNCATED 0x0008
523/* Codec can export data for HW decoding (XvMC). */
524#define CODEC_CAP_HWACCEL 0x0010
525/**
526 * Codec has a nonzero delay and needs to be fed with NULL at the end to get the delayed data.
527 * If this is not set, the codec is guaranteed to never be fed with NULL data.
528 */
529#define CODEC_CAP_DELAY 0x0020
530/**
531 * Codec can be fed a final frame with a smaller size.
532 * This can be used to prevent truncation of the last audio samples.
533 */
534#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
535/**
536 * Codec can export data for HW decoding (VDPAU).
537 */
538#define CODEC_CAP_HWACCEL_VDPAU 0x0080
539
540//The following defines may change, don't expect compatibility if you use them.
541#define MB_TYPE_INTRA4x4 0x0001
542#define MB_TYPE_INTRA16x16 0x0002 //FIXME H.264-specific
543#define MB_TYPE_INTRA_PCM 0x0004 //FIXME H.264-specific
544#define MB_TYPE_16x16 0x0008
545#define MB_TYPE_16x8 0x0010
546#define MB_TYPE_8x16 0x0020
547#define MB_TYPE_8x8 0x0040
548#define MB_TYPE_INTERLACED 0x0080
549#define MB_TYPE_DIRECT2 0x0100 //FIXME
550#define MB_TYPE_ACPRED 0x0200
551#define MB_TYPE_GMC 0x0400
552#define MB_TYPE_SKIP 0x0800
553#define MB_TYPE_P0L0 0x1000
554#define MB_TYPE_P1L0 0x2000
555#define MB_TYPE_P0L1 0x4000
556#define MB_TYPE_P1L1 0x8000
557#define MB_TYPE_L0 (MB_TYPE_P0L0 | MB_TYPE_P1L0)
558#define MB_TYPE_L1 (MB_TYPE_P0L1 | MB_TYPE_P1L1)
559#define MB_TYPE_L0L1 (MB_TYPE_L0 | MB_TYPE_L1)
560#define MB_TYPE_QUANT 0x00010000
561#define MB_TYPE_CBP 0x00020000
562//Note bits 24-31 are reserved for codec specific use (h264 ref0, mpeg1 0mv, ...)
563
564/**
565 * Pan Scan area.
566 * This specifies the area which should be displayed.
567 * Note there may be multiple such areas for one frame.
568 */
569typedef struct AVPanScan{
570 /**
571 * id
572 * - encoding: Set by user.
573 * - decoding: Set by libavcodec.
574 */
575 int id;
576
577 /**
578 * width and height in 1/16 pel
579 * - encoding: Set by user.
580 * - decoding: Set by libavcodec.
581 */
582 int width;
583 int height;
584
585 /**
586 * position of the top left corner in 1/16 pel for up to 3 fields/frames
587 * - encoding: Set by user.
588 * - decoding: Set by libavcodec.
589 */
590 int16_t position[3][2];
591}AVPanScan;
592
593#define FF_COMMON_FRAME \
594 /**\
595 * pointer to the picture planes.\
596 * This might be different from the first allocated byte\
597 * - encoding: \
598 * - decoding: \
599 */\
600 uint8_t *data[4];\
601 int linesize[4];\
602 /**\
603 * pointer to the first allocated byte of the picture. Can be used in get_buffer/release_buffer.\
604 * This isn't used by libavcodec unless the default get/release_buffer() is used.\
605 * - encoding: \
606 * - decoding: \
607 */\
608 uint8_t *base[4];\
609 /**\
610 * 1 -> keyframe, 0-> not\
611 * - encoding: Set by libavcodec.\
612 * - decoding: Set by libavcodec.\
613 */\
614 int key_frame;\
615\
616 /**\
617 * Picture type of the frame, see ?_TYPE below.\
618 * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
619 * - decoding: Set by libavcodec.\
620 */\
621 int pict_type;\
622\
623 /**\
624 * presentation timestamp in time_base units (time when frame should be shown to user)\
625 * If AV_NOPTS_VALUE then frame_rate = 1/time_base will be assumed.\
626 * - encoding: MUST be set by user.\
627 * - decoding: Set by libavcodec.\
628 */\
629 int64_t pts;\
630\
631 /**\
632 * picture number in bitstream order\
633 * - encoding: set by\
634 * - decoding: Set by libavcodec.\
635 */\
636 int coded_picture_number;\
637 /**\
638 * picture number in display order\
639 * - encoding: set by\
640 * - decoding: Set by libavcodec.\
641 */\
642 int display_picture_number;\
643\
644 /**\
645 * quality (between 1 (good) and FF_LAMBDA_MAX (bad)) \
646 * - encoding: Set by libavcodec. for coded_picture (and set by user for input).\
647 * - decoding: Set by libavcodec.\
648 */\
649 int quality; \
650\
651 /**\
652 * buffer age (1->was last buffer and dint change, 2->..., ...).\
653 * Set to INT_MAX if the buffer has not been used yet.\
654 * - encoding: unused\
655 * - decoding: MUST be set by get_buffer().\
656 */\
657 int age;\
658\
659 /**\
660 * is this picture used as reference\
661 * The values for this are the same as the MpegEncContext.picture_structure\
662 * variable, that is 1->top field, 2->bottom field, 3->frame/both fields.\
663 * Set to 4 for delayed, non-reference frames.\
664 * - encoding: unused\
665 * - decoding: Set by libavcodec. (before get_buffer() call)).\
666 */\
667 int reference;\
668\
669 /**\
670 * QP table\
671 * - encoding: unused\
672 * - decoding: Set by libavcodec.\
673 */\
674 int8_t *qscale_table;\
675 /**\
676 * QP store stride\
677 * - encoding: unused\
678 * - decoding: Set by libavcodec.\
679 */\
680 int qstride;\
681\
682 /**\
683 * mbskip_table[mb]>=1 if MB didn't change\
684 * stride= mb_width = (width+15)>>4\
685 * - encoding: unused\
686 * - decoding: Set by libavcodec.\
687 */\
688 uint8_t *mbskip_table;\
689\
690 /**\
691 * motion vector table\
692 * @code\
693 * example:\
694 * int mv_sample_log2= 4 - motion_subsample_log2;\
695 * int mb_width= (width+15)>>4;\
696 * int mv_stride= (mb_width << mv_sample_log2) + 1;\
697 * motion_val[direction][x + y*mv_stride][0->mv_x, 1->mv_y];\
698 * @endcode\
699 * - encoding: Set by user.\
700 * - decoding: Set by libavcodec.\
701 */\
702 int16_t (*motion_val[2])[2];\
703\
704 /**\
705 * macroblock type table\
706 * mb_type_base + mb_width + 2\
707 * - encoding: Set by user.\
708 * - decoding: Set by libavcodec.\
709 */\
710 uint32_t *mb_type;\
711\
712 /**\
713 * log2 of the size of the block which a single vector in motion_val represents: \
714 * (4->16x16, 3->8x8, 2-> 4x4, 1-> 2x2)\
715 * - encoding: unused\
716 * - decoding: Set by libavcodec.\
717 */\
718 uint8_t motion_subsample_log2;\
719\
720 /**\
721 * for some private data of the user\
722 * - encoding: unused\
723 * - decoding: Set by user.\
724 */\
725 void *opaque;\
726\
727 /**\
728 * error\
729 * - encoding: Set by libavcodec. if flags&CODEC_FLAG_PSNR.\
730 * - decoding: unused\
731 */\
732 uint64_t error[4];\
733\
734 /**\
735 * type of the buffer (to keep track of who has to deallocate data[*])\
736 * - encoding: Set by the one who allocates it.\
737 * - decoding: Set by the one who allocates it.\
738 * Note: User allocated (direct rendering) & internal buffers cannot coexist currently.\
739 */\
740 int type;\
741 \
742 /**\
743 * When decoding, this signals how much the picture must be delayed.\
744 * extra_delay = repeat_pict / (2*fps)\
745 * - encoding: unused\
746 * - decoding: Set by libavcodec.\
747 */\
748 int repeat_pict;\
749 \
750 /**\
751 * \
752 */\
753 int qscale_type;\
754 \
755 /**\
756 * The content of the picture is interlaced.\
757 * - encoding: Set by user.\
758 * - decoding: Set by libavcodec. (default 0)\
759 */\
760 int interlaced_frame;\
761 \
762 /**\
763 * If the content is interlaced, is top field displayed first.\
764 * - encoding: Set by user.\
765 * - decoding: Set by libavcodec.\
766 */\
767 int top_field_first;\
768 \
769 /**\
770 * Pan scan.\
771 * - encoding: Set by user.\
772 * - decoding: Set by libavcodec.\
773 */\
774 AVPanScan *pan_scan;\
775 \
776 /**\
777 * Tell user application that palette has changed from previous frame.\
778 * - encoding: ??? (no palette-enabled encoder yet)\
779 * - decoding: Set by libavcodec. (default 0).\
780 */\
781 int palette_has_changed;\
782 \
783 /**\
784 * codec suggestion on buffer type if != 0\
785 * - encoding: unused\
786 * - decoding: Set by libavcodec. (before get_buffer() call)).\
787 */\
788 int buffer_hints;\
789\
790 /**\
791 * DCT coefficients\
792 * - encoding: unused\
793 * - decoding: Set by libavcodec.\
794 */\
795 short *dct_coeff;\
796\
797 /**\
798 * motion referece frame index\
799 * - encoding: Set by user.\
800 * - decoding: Set by libavcodec.\
801 */\
802 int8_t *ref_index[2];\
803\
804 /**\
805 * reordered opaque 64bit number (generally a PTS) from AVCodecContext.reordered_opaque\
806 * output in AVFrame.reordered_opaque\
807 * - encoding: unused\
808 * - decoding: Read by user.\
809 */\
810 int64_t reordered_opaque;\
811\
812 /**\
813 * hardware accelerator private data (FFmpeg allocated)\
814 * - encoding: unused\
815 * - decoding: Set by libavcodec\
816 */\
817 void *hwaccel_picture_private;\
818
819
820#define FF_QSCALE_TYPE_MPEG1 0
821#define FF_QSCALE_TYPE_MPEG2 1
822#define FF_QSCALE_TYPE_H264 2
823
824#define FF_BUFFER_TYPE_INTERNAL 1
825#define FF_BUFFER_TYPE_USER 2 ///< direct rendering buffers (image is (de)allocated by user)
826#define FF_BUFFER_TYPE_SHARED 4 ///< Buffer from somewhere else; don't deallocate image (data/base), all other tables are not shared.
827#define FF_BUFFER_TYPE_COPY 8 ///< Just a (modified) copy of some other buffer, don't deallocate anything.
828
829
830#define FF_I_TYPE 1 ///< Intra
831#define FF_P_TYPE 2 ///< Predicted
832#define FF_B_TYPE 3 ///< Bi-dir predicted
833#define FF_S_TYPE 4 ///< S(GMC)-VOP MPEG4
834#define FF_SI_TYPE 5 ///< Switching Intra
835#define FF_SP_TYPE 6 ///< Switching Predicted
836#define FF_BI_TYPE 7
837
838#define FF_BUFFER_HINTS_VALID 0x01 // Buffer hints value is meaningful (if 0 ignore).
839#define FF_BUFFER_HINTS_READABLE 0x02 // Codec will read from buffer.
840#define FF_BUFFER_HINTS_PRESERVE 0x04 // User must not alter buffer content.
841#define FF_BUFFER_HINTS_REUSABLE 0x08 // Codec will reuse the buffer (update).
842
843/**
844 * Audio Video Frame.
845 * New fields can be added to the end of FF_COMMON_FRAME with minor version
846 * bumps.
847 * Removal, reordering and changes to existing fields require a major
848 * version bump. No fields should be added into AVFrame before or after
849 * FF_COMMON_FRAME!
850 * sizeof(AVFrame) must not be used outside libav*.
851 */
852typedef struct AVFrame {
853 FF_COMMON_FRAME
854} AVFrame;
855#endif/* MT : DELETE THIS LINE.*/
856/**
857 * main external API structure.
858 * New fields can be added to the end with minor version bumps.
859 * Removal, reordering and changes to existing fields require a major
860 * version bump.
861 * sizeof(AVCodecContext) must not be used outside libav*.
862 */
863typedef struct AVCodecContext {
864 /**
865 * information on struct for av_log
866 * - set by avcodec_alloc_context
867 */
868 const AVClass *av_class;
869 /**
870 * the average bitrate
871 * - encoding: Set by user; unused for constant quantizer encoding.
872 * - decoding: Set by libavcodec. 0 or some bitrate if this info is available in the stream.
873 */
874 int bit_rate;
875
876 /**
877 * number of bits the bitstream is allowed to diverge from the reference.
878 * the reference can be CBR (for CBR pass1) or VBR (for pass2)
879 * - encoding: Set by user; unused for constant quantizer encoding.
880 * - decoding: unused
881 */
882//MT: int bit_rate_tolerance;
883
884 /**
885 * CODEC_FLAG_*.
886 * - encoding: Set by user.
887 * - decoding: Set by user.
888 */
889//MT: int flags;
890
891 /**
892 * Some codecs need additional format info. It is stored here.
893 * If any muxer uses this then ALL demuxers/parsers AND encoders for the
894 * specific codec MUST set it correctly otherwise stream copy breaks.
895 * In general use of this field by muxers is not recommanded.
896 * - encoding: Set by libavcodec.
897 * - decoding: Set by libavcodec. (FIXME: Is this OK?)
898 */
899//MT: int sub_id;
900
901 /**
902 * Motion estimation algorithm used for video coding.
903 * 1 (zero), 2 (full), 3 (log), 4 (phods), 5 (epzs), 6 (x1), 7 (hex),
904 * 8 (umh), 9 (iter), 10 (tesa) [7, 8, 10 are x264 specific, 9 is snow specific]
905 * - encoding: MUST be set by user.
906 * - decoding: unused
907 */
908//MT: int me_method;
909
910 /**
911 * some codecs need / can use extradata like Huffman tables.
912 * mjpeg: Huffman tables
913 * rv10: additional flags
914 * mpeg4: global headers (they can be in the bitstream or here)
915 * The allocated memory should be FF_INPUT_BUFFER_PADDING_SIZE bytes larger
916 * than extradata_size to avoid prolems if it is read with the bitstream reader.
917 * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
918 * - encoding: Set/allocated/freed by libavcodec.
919 * - decoding: Set/allocated/freed by user.
920 */
921 uint8_t *extradata;
922 int extradata_size;
923
924 /**
925 * This is the fundamental unit of time (in seconds) in terms
926 * of which frame timestamps are represented. For fixed-fps content,
927 * timebase should be 1/framerate and timestamp increments should be
928 * identically 1.
929 * - encoding: MUST be set by user.
930 * - decoding: Set by libavcodec.
931 */
932//MT: AVRational time_base;
933
934 /* video only */
935 /**
936 * picture width / height.
937 * - encoding: MUST be set by user.
938 * - decoding: Set by libavcodec.
939 * Note: For compatibility it is possible to set this instead of
940 * coded_width/height before decoding.
941 */
942//MT: int width, height;
943
944//MT:#define FF_ASPECT_EXTENDED 15
945
946 /**
947 * the number of pictures in a group of pictures, or 0 for intra_only
948 * - encoding: Set by user.
949 * - decoding: unused
950 */
951//MT: int gop_size;
952
953 /**
954 * Pixel format, see PIX_FMT_xxx.
955 * - encoding: Set by user.
956 * - decoding: Set by libavcodec.
957 */
958 //MT: enum PixelFormat pix_fmt;
959
960 /**
961 * Frame rate emulation. If not zero, the lower layer (i.e. format handler)
962 * has to read frames at native frame rate.
963 * - encoding: Set by user.
964 * - decoding: unused
965 */
966//MT: int rate_emu;
967
968 /**
969 * If non NULL, 'draw_horiz_band' is called by the libavcodec
970 * decoder to draw a horizontal band. It improves cache usage. Not
971 * all codecs can do that. You must check the codec capabilities
972 * beforehand.
973 * The function is also used by hardware acceleration APIs.
974 * It is called at least once during frame decoding to pass
975 * the data needed for hardware render.
976 * In that mode instead of pixel data, AVFrame points to
977 * a structure specific to the acceleration API. The application
978 * reads the structure and can change some fields to indicate progress
979 * or mark state.
980 * - encoding: unused
981 * - decoding: Set by user.
982 * @param height the height of the slice
983 * @param y the y position of the slice
984 * @param type 1->top field, 2->bottom field, 3->frame
985 * @param offset offset into the AVFrame.data from which the slice should be read
986 */
987 //MT: void (*draw_horiz_band)(struct AVCodecContext *s,
988 //Mt: const AVFrame *src, int offset[4],
989 //MT: int y, int type, int height);
990
991 /* audio only */
992 int sample_rate; ///< samples per second
993 int channels; ///< number of audio channels
994
995 /**
996 * audio sample format
997 * - encoding: Set by user.
998 * - decoding: Set by libavcodec.
999 */
1000 enum SampleFormat sample_fmt; ///< sample format, currently unused
1001
1002 /* The following data should not be initialized. */
1003 /**
1004 * Samples per packet, initialized when calling 'init'.
1005 */
1006 int frame_size;
1007 int frame_number; ///< audio or video frame number
1008//MT: int real_pict_num; ///< Returns the real picture number of previous encoded frame.
1009
1010 /**
1011 * Number of frames the decoded output will be delayed relative to
1012 * the encoded input.
1013 * - encoding: Set by libavcodec.
1014 * - decoding: unused
1015 */
1016//MT: int delay;
1017
1018 /* - encoding parameters */
1019//MT: float qcompress; ///< amount of qscale change between easy & hard scenes (0.0-1.0)
1020//MT: float qblur; ///< amount of qscale smoothing over time (0.0-1.0)
1021
1022 /**
1023 * minimum quantizer
1024 * - encoding: Set by user.
1025 * - decoding: unused
1026 */
1027//MT: int qmin;
1028
1029 /**
1030 * maximum quantizer
1031 * - encoding: Set by user.
1032 * - decoding: unused
1033 */
1034//MT: int qmax;
1035
1036 /**
1037 * maximum quantizer difference between frames
1038 * - encoding: Set by user.
1039 * - decoding: unused
1040 */
1041//MT: int max_qdiff;
1042
1043 /**
1044 * maximum number of B-frames between non-B-frames
1045 * Note: The output will be delayed by max_b_frames+1 relative to the input.
1046 * - encoding: Set by user.
1047 * - decoding: unused
1048 */
1049//MT: int max_b_frames;
1050
1051 /**
1052 * qscale factor between IP and B-frames
1053 * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
1054 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1055 * - encoding: Set by user.
1056 * - decoding: unused
1057 */
1058//MT: float b_quant_factor;
1059
1060 /** obsolete FIXME remove */
1061//MT: int rc_strategy;
1062//MT:#define FF_RC_STRATEGY_XVID 1
1063
1064//MT: int b_frame_strategy;
1065
1066 /**
1067 * hurry up amount
1068 * - encoding: unused
1069 * - decoding: Set by user. 1-> Skip B-frames, 2-> Skip IDCT/dequant too, 5-> Skip everything except header
1070 * @deprecated Deprecated in favor of skip_idct and skip_frame.
1071 */
1072//MT: int hurry_up;
1073
1074 struct AVCodec *codec;
1075
1076 void *priv_data;
1077
1078//MT: int rtp_payload_size; /* The size of the RTP payload: the coder will */
1079 /* do its best to deliver a chunk with size */
1080 /* below rtp_payload_size, the chunk will start */
1081 /* with a start code on some codecs like H.263. */
1082 /* This doesn't take account of any particular */
1083 /* headers inside the transmitted RTP payload. */
1084
1085
1086 /* The RTP callback: This function is called */
1087 /* every time the encoder has a packet to send. */
1088 /* It depends on the encoder if the data starts */
1089 /* with a Start Code (it should). H.263 does. */
1090 /* mb_nb contains the number of macroblocks */
1091 /* encoded in the RTP payload. */
1092//MT: void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
1093
1094 /* statistics, used for 2-pass encoding */
1095//MT: int mv_bits;
1096//MT: int header_bits;
1097//MT: int i_tex_bits;
1098 //MT: int p_tex_bits;
1099//MT: int i_count;
1100 //MT: int p_count;
1101 //MT: int skip_count;
1102 //MT: int misc_bits;
1103
1104 /**
1105 * number of bits used for the previously encoded frame
1106 * - encoding: Set by libavcodec.
1107 * - decoding: unused
1108 */
1109//MT: int frame_bits;
1110
1111 /**
1112 * Private data of the user, can be used to carry app specific stuff.
1113 * - encoding: Set by user.
1114 * - decoding: Set by user.
1115 */
1116//MT: void *opaque;
1117
1118 char codec_name[32];
1119 enum CodecType codec_type; /* see CODEC_TYPE_xxx */
1120 enum CodecID codec_id; /* see CODEC_ID_xxx */
1121
1122 /**
1123 * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1124 * This is used to work around some encoder bugs.
1125 * A demuxer should set this to what is stored in the field used to identify the codec.
1126 * If there are multiple such fields in a container then the demuxer should choose the one
1127 * which maximizes the information about the used codec.
1128 * If the codec tag field in a container is larger then 32 bits then the demuxer should
1129 * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
1130 * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
1131 * first.
1132 * - encoding: Set by user, if not then the default based on codec_id will be used.
1133 * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1134 */
1135//MT: unsigned int codec_tag;
1136
1137 /**
1138 * Work around bugs in encoders which sometimes cannot be detected automatically.
1139 * - encoding: Set by user
1140 * - decoding: Set by user
1141 */
1142//MT: int workaround_bugs;
1143#define FF_BUG_AUTODETECT 1 ///< autodetection
1144#define FF_BUG_OLD_MSMPEG4 2
1145#define FF_BUG_XVID_ILACE 4
1146#define FF_BUG_UMP4 8
1147#define FF_BUG_NO_PADDING 16
1148#define FF_BUG_AMV 32
1149#define FF_BUG_AC_VLC 0 ///< Will be removed, libavcodec can now handle these non-compliant files by default.
1150#define FF_BUG_QPEL_CHROMA 64
1151#define FF_BUG_STD_QPEL 128
1152#define FF_BUG_QPEL_CHROMA2 256
1153#define FF_BUG_DIRECT_BLOCKSIZE 512
1154#define FF_BUG_EDGE 1024
1155#define FF_BUG_HPEL_CHROMA 2048
1156#define FF_BUG_DC_CLIP 4096
1157#define FF_BUG_MS 8192 ///< Work around various bugs in Microsoft's broken decoders.
1158//#define FF_BUG_FAKE_SCALABILITY 16 //Autodetection should work 100%.
1159
1160 /**
1161 * luma single coefficient elimination threshold
1162 * - encoding: Set by user.
1163 * - decoding: unused
1164 */
1165//MT: int luma_elim_threshold;
1166
1167 /**
1168 * chroma single coeff elimination threshold
1169 * - encoding: Set by user.
1170 * - decoding: unused
1171 */
1172 //MT: int chroma_elim_threshold;
1173
1174 /**
1175 * strictly follow the standard (MPEG4, ...).
1176 * - encoding: Set by user.
1177 * - decoding: Set by user.
1178 * Setting this to STRICT or higher means the encoder and decoder will
1179 * generally do stupid things. While setting it to inofficial or lower
1180 * will mean the encoder might use things that are not supported by all
1181 * spec compliant decoders. Decoders make no difference between normal,
1182 * inofficial and experimental, that is they always try to decode things
1183 * when they can unless they are explicitly asked to behave stupid
1184 * (=strictly conform to the specs)
1185 */
1186//MT: int strict_std_compliance;
1187#define FF_COMPLIANCE_VERY_STRICT 2 ///< Strictly conform to a older more strict version of the spec or reference software.
1188#define FF_COMPLIANCE_STRICT 1 ///< Strictly conform to all the things in the spec no matter what consequences.
1189#define FF_COMPLIANCE_NORMAL 0
1190#define FF_COMPLIANCE_INOFFICIAL -1 ///< Allow inofficial extensions.
1191#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
1192
1193 /**
1194 * qscale offset between IP and B-frames
1195 * - encoding: Set by user.
1196 * - decoding: unused
1197 */
1198//MT: float b_quant_offset;
1199
1200 /**
1201 * Error recognization; higher values will detect more errors but may
1202 * misdetect some more or less valid parts as errors.
1203 * - encoding: unused
1204 * - decoding: Set by user.
1205 */
1206//MT: int error_recognition;
1207#define FF_ER_CAREFUL 1
1208#define FF_ER_COMPLIANT 2
1209#define FF_ER_AGGRESSIVE 3
1210#define FF_ER_VERY_AGGRESSIVE 4
1211
1212 /**
1213 * Called at the beginning of each frame to get a buffer for it.
1214 * If pic.reference is set then the frame will be read later by libavcodec.
1215 * avcodec_align_dimensions() should be used to find the required width and
1216 * height, as they normally need to be rounded up to the next multiple of 16.
1217 * - encoding: unused
1218 * - decoding: Set by libavcodec., user can override.
1219 */
1220 //MT: int (*get_buffer)(struct AVCodecContext *c, AVFrame *pic);
1221
1222 /**
1223 * Called to release buffers which were allocated with get_buffer.
1224 * A released buffer can be reused in get_buffer().
1225 * pic.data[*] must be set to NULL.
1226 * - encoding: unused
1227 * - decoding: Set by libavcodec., user can override.
1228 */
1229//MT: void (*release_buffer)(struct AVCodecContext *c, AVFrame *pic);
1230
1231 /**
1232 * Size of the frame reordering buffer in the decoder.
1233 * For MPEG-2 it is 1 IPB or 0 low delay IP.
1234 * - encoding: Set by libavcodec.
1235 * - decoding: Set by libavcodec.
1236 */
1237//MT: int has_b_frames;
1238
1239 /**
1240 * number of bytes per packet if constant and known or 0
1241 * Used by some WAV based audio codecs.
1242 */
1243 int block_align;
1244
1245//MT: int parse_only; /* - decoding only: If true, only parsing is done
1246 /*(function avcodec_parse_frame()). The frame
1247 data is returned. Only MPEG codecs support this now. */
1248
1249 /**
1250 * 0-> h263 quant 1-> mpeg quant
1251 * - encoding: Set by user.
1252 * - decoding: unused
1253 */
1254//MT: int mpeg_quant;
1255
1256 /**
1257 * pass1 encoding statistics output buffer
1258 * - encoding: Set by libavcodec.
1259 * - decoding: unused
1260 */
1261//MT: char *stats_out;
1262
1263 /**
1264 * pass2 encoding statistics input buffer
1265 * Concatenated stuff from stats_out of pass1 should be placed here.
1266 * - encoding: Allocated/set/freed by user.
1267 * - decoding: unused
1268 */
1269//MT: char *stats_in;
1270
1271 /**
1272 * ratecontrol qmin qmax limiting method
1273 * 0-> clipping, 1-> use a nice continous function to limit qscale wthin qmin/qmax.
1274 * - encoding: Set by user.
1275 * - decoding: unused
1276 */
1277//MT: float rc_qsquish;
1278
1279//MT: float rc_qmod_amp;
1280 //MT: int rc_qmod_freq;
1281
1282 /**
1283 * ratecontrol override, see RcOverride
1284 * - encoding: Allocated/set/freed by user.
1285 * - decoding: unused
1286 */
1287 //MT: RcOverride *rc_override;
1288 //MT: int rc_override_count;
1289
1290 /**
1291 * rate control equation
1292 * - encoding: Set by user
1293 * - decoding: unused
1294 */
1295//MT: const char *rc_eq;
1296
1297 /**
1298 * maximum bitrate
1299 * - encoding: Set by user.
1300 * - decoding: unused
1301 */
1302//MT: int rc_max_rate;
1303
1304 /**
1305 * minimum bitrate
1306 * - encoding: Set by user.
1307 * - decoding: unused
1308 */
1309//MT: int rc_min_rate;
1310
1311 /**
1312 * decoder bitstream buffer size
1313 * - encoding: Set by user.
1314 * - decoding: unused
1315 */
1316//MT: int rc_buffer_size;
1317 //MT: float rc_buffer_aggressivity;
1318
1319 /**
1320 * qscale factor between P and I-frames
1321 * If > 0 then the last p frame quantizer will be used (q= lastp_q*factor+offset).
1322 * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
1323 * - encoding: Set by user.
1324 * - decoding: unused
1325 */
1326//MT: float i_quant_factor;
1327
1328 /**
1329 * qscale offset between P and I-frames
1330 * - encoding: Set by user.
1331 * - decoding: unused
1332 */
1333//MT: float i_quant_offset;
1334
1335 /**
1336 * initial complexity for pass1 ratecontrol
1337 * - encoding: Set by user.
1338 * - decoding: unused
1339 */
1340//MT: float rc_initial_cplx;
1341
1342 /**
1343 * DCT algorithm, see FF_DCT_* below
1344 * - encoding: Set by user.
1345 * - decoding: unused
1346 */
1347 //MT: int dct_algo;
1348#define FF_DCT_AUTO 0
1349#define FF_DCT_FASTINT 1
1350#define FF_DCT_INT 2
1351#define FF_DCT_MMX 3
1352#define FF_DCT_MLIB 4
1353#define FF_DCT_ALTIVEC 5
1354#define FF_DCT_FAAN 6
1355
1356 /**
1357 * luminance masking (0-> disabled)
1358 * - encoding: Set by user.
1359 * - decoding: unused
1360 */
1361 //MT: float lumi_masking;
1362
1363 /**
1364 * temporary complexity masking (0-> disabled)
1365 * - encoding: Set by user.
1366 * - decoding: unused
1367 */
1368 //MT: float temporal_cplx_masking;
1369
1370 /**
1371 * spatial complexity masking (0-> disabled)
1372 * - encoding: Set by user.
1373 * - decoding: unused
1374 */
1375 //MT: float spatial_cplx_masking;
1376
1377 /**
1378 * p block masking (0-> disabled)
1379 * - encoding: Set by user.
1380 * - decoding: unused
1381 */
1382 //MT: float p_masking;
1383
1384 /**
1385 * darkness masking (0-> disabled)
1386 * - encoding: Set by user.
1387 * - decoding: unused
1388 */
1389 //MT: float dark_masking;
1390
1391 /**
1392 * IDCT algorithm, see FF_IDCT_* below.
1393 * - encoding: Set by user.
1394 * - decoding: Set by user.
1395 */
1396 //MT: int idct_algo;
1397#define FF_IDCT_AUTO 0
1398#define FF_IDCT_INT 1
1399#define FF_IDCT_SIMPLE 2
1400#define FF_IDCT_SIMPLEMMX 3
1401#define FF_IDCT_LIBMPEG2MMX 4
1402#define FF_IDCT_PS2 5
1403#define FF_IDCT_MLIB 6
1404#define FF_IDCT_ARM 7
1405#define FF_IDCT_ALTIVEC 8
1406#define FF_IDCT_SH4 9
1407#define FF_IDCT_SIMPLEARM 10
1408#define FF_IDCT_H264 11
1409#define FF_IDCT_VP3 12
1410#define FF_IDCT_IPP 13
1411#define FF_IDCT_XVIDMMX 14
1412#define FF_IDCT_CAVS 15
1413#define FF_IDCT_SIMPLEARMV5TE 16
1414#define FF_IDCT_SIMPLEARMV6 17
1415#define FF_IDCT_SIMPLEVIS 18
1416#define FF_IDCT_WMV2 19
1417#define FF_IDCT_FAAN 20
1418#define FF_IDCT_EA 21
1419#define FF_IDCT_SIMPLENEON 22
1420#define FF_IDCT_SIMPLEALPHA 23
1421
1422 /**
1423 * slice count
1424 * - encoding: Set by libavcodec.
1425 * - decoding: Set by user (or 0).
1426 */
1427//MT: int slice_count;
1428 /**
1429 * slice offsets in the frame in bytes
1430 * - encoding: Set/allocated by libavcodec.
1431 * - decoding: Set/allocated by user (or NULL).
1432 */
1433 //MT: int *slice_offset;
1434
1435 /**
1436 * error concealment flags
1437 * - encoding: unused
1438 * - decoding: Set by user.
1439 */
1440//MT: int error_concealment;
1441#define FF_EC_GUESS_MVS 1
1442#define FF_EC_DEBLOCK 2
1443
1444 /**
1445 * dsp_mask could be add used to disable unwanted CPU features
1446 * CPU features (i.e. MMX, SSE. ...)
1447 *
1448 * With the FORCE flag you may instead enable given CPU features.
1449 * (Dangerous: Usable in case of misdetection, improper usage however will
1450 * result into program crash.)
1451 */
1452 //MT: unsigned dsp_mask;
1453#define FF_MM_FORCE 0x80000000 /* Force usage of selected flags (OR) */
1454 /* lower 16 bits - CPU features */
1455#define FF_MM_MMX 0x0001 ///< standard MMX
1456#define FF_MM_3DNOW 0x0004 ///< AMD 3DNOW
1457#define FF_MM_MMXEXT 0x0002 ///< SSE integer functions or AMD MMX ext
1458#define FF_MM_SSE 0x0008 ///< SSE functions
1459#define FF_MM_SSE2 0x0010 ///< PIV SSE2 functions
1460#define FF_MM_3DNOWEXT 0x0020 ///< AMD 3DNowExt
1461#define FF_MM_SSE3 0x0040 ///< Prescott SSE3 functions
1462#define FF_MM_SSSE3 0x0080 ///< Conroe SSSE3 functions
1463#define FF_MM_IWMMXT 0x0100 ///< XScale IWMMXT
1464#define FF_MM_ALTIVEC 0x0001 ///< standard AltiVec
1465
1466 /**
1467 * bits per sample/pixel from the demuxer (needed for huffyuv).
1468 * - encoding: Set by libavcodec.
1469 * - decoding: Set by user.
1470 */
1471 //MT: int bits_per_coded_sample;
1472
1473 /**
1474 * prediction method (needed for huffyuv)
1475 * - encoding: Set by user.
1476 * - decoding: unused
1477 */
1478 //MT: int prediction_method;
1479#define FF_PRED_LEFT 0
1480#define FF_PRED_PLANE 1
1481#define FF_PRED_MEDIAN 2
1482
1483 /**
1484 * sample aspect ratio (0 if unknown)
1485 * That is the width of a pixel divided by the height of the pixel.
1486 * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
1487 * - encoding: Set by user.
1488 * - decoding: Set by libavcodec.
1489 */
1490 //MT: AVRational sample_aspect_ratio;
1491
1492 /**
1493 * the picture in the bitstream
1494 * - encoding: Set by libavcodec.
1495 * - decoding: Set by libavcodec.
1496 */
1497 //MT: AVFrame *coded_frame;
1498
1499 /**
1500 * debug
1501 * - encoding: Set by user.
1502 * - decoding: Set by user.
1503 */
1504 //MT: int debug;
1505#define FF_DEBUG_PICT_INFO 1
1506#define FF_DEBUG_RC 2
1507#define FF_DEBUG_BITSTREAM 4
1508#define FF_DEBUG_MB_TYPE 8
1509#define FF_DEBUG_QP 16
1510#define FF_DEBUG_MV 32
1511#define FF_DEBUG_DCT_COEFF 0x00000040
1512#define FF_DEBUG_SKIP 0x00000080
1513#define FF_DEBUG_STARTCODE 0x00000100
1514#define FF_DEBUG_PTS 0x00000200
1515#define FF_DEBUG_ER 0x00000400
1516#define FF_DEBUG_MMCO 0x00000800
1517#define FF_DEBUG_BUGS 0x00001000
1518#define FF_DEBUG_VIS_QP 0x00002000
1519#define FF_DEBUG_VIS_MB_TYPE 0x00004000
1520#define FF_DEBUG_BUFFERS 0x00008000
1521
1522 /**
1523 * debug
1524 * - encoding: Set by user.
1525 * - decoding: Set by user.
1526 */
1527 //MT: int debug_mv;
1528#define FF_DEBUG_VIS_MV_P_FOR 0x00000001 //visualize forward predicted MVs of P frames
1529#define FF_DEBUG_VIS_MV_B_FOR 0x00000002 //visualize forward predicted MVs of B frames
1530#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
1531
1532 /**
1533 * error
1534 * - encoding: Set by libavcodec if flags&CODEC_FLAG_PSNR.
1535 * - decoding: unused
1536 */
1537 uint64_t error[4];
1538
1539 /**
1540 * minimum MB quantizer
1541 * - encoding: unused
1542 * - decoding: unused
1543 */
1544//MT: int mb_qmin;
1545
1546 /**
1547 * maximum MB quantizer
1548 * - encoding: unused
1549 * - decoding: unused
1550 */
1551//MT: int mb_qmax;
1552
1553 /**
1554 * motion estimation comparison function
1555 * - encoding: Set by user.
1556 * - decoding: unused
1557 */
1558 //MT: int me_cmp;
1559 /**
1560 * subpixel motion estimation comparison function
1561 * - encoding: Set by user.
1562 * - decoding: unused
1563 */
1564 //MT: int me_sub_cmp;
1565 /**
1566 * macroblock comparison function (not supported yet)
1567 * - encoding: Set by user.
1568 * - decoding: unused
1569 */
1570 //MT: int mb_cmp;
1571 /**
1572 * interlaced DCT comparison function
1573 * - encoding: Set by user.
1574 * - decoding: unused
1575 */
1576 //MT: int ildct_cmp;
1577#define FF_CMP_SAD 0
1578#define FF_CMP_SSE 1
1579#define FF_CMP_SATD 2
1580#define FF_CMP_DCT 3
1581#define FF_CMP_PSNR 4
1582#define FF_CMP_BIT 5
1583#define FF_CMP_RD 6
1584#define FF_CMP_ZERO 7
1585#define FF_CMP_VSAD 8
1586#define FF_CMP_VSSE 9
1587#define FF_CMP_NSSE 10
1588#define FF_CMP_W53 11
1589#define FF_CMP_W97 12
1590#define FF_CMP_DCTMAX 13
1591#define FF_CMP_DCT264 14
1592#define FF_CMP_CHROMA 256
1593
1594 /**
1595 * ME diamond size & shape
1596 * - encoding: Set by user.
1597 * - decoding: unused
1598 */
1599//MT: int dia_size;
1600
1601 /**
1602 * amount of previous MV predictors (2a+1 x 2a+1 square)
1603 * - encoding: Set by user.
1604 * - decoding: unused
1605 */
1606 //MT: int last_predictor_count;
1607
1608 /**
1609 * prepass for motion estimation
1610 * - encoding: Set by user.
1611 * - decoding: unused
1612 */
1613 //MT: int pre_me;
1614
1615 /**
1616 * motion estimation prepass comparison function
1617 * - encoding: Set by user.
1618 * - decoding: unused
1619 */
1620 //MT: int me_pre_cmp;
1621
1622 /**
1623 * ME prepass diamond size & shape
1624 * - encoding: Set by user.
1625 * - decoding: unused
1626 */
1627 //MT: int pre_dia_size;
1628
1629 /**
1630 * subpel ME quality
1631 * - encoding: Set by user.
1632 * - decoding: unused
1633 */
1634 //MT: int me_subpel_quality;
1635
1636 /**
1637 * callback to negotiate the pixelFormat
1638 * @param fmt is the list of formats which are supported by the codec,
1639 * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
1640 * The first is always the native one.
1641 * @return the chosen format
1642 * - encoding: unused
1643 * - decoding: Set by user, if not set the native format will be chosen.
1644 */
1645 //MT: enum PixelFormat (*get_format)(struct AVCodecContext *s, const enum PixelFormat * fmt);
1646
1647 /**
1648 * DTG active format information (additional aspect ratio
1649 * information only used in DVB MPEG-2 transport streams)
1650 * 0 if not set.
1651 *
1652 * - encoding: unused
1653 * - decoding: Set by decoder.
1654 */
1655 //MT: int dtg_active_format;
1656#define FF_DTG_AFD_SAME 8
1657#define FF_DTG_AFD_4_3 9
1658#define FF_DTG_AFD_16_9 10
1659#define FF_DTG_AFD_14_9 11
1660#define FF_DTG_AFD_4_3_SP_14_9 13
1661#define FF_DTG_AFD_16_9_SP_14_9 14
1662#define FF_DTG_AFD_SP_4_3 15
1663
1664 /**
1665 * maximum motion estimation search range in subpel units
1666 * If 0 then no limit.
1667 *
1668 * - encoding: Set by user.
1669 * - decoding: unused
1670 */
1671 //MT: int me_range;
1672
1673 /**
1674 * intra quantizer bias
1675 * - encoding: Set by user.
1676 * - decoding: unused
1677 */
1678 //MT: int intra_quant_bias;
1679#define FF_DEFAULT_QUANT_BIAS 999999
1680
1681 /**
1682 * inter quantizer bias
1683 * - encoding: Set by user.
1684 * - decoding: unused
1685 */
1686 //MT: int inter_quant_bias;
1687
1688 /**
1689 * color table ID
1690 * - encoding: unused
1691 * - decoding: Which clrtable should be used for 8bit RGB images.
1692 * Tables have to be stored somewhere. FIXME
1693 */
1694 //MT: int color_table_id;
1695
1696 /**
1697 * internal_buffer count
1698 * Don't touch, used by libavcodec default_get_buffer().
1699 */
1700 //MT: int internal_buffer_count;
1701
1702 /**
1703 * internal_buffers
1704 * Don't touch, used by libavcodec default_get_buffer().
1705 */
1706 void *internal_buffer;
1707
1708#define FF_LAMBDA_SHIFT 7
1709#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
1710#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
1711#define FF_LAMBDA_MAX (256*128-1)
1712
1713#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
1714 /**
1715 * Global quality for codecs which cannot change it per frame.
1716 * This should be proportional to MPEG-1/2/4 qscale.
1717 * - encoding: Set by user.
1718 * - decoding: unused
1719 */
1720 //MT: int global_quality;
1721
1722#define FF_CODER_TYPE_VLC 0
1723#define FF_CODER_TYPE_AC 1
1724#define FF_CODER_TYPE_RAW 2
1725#define FF_CODER_TYPE_RLE 3
1726#define FF_CODER_TYPE_DEFLATE 4
1727 /**
1728 * coder type
1729 * - encoding: Set by user.
1730 * - decoding: unused
1731 */
1732 //MT: int coder_type;
1733
1734 /**
1735 * context model
1736 * - encoding: Set by user.
1737 * - decoding: unused
1738 */
1739 //MT: int context_model;
1740#if 0
1741 /**
1742 *
1743 * - encoding: unused
1744 * - decoding: Set by user.
1745 */
1746 uint8_t * (*realloc)(struct AVCodecContext *s, uint8_t *buf, int buf_size);
1747#endif
1748
1749 /**
1750 * slice flags
1751 * - encoding: unused
1752 * - decoding: Set by user.
1753 */
1754 //MT: int slice_flags;
1755#define SLICE_FLAG_CODED_ORDER 0x0001 ///< draw_horiz_band() is called in coded order instead of display
1756#define SLICE_FLAG_ALLOW_FIELD 0x0002 ///< allow draw_horiz_band() with field slices (MPEG2 field pics)
1757#define SLICE_FLAG_ALLOW_PLANE 0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
1758
1759 /**
1760 * XVideo Motion Acceleration
1761 * - encoding: forbidden
1762 * - decoding: set by decoder
1763 */
1764//MT: int xvmc_acceleration;
1765
1766 /**
1767 * macroblock decision mode
1768 * - encoding: Set by user.
1769 * - decoding: unused
1770 */
1771 //MT: int mb_decision;
1772#define FF_MB_DECISION_SIMPLE 0 ///< uses mb_cmp
1773#define FF_MB_DECISION_BITS 1 ///< chooses the one which needs the fewest bits
1774#define FF_MB_DECISION_RD 2 ///< rate distortion
1775
1776 /**
1777 * custom intra quantization matrix
1778 * - encoding: Set by user, can be NULL.
1779 * - decoding: Set by libavcodec.
1780 */
1781 //MT: uint16_t *intra_matrix;
1782
1783 /**
1784 * custom inter quantization matrix
1785 * - encoding: Set by user, can be NULL.
1786 * - decoding: Set by libavcodec.
1787 */
1788 //MT: uint16_t *inter_matrix;
1789
1790 /**
1791 * fourcc from the AVI stream header (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
1792 * This is used to work around some encoder bugs.
1793 * - encoding: unused
1794 * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
1795 */
1796 //MT: unsigned int stream_codec_tag;
1797
1798 /**
1799 * scene change detection threshold
1800 * 0 is default, larger means fewer detected scene changes.
1801 * - encoding: Set by user.
1802 * - decoding: unused
1803 */
1804//MT: int scenechange_threshold;
1805
1806 /**
1807 * minimum Lagrange multipler
1808 * - encoding: Set by user.
1809 * - decoding: unused
1810 */
1811//MT: int lmin;
1812
1813 /**
1814 * maximum Lagrange multipler
1815 * - encoding: Set by user.
1816 * - decoding: unused
1817 */
1818 //MT: int lmax;
1819
1820 /**
1821 * palette control structure
1822 * - encoding: ??? (no palette-enabled encoder yet)
1823 * - decoding: Set by user.
1824 */
1825 //MT: struct AVPaletteControl *palctrl;
1826
1827 /**
1828 * noise reduction strength
1829 * - encoding: Set by user.
1830 * - decoding: unused
1831 */
1832 //MT: int noise_reduction;
1833
1834 /**
1835 * Called at the beginning of a frame to get cr buffer for it.
1836 * Buffer type (size, hints) must be the same. libavcodec won't check it.
1837 * libavcodec will pass previous buffer in pic, function should return
1838 * same buffer or new buffer with old frame "painted" into it.
1839 * If pic.data[0] == NULL must behave like get_buffer().
1840 * - encoding: unused
1841 * - decoding: Set by libavcodec., user can override
1842 */
1843//MT: int (*reget_buffer)(struct AVCodecContext *c, AVFrame *pic);
1844
1845 /**
1846 * Number of bits which should be loaded into the rc buffer before decoding starts.
1847 * - encoding: Set by user.
1848 * - decoding: unused
1849 */
1850 //MT: int rc_initial_buffer_occupancy;
1851
1852 /**
1853 *
1854 * - encoding: Set by user.
1855 * - decoding: unused
1856 */
1857//MT: int inter_threshold;
1858
1859 /**
1860 * CODEC_FLAG2_*
1861 * - encoding: Set by user.
1862 * - decoding: Set by user.
1863 */
1864 //MT: int flags2;
1865
1866 /**
1867 * Simulates errors in the bitstream to test error concealment.
1868 * - encoding: Set by user.
1869 * - decoding: unused
1870 */
1871//MT: int error_rate;
1872
1873 /**
1874 * MP3 antialias algorithm, see FF_AA_* below.
1875 * - encoding: unused
1876 * - decoding: Set by user.
1877 */
1878 //MT: int antialias_algo;
1879#define FF_AA_AUTO 0
1880#define FF_AA_FASTINT 1 //not implemented yet
1881#define FF_AA_INT 2
1882#define FF_AA_FLOAT 3
1883 /**
1884 * quantizer noise shaping
1885 * - encoding: Set by user.
1886 * - decoding: unused
1887 */
1888 //MT: int quantizer_noise_shaping;
1889
1890 /**
1891 * thread count
1892 * is used to decide how many independent tasks should be passed to execute()
1893 * - encoding: Set by user.
1894 * - decoding: Set by user.
1895 */
1896 //MT: int thread_count;
1897
1898 /**
1899 * The codec may call this to execute several independent things.
1900 * It will return only after finishing all tasks.
1901 * The user may replace this with some multithreaded implementation,
1902 * the default implementation will execute the parts serially.
1903 * @param count the number of things to execute
1904 * - encoding: Set by libavcodec, user can override.
1905 * - decoding: Set by libavcodec, user can override.
1906 */
1907 //MT: int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
1908
1909 /**
1910 * thread opaque
1911 * Can be used by execute() to store some per AVCodecContext stuff.
1912 * - encoding: set by execute()
1913 * - decoding: set by execute()
1914 */
1915 //MT: void *thread_opaque;
1916
1917 /**
1918 * Motion estimation threshold below which no motion estimation is
1919 * performed, but instead the user specified motion vectors are used.
1920 *
1921 * - encoding: Set by user.
1922 * - decoding: unused
1923 */
1924//MT: int me_threshold;
1925
1926 /**
1927 * Macroblock threshold below which the user specified macroblock types will be used.
1928 * - encoding: Set by user.
1929 * - decoding: unused
1930 */
1931 //MT: int mb_threshold;
1932
1933 /**
1934 * precision of the intra DC coefficient - 8
1935 * - encoding: Set by user.
1936 * - decoding: unused
1937 */
1938//MT: int intra_dc_precision;
1939
1940 /**
1941 * noise vs. sse weight for the nsse comparsion function
1942 * - encoding: Set by user.
1943 * - decoding: unused
1944 */
1945//MT: int nsse_weight;
1946
1947 /**
1948 * Number of macroblock rows at the top which are skipped.
1949 * - encoding: unused
1950 * - decoding: Set by user.
1951 */
1952 //MT: int skip_top;
1953
1954 /**
1955 * Number of macroblock rows at the bottom which are skipped.
1956 * - encoding: unused
1957 * - decoding: Set by user.
1958 */
1959 //MT: int skip_bottom;
1960
1961 /**
1962 * profile
1963 * - encoding: Set by user.
1964 * - decoding: Set by libavcodec.
1965 */
1966 //MT: int profile;
1967#define FF_PROFILE_UNKNOWN -99
1968#define FF_PROFILE_AAC_MAIN 0
1969#define FF_PROFILE_AAC_LOW 1
1970#define FF_PROFILE_AAC_SSR 2
1971#define FF_PROFILE_AAC_LTP 3
1972
1973 /**
1974 * level
1975 * - encoding: Set by user.
1976 * - decoding: Set by libavcodec.
1977 */
1978 //MT: int level;
1979#define FF_LEVEL_UNKNOWN -99
1980
1981 /**
1982 * low resolution decoding, 1-> 1/2 size, 2->1/4 size
1983 * - encoding: unused
1984 * - decoding: Set by user.
1985 */
1986 //MT: int lowres;
1987
1988 /**
1989 * Bitstream width / height, may be different from width/height if lowres
1990 * or other things are used.
1991 * - encoding: unused
1992 * - decoding: Set by user before init if known. Codec should override / dynamically change if needed.
1993 */
1994 //MT: int coded_width, coded_height;
1995
1996 /**
1997 * frame skip threshold
1998 * - encoding: Set by user.
1999 * - decoding: unused
2000 */
2001//MT: int frame_skip_threshold;
2002
2003 /**
2004 * frame skip factor
2005 * - encoding: Set by user.
2006 * - decoding: unused
2007 */
2008 //MT: int frame_skip_factor;
2009
2010 /**
2011 * frame skip exponent
2012 * - encoding: Set by user.
2013 * - decoding: unused
2014 */
2015 //MT: int frame_skip_exp;
2016
2017 /**
2018 * frame skip comparison function
2019 * - encoding: Set by user.
2020 * - decoding: unused
2021 */
2022//MT: int frame_skip_cmp;
2023
2024 /**
2025 * Border processing masking, raises the quantizer for mbs on the borders
2026 * of the picture.
2027 * - encoding: Set by user.
2028 * - decoding: unused
2029 */
2030//MT: float border_masking;
2031
2032 /**
2033 * minimum MB lagrange multipler
2034 * - encoding: Set by user.
2035 * - decoding: unused
2036 */
2037//MT: int mb_lmin;
2038
2039 /**
2040 * maximum MB lagrange multipler
2041 * - encoding: Set by user.
2042 * - decoding: unused
2043 */
2044 //MT: int mb_lmax;
2045
2046 /**
2047 *
2048 * - encoding: Set by user.
2049 * - decoding: unused
2050 */
2051 //MT: int me_penalty_compensation;
2052
2053 /**
2054 *
2055 * - encoding: unused
2056 * - decoding: Set by user.
2057 */
2058 //MT: enum AVDiscard skip_loop_filter;
2059
2060 /**
2061 *
2062 * - encoding: unused
2063 * - decoding: Set by user.
2064 */
2065 //MT: enum AVDiscard skip_idct;
2066
2067 /**
2068 *
2069 * - encoding: unused
2070 * - decoding: Set by user.
2071 */
2072 //MT: enum AVDiscard skip_frame;
2073
2074 /**
2075 *
2076 * - encoding: Set by user.
2077 * - decoding: unused
2078 */
2079//MT: int bidir_refine;
2080
2081 /**
2082 *
2083 * - encoding: Set by user.
2084 * - decoding: unused
2085 */
2086 //MT: int brd_scale;
2087
2088 /**
2089 * constant rate factor - quality-based VBR - values ~correspond to qps
2090 * - encoding: Set by user.
2091 * - decoding: unused
2092 */
2093 //MT: float crf;
2094
2095 /**
2096 * constant quantization parameter rate control method
2097 * - encoding: Set by user.
2098 * - decoding: unused
2099 */
2100//MT: int cqp;
2101
2102 /**
2103 * minimum GOP size
2104 * - encoding: Set by user.
2105 * - decoding: unused
2106 */
2107 //MT: int keyint_min;
2108
2109 /**
2110 * number of reference frames
2111 * - encoding: Set by user.
2112 * - decoding: Set by lavc.
2113 */
2114 //MT: int refs;
2115
2116 /**
2117 * chroma qp offset from luma
2118 * - encoding: Set by user.
2119 * - decoding: unused
2120 */
2121 //MT: int chromaoffset;
2122
2123 /**
2124 * Influences how often B-frames are used.
2125 * - encoding: Set by user.
2126 * - decoding: unused
2127 */
2128 //MT: int bframebias;
2129
2130 /**
2131 * trellis RD quantization
2132 * - encoding: Set by user.
2133 * - decoding: unused
2134 */
2135 //MT: int trellis;
2136
2137 /**
2138 * Reduce fluctuations in qp (before curve compression).
2139 * - encoding: Set by user.
2140 * - decoding: unused
2141 */
2142//MT: float complexityblur;
2143
2144 /**
2145 * in-loop deblocking filter alphac0 parameter
2146 * alpha is in the range -6...6
2147 * - encoding: Set by user.
2148 * - decoding: unused
2149 */
2150 //MT: int deblockalpha;
2151
2152 /**
2153 * in-loop deblocking filter beta parameter
2154 * beta is in the range -6...6
2155 * - encoding: Set by user.
2156 * - decoding: unused
2157 */
2158 //MT: int deblockbeta;
2159
2160 /**
2161 * macroblock subpartition sizes to consider - p8x8, p4x4, b8x8, i8x8, i4x4
2162 * - encoding: Set by user.
2163 * - decoding: unused
2164 */
2165 //MT: int partitions;
2166#define X264_PART_I4X4 0x001 /* Analyze i4x4 */
2167#define X264_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */
2168#define X264_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */
2169#define X264_PART_P4X4 0x020 /* Analyze p8x4, p4x8, p4x4 */
2170#define X264_PART_B8X8 0x100 /* Analyze b16x8, b8x16 and b8x8 */
2171
2172 /**
2173 * direct MV prediction mode - 0 (none), 1 (spatial), 2 (temporal), 3 (auto)
2174 * - encoding: Set by user.
2175 * - decoding: unused
2176 */
2177 //MT: int directpred;
2178
2179 /**
2180 * Audio cutoff bandwidth (0 means "automatic")
2181 * - encoding: Set by user.
2182 * - decoding: unused
2183 */
2184 //MT: int cutoff;
2185
2186 /**
2187 * Multiplied by qscale for each frame and added to scene_change_score.
2188 * - encoding: Set by user.
2189 * - decoding: unused
2190 */
2191 //MT: int scenechange_factor;
2192
2193 /**
2194 *
2195 * Note: Value depends upon the compare function used for fullpel ME.
2196 * - encoding: Set by user.
2197 * - decoding: unused
2198 */
2199 //MT: int mv0_threshold;
2200
2201 /**
2202 * Adjusts sensitivity of b_frame_strategy 1.
2203 * - encoding: Set by user.
2204 * - decoding: unused
2205 */
2206 //MT: int b_sensitivity;
2207
2208 /**
2209 * - encoding: Set by user.
2210 * - decoding: unused
2211 */
2212 //MT: int compression_level;
2213#define FF_COMPRESSION_DEFAULT -1
2214
2215 /**
2216 * Sets whether to use LPC mode - used by FLAC encoder.
2217 * - encoding: Set by user.
2218 * - decoding: unused
2219 */
2220//MT: int use_lpc;
2221
2222 /**
2223 * LPC coefficient precision - used by FLAC encoder
2224 * - encoding: Set by user.
2225 * - decoding: unused
2226 */
2227 //MT: int lpc_coeff_precision;
2228
2229 /**
2230 * - encoding: Set by user.
2231 * - decoding: unused
2232 */
2233 //MT: int min_prediction_order;
2234
2235 /**
2236 * - encoding: Set by user.
2237 * - decoding: unused
2238 */
2239//MT: int max_prediction_order;
2240
2241 /**
2242 * search method for selecting prediction order
2243 * - encoding: Set by user.
2244 * - decoding: unused
2245 */
2246//MT: int prediction_order_method;
2247
2248 /**
2249 * - encoding: Set by user.
2250 * - decoding: unused
2251 */
2252 //MT: int min_partition_order;
2253
2254 /**
2255 * - encoding: Set by user.
2256 * - decoding: unused
2257 */
2258 //MT: int max_partition_order;
2259
2260 /**
2261 * GOP timecode frame start number, in non drop frame format
2262 * - encoding: Set by user.
2263 * - decoding: unused
2264 */
2265 //MT: int64_t timecode_frame_start;
2266
2267#if LIBAVCODEC_VERSION_MAJOR < 53
2268 /**
2269 * Decoder should decode to this many channels if it can (0 for default)
2270 * - encoding: unused
2271 * - decoding: Set by user.
2272 * @deprecated Deprecated in favor of request_channel_layout.
2273 */
2274 //MT: int request_channels;
2275#endif
2276
2277 /**
2278 * Percentage of dynamic range compression to be applied by the decoder.
2279 * The default value is 1.0, corresponding to full compression.
2280 * - encoding: unused
2281 * - decoding: Set by user.
2282 */
2283 //MT: float drc_scale;
2284
2285 /**
2286 * opaque 64bit number (generally a PTS) that will be reordered and
2287 * output in AVFrame.reordered_opaque
2288 * - encoding: unused
2289 * - decoding: Set by user.
2290 */
2291 //MT: int64_t reordered_opaque;
2292
2293 /**
2294 * Bits per sample/pixel of internal libavcodec pixel/sample format.
2295 * This field is applicable only when sample_fmt is SAMPLE_FMT_S32.
2296 * - encoding: set by user.
2297 * - decoding: set by libavcodec.
2298 */
2299 //MT: int bits_per_raw_sample;
2300
2301 /**
2302 * Audio channel layout.
2303 * - encoding: set by user.
2304 * - decoding: set by libavcodec.
2305 */
2306 int64_t channel_layout;
2307
2308 /**
2309 * Request decoder to use this channel layout if it can (0 for default)
2310 * - encoding: unused
2311 * - decoding: Set by user.
2312 */
2313//MT: int64_t request_channel_layout;
2314
2315 /**
2316 * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
2317 * - encoding: Set by user.
2318 * - decoding: unused.
2319 */
2320 //MT: float rc_max_available_vbv_use;
2321
2322 /**
2323 * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
2324 * - encoding: Set by user.
2325 * - decoding: unused.
2326 */
2327//MT: float rc_min_vbv_overflow_use;
2328
2329 /**
2330 * Hardware accelerator in use
2331 * - encoding: unused.
2332 * - decoding: Set by libavcodec
2333 */
2334//MT: struct AVHWAccel *hwaccel;
2335
2336 /**
2337 * For some codecs, the time base is closer to the field rate than the frame rate.
2338 * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
2339 * if no telecine is used ...
2340 *
2341 * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
2342 */
2343//MT: int ticks_per_frame;
2344
2345 /**
2346 * Hardware accelerator context.
2347 * For some hardware accelerators, a global context needs to be
2348 * provided by the user. In that case, this holds display-dependent
2349 * data FFmpeg cannot instantiate itself. Please refer to the
2350 * FFmpeg HW accelerator documentation to know how to fill this
2351 * is. e.g. for VA API, this is a struct vaapi_context.
2352 * - encoding: unused
2353 * - decoding: Set by user
2354 */
2355 //MT: void *hwaccel_context;
2356} AVCodecContext;
2357
2358/**
2359 * AVCodec.
2360 */
2361typedef struct AVCodec {
2362 /**
2363 * Name of the codec implementation.
2364 * The name is globally unique among encoders and among decoders (but an
2365 * encoder and a decoder can share the same name).
2366 * This is the primary way to find a codec from the user perspective.
2367 */
2368 const char *name;
2369 enum CodecType type;
2370 enum CodecID id;
2371 int priv_data_size;
2372 int (*init)(AVCodecContext *);
2373 int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
2374 int (*close)(AVCodecContext *);
2375 int (*decode)(AVCodecContext *, void *outdata, int *outdata_size,
2376 const uint8_t *buf, int buf_size);
2377 /**
2378 * Codec capabilities.
2379 * see CODEC_CAP_*
2380 */
2381//MT: int capabilities;
2382//MT: struct AVCodec *next;
2383 /**
2384 * Flush buffers.
2385 * Will be called when seeking
2386 */
2387//MT: void (*flush)(AVCodecContext *);
2388 //MT: const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
2389 //MT: const enum PixelFormat *pix_fmts; ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
2390 /**
2391 * Descriptive name for the codec, meant to be more human readable than \p name.
2392 * You \e should use the NULL_IF_CONFIG_SMALL() macro to define it.
2393 */
2394 const char *long_name;
2395 const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
2396 const enum SampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
2397 const int64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
2398} AVCodec;
2399
2400#if 0 /* MT : DELETE THIS LINE ONLY. */
2401/**
2402 * AVHWAccel.
2403 */
2404typedef struct AVHWAccel {
2405 /**
2406 * Name of the hardware accelerated codec.
2407 * The name is globally unique among encoders and among decoders (but an
2408 * encoder and a decoder can share the same name).
2409 */
2410 const char *name;
2411
2412 /**
2413 * Type of codec implemented by the hardware accelerator.
2414 *
2415 * See CODEC_TYPE_xxx
2416 */
2417 enum CodecType type;
2418
2419 /**
2420 * Codec implemented by the hardware accelerator.
2421 *
2422 * See CODEC_ID_xxx
2423 */
2424 enum CodecID id;
2425
2426 /**
2427 * Supported pixel format.
2428 *
2429 * Only hardware accelerated formats are supported here.
2430 */
2431 enum PixelFormat pix_fmt;
2432
2433 /**
2434 * Hardware accelerated codec capabilities.
2435 * see FF_HWACCEL_CODEC_CAP_*
2436 */
2437 int capabilities;
2438
2439 struct AVHWAccel *next;
2440
2441 /**
2442 * Called at the beginning of each frame or field picture.
2443 *
2444 * Meaningful frame information (codec specific) is guaranteed to
2445 * be parsed at this point. This function is mandatory.
2446 *
2447 * Note that \p buf can be NULL along with \p buf_size set to 0.
2448 * Otherwise, this means the whole frame is available at this point.
2449 *
2450 * @param avctx the codec context
2451 * @param buf the frame data buffer base
2452 * @param buf_size the size of the frame in bytes
2453 * @return zero if successful, a negative value otherwise
2454 */
2455 int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
2456
2457 /**
2458 * Callback for each slice.
2459 *
2460 * Meaningful slice information (codec specific) is guaranteed to
2461 * be parsed at this point. This function is mandatory.
2462 *
2463 * @param avctx the codec context
2464 * @param buf the slice data buffer base
2465 * @param buf_size the size of the slice in bytes
2466 * @return zero if successful, a negative value otherwise
2467 */
2468 int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
2469
2470 /**
2471 * Called at the end of each frame or field picture.
2472 *
2473 * The whole picture is parsed at this point and can now be sent
2474 * to the hardware accelerator. This function is mandatory.
2475 *
2476 * @param avctx the codec context
2477 * @return zero if successful, a negative value otherwise
2478 */
2479 int (*end_frame)(AVCodecContext *avctx);
2480
2481 /**
2482 * Size of HW accelerator private data.
2483 *
2484 * Private data is allocated with av_mallocz() before
2485 * AVCodecContext.get_buffer() and deallocated after
2486 * AVCodecContext.release_buffer().
2487 */
2488 int priv_data_size;
2489} AVHWAccel;
2490
2491/**
2492 * four components are given, that's all.
2493 * the last component is alpha
2494 */
2495typedef struct AVPicture {
2496 uint8_t *data[4];
2497 int linesize[4]; ///< number of bytes per line
2498} AVPicture;
2499
2500/**
2501 * AVPaletteControl
2502 * This structure defines a method for communicating palette changes
2503 * between and demuxer and a decoder.
2504 *
2505 * @deprecated Use AVPacket to send palette changes instead.
2506 * This is totally broken.
2507 */
2508#define AVPALETTE_SIZE 1024
2509#define AVPALETTE_COUNT 256
2510typedef struct AVPaletteControl {
2511
2512 /* Demuxer sets this to 1 to indicate the palette has changed;
2513 * decoder resets to 0. */
2514 int palette_changed;
2515
2516 /* 4-byte ARGB palette entries, stored in native byte order; note that
2517 * the individual palette components should be on a 8-bit scale; if
2518 * the palette data comes from an IBM VGA native format, the component
2519 * data is probably 6 bits in size and needs to be scaled. */
2520 unsigned int palette[AVPALETTE_COUNT];
2521
2522} AVPaletteControl attribute_deprecated;
2523
2524enum AVSubtitleType {
2525 SUBTITLE_NONE,
2526
2527 SUBTITLE_BITMAP, ///< A bitmap, pict will be set
2528
2529 /**
2530 * Plain text, the text field must be set by the decoder and is
2531 * authoritative. ass and pict fields may contain approximations.
2532 */
2533 SUBTITLE_TEXT,
2534
2535 /**
2536 * Formatted text, the ass field must be set by the decoder and is
2537 * authoritative. pict and text fields may contain approximations.
2538 */
2539 SUBTITLE_ASS,
2540};
2541
2542typedef struct AVSubtitleRect {
2543 int x; ///< top left corner of pict, undefined when pict is not set
2544 int y; ///< top left corner of pict, undefined when pict is not set
2545 int w; ///< width of pict, undefined when pict is not set
2546 int h; ///< height of pict, undefined when pict is not set
2547 int nb_colors; ///< number of colors in pict, undefined when pict is not set
2548
2549 /**
2550 * data+linesize for the bitmap of this subtitle.
2551 * can be set for text/ass as well once they where rendered
2552 */
2553 AVPicture pict;
2554 enum AVSubtitleType type;
2555
2556 char *text; ///< 0 terminated plain UTF-8 text
2557
2558 /**
2559 * 0 terminated ASS/SSA compatible event line.
2560 * The pressentation of this is unaffected by the other values in this
2561 * struct.
2562 */
2563 char *ass;
2564} AVSubtitleRect;
2565
2566typedef struct AVSubtitle {
2567 uint16_t format; /* 0 = graphics */
2568 uint32_t start_display_time; /* relative to packet pts, in ms */
2569 uint32_t end_display_time; /* relative to packet pts, in ms */
2570 unsigned num_rects;
2571 AVSubtitleRect **rects;
2572} AVSubtitle;
2573
2574
2575/* resample.c */
2576
2577struct ReSampleContext;
2578struct AVResampleContext;
2579
2580typedef struct ReSampleContext ReSampleContext;
2581
2582#if LIBAVCODEC_VERSION_MAJOR < 53
2583/**
2584 * @deprecated Use av_audio_resample_init() instead.
2585 */
2586attribute_deprecated ReSampleContext *audio_resample_init(int output_channels, int input_channels,
2587 int output_rate, int input_rate);
2588#endif
2589/**
2590 * Initializes audio resampling context
2591 *
2592 * @param output_channels number of output channels
2593 * @param input_channels number of input channels
2594 * @param output_rate output sample rate
2595 * @param input_rate input sample rate
2596 * @param sample_fmt_out requested output sample format
2597 * @param sample_fmt_in input sample format
2598 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
2599 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
2600 * @param linear If 1 then the used FIR filter will be linearly interpolated
2601 between the 2 closest, if 0 the closest will be used
2602 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
2603 * @return allocated ReSampleContext, NULL if error occured
2604 */
2605ReSampleContext *av_audio_resample_init(int output_channels, int input_channels,
2606 int output_rate, int input_rate,
2607 enum SampleFormat sample_fmt_out,
2608 enum SampleFormat sample_fmt_in,
2609 int filter_length, int log2_phase_count,
2610 int linear, double cutoff);
2611
2612int audio_resample(ReSampleContext *s, short *output, short *input, int nb_samples);
2613void audio_resample_close(ReSampleContext *s);
2614
2615
2616/**
2617 * Initializes an audio resampler.
2618 * Note, if either rate is not an integer then simply scale both rates up so they are.
2619 * @param filter_length length of each FIR filter in the filterbank relative to the cutoff freq
2620 * @param log2_phase_count log2 of the number of entries in the polyphase filterbank
2621 * @param linear If 1 then the used FIR filter will be linearly interpolated
2622 between the 2 closest, if 0 the closest will be used
2623 * @param cutoff cutoff frequency, 1.0 corresponds to half the output sampling rate
2624 */
2625struct AVResampleContext *av_resample_init(int out_rate, int in_rate, int filter_length, int log2_phase_count, int linear, double cutoff);
2626
2627/**
2628 * resamples.
2629 * @param src an array of unconsumed samples
2630 * @param consumed the number of samples of src which have been consumed are returned here
2631 * @param src_size the number of unconsumed samples available
2632 * @param dst_size the amount of space in samples available in dst
2633 * @param update_ctx If this is 0 then the context will not be modified, that way several channels can be resampled with the same context.
2634 * @return the number of samples written in dst or -1 if an error occurred
2635 */
2636int av_resample(struct AVResampleContext *c, short *dst, short *src, int *consumed, int src_size, int dst_size, int update_ctx);
2637
2638
2639/**
2640 * Compensates samplerate/timestamp drift. The compensation is done by changing
2641 * the resampler parameters, so no audible clicks or similar distortions occur
2642 * @param compensation_distance distance in output samples over which the compensation should be performed
2643 * @param sample_delta number of output samples which should be output less
2644 *
2645 * example: av_resample_compensate(c, 10, 500)
2646 * here instead of 510 samples only 500 samples would be output
2647 *
2648 * note, due to rounding the actual compensation might be slightly different,
2649 * especially if the compensation_distance is large and the in_rate used during init is small
2650 */
2651void av_resample_compensate(struct AVResampleContext *c, int sample_delta, int compensation_distance);
2652void av_resample_close(struct AVResampleContext *c);
2653
2654/**
2655 * Allocate memory for a picture. Call avpicture_free to free it.
2656 *
2657 * @param picture the picture to be filled in
2658 * @param pix_fmt the format of the picture
2659 * @param width the width of the picture
2660 * @param height the height of the picture
2661 * @return zero if successful, a negative value if not
2662 */
2663int avpicture_alloc(AVPicture *picture, int pix_fmt, int width, int height);
2664
2665/**
2666 * Free a picture previously allocated by avpicture_alloc().
2667 *
2668 * @param picture the AVPicture to be freed
2669 */
2670void avpicture_free(AVPicture *picture);
2671
2672/**
2673 * Fill in the AVPicture fields.
2674 * The fields of the given AVPicture are filled in by using the 'ptr' address
2675 * which points to the image data buffer. Depending on the specified picture
2676 * format, one or multiple image data pointers and line sizes will be set.
2677 * If a planar format is specified, several pointers will be set pointing to
2678 * the different picture planes and the line sizes of the different planes
2679 * will be stored in the lines_sizes array.
2680 *
2681 * @param picture AVPicture whose fields are to be filled in
2682 * @param ptr Buffer which will contain or contains the actual image data
2683 * @param pix_fmt The format in which the picture data is stored.
2684 * @param width the width of the image in pixels
2685 * @param height the height of the image in pixels
2686 * @return size of the image data in bytes
2687 */
2688int avpicture_fill(AVPicture *picture, uint8_t *ptr,
2689 int pix_fmt, int width, int height);
2690int avpicture_layout(const AVPicture* src, int pix_fmt, int width, int height,
2691 unsigned char *dest, int dest_size);
2692
2693/**
2694 * Calculate the size in bytes that a picture of the given width and height
2695 * would occupy if stored in the given picture format.
2696 *
2697 * @param pix_fmt the given picture format
2698 * @param width the width of the image
2699 * @param height the height of the image
2700 * @return Image data size in bytes
2701 */
2702int avpicture_get_size(int pix_fmt, int width, int height);
2703void avcodec_get_chroma_sub_sample(int pix_fmt, int *h_shift, int *v_shift);
2704const char *avcodec_get_pix_fmt_name(int pix_fmt);
2705void avcodec_set_dimensions(AVCodecContext *s, int width, int height);
2706enum PixelFormat avcodec_get_pix_fmt(const char* name);
2707unsigned int avcodec_pix_fmt_to_codec_tag(enum PixelFormat p);
2708
2709#define FF_LOSS_RESOLUTION 0x0001 /**< loss due to resolution change */
2710#define FF_LOSS_DEPTH 0x0002 /**< loss due to color depth change */
2711#define FF_LOSS_COLORSPACE 0x0004 /**< loss due to color space conversion */
2712#define FF_LOSS_ALPHA 0x0008 /**< loss of alpha bits */
2713#define FF_LOSS_COLORQUANT 0x0010 /**< loss due to color quantization */
2714#define FF_LOSS_CHROMA 0x0020 /**< loss of chroma (e.g. RGB to gray conversion) */
2715
2716/**
2717 * Computes what kind of losses will occur when converting from one specific
2718 * pixel format to another.
2719 * When converting from one pixel format to another, information loss may occur.
2720 * For example, when converting from RGB24 to GRAY, the color information will
2721 * be lost. Similarly, other losses occur when converting from some formats to
2722 * other formats. These losses can involve loss of chroma, but also loss of
2723 * resolution, loss of color depth, loss due to the color space conversion, loss
2724 * of the alpha bits or loss due to color quantization.
2725 * avcodec_get_fix_fmt_loss() informs you about the various types of losses
2726 * which will occur when converting from one pixel format to another.
2727 *
2728 * @param[in] dst_pix_fmt destination pixel format
2729 * @param[in] src_pix_fmt source pixel format
2730 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
2731 * @return Combination of flags informing you what kind of losses will occur.
2732 */
2733int avcodec_get_pix_fmt_loss(int dst_pix_fmt, int src_pix_fmt,
2734 int has_alpha);
2735
2736/**
2737 * Finds the best pixel format to convert to given a certain source pixel
2738 * format. When converting from one pixel format to another, information loss
2739 * may occur. For example, when converting from RGB24 to GRAY, the color
2740 * information will be lost. Similarly, other losses occur when converting from
2741 * some formats to other formats. avcodec_find_best_pix_fmt() searches which of
2742 * the given pixel formats should be used to suffer the least amount of loss.
2743 * The pixel formats from which it chooses one, are determined by the
2744 * \p pix_fmt_mask parameter.
2745 *
2746 * @code
2747 * src_pix_fmt = PIX_FMT_YUV420P;
2748 * pix_fmt_mask = (1 << PIX_FMT_YUV422P) || (1 << PIX_FMT_RGB24);
2749 * dst_pix_fmt = avcodec_find_best_pix_fmt(pix_fmt_mask, src_pix_fmt, alpha, &loss);
2750 * @endcode
2751 *
2752 * @param[in] pix_fmt_mask bitmask determining which pixel format to choose from
2753 * @param[in] src_pix_fmt source pixel format
2754 * @param[in] has_alpha Whether the source pixel format alpha channel is used.
2755 * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
2756 * @return The best pixel format to convert to or -1 if none was found.
2757 */
2758int avcodec_find_best_pix_fmt(int64_t pix_fmt_mask, int src_pix_fmt,
2759 int has_alpha, int *loss_ptr);
2760
2761
2762/**
2763 * Print in buf the string corresponding to the pixel format with
2764 * number pix_fmt, or an header if pix_fmt is negative.
2765 *
2766 * @param[in] buf the buffer where to write the string
2767 * @param[in] buf_size the size of buf
2768 * @param[in] pix_fmt the number of the pixel format to print the corresponding info string, or
2769 * a negative value to print the corresponding header.
2770 * Meaningful values for obtaining a pixel format info vary from 0 to PIX_FMT_NB -1.
2771 */
2772void avcodec_pix_fmt_string (char *buf, int buf_size, int pix_fmt);
2773
2774#define FF_ALPHA_TRANSP 0x0001 /* image has some totally transparent pixels */
2775#define FF_ALPHA_SEMI_TRANSP 0x0002 /* image has some transparent pixels */
2776
2777/**
2778 * Tell if an image really has transparent alpha values.
2779 * @return ored mask of FF_ALPHA_xxx constants
2780 */
2781int img_get_alpha_info(const AVPicture *src,
2782 int pix_fmt, int width, int height);
2783
2784/* deinterlace a picture */
2785/* deinterlace - if not supported return -1 */
2786int avpicture_deinterlace(AVPicture *dst, const AVPicture *src,
2787 int pix_fmt, int width, int height);
2788
2789/* external high level API */
2790
2791/**
2792 * If c is NULL, returns the first registered codec,
2793 * if c is non-NULL, returns the next registered codec after c,
2794 * or NULL if c is the last one.
2795 */
2796AVCodec *av_codec_next(AVCodec *c);
2797
2798/**
2799 * Returns the LIBAVCODEC_VERSION_INT constant.
2800 */
2801unsigned avcodec_version(void);
2802
2803/**
2804 * Initializes libavcodec.
2805 *
2806 * @warning This function \e must be called before any other libavcodec
2807 * function.
2808 */
2809void avcodec_init(void);
2810
2811#if LIBAVCODEC_VERSION_MAJOR < 53
2812/**
2813 * @deprecated Deprecated in favor of avcodec_register().
2814 */
2815attribute_deprecated void register_avcodec(AVCodec *codec);
2816#endif
2817
2818/**
2819 * Register the codec \p codec and initialize libavcodec.
2820 *
2821 * @see avcodec_init()
2822 */
2823void avcodec_register(AVCodec *codec);
2824
2825/**
2826 * Finds a registered encoder with a matching codec ID.
2827 *
2828 * @param id CodecID of the requested encoder
2829 * @return An encoder if one was found, NULL otherwise.
2830 */
2831AVCodec *avcodec_find_encoder(enum CodecID id);
2832
2833/**
2834 * Finds a registered encoder with the specified name.
2835 *
2836 * @param name name of the requested encoder
2837 * @return An encoder if one was found, NULL otherwise.
2838 */
2839AVCodec *avcodec_find_encoder_by_name(const char *name);
2840
2841/**
2842 * Finds a registered decoder with a matching codec ID.
2843 *
2844 * @param id CodecID of the requested decoder
2845 * @return A decoder if one was found, NULL otherwise.
2846 */
2847AVCodec *avcodec_find_decoder(enum CodecID id);
2848
2849/**
2850 * Finds a registered decoder with the specified name.
2851 *
2852 * @param name name of the requested decoder
2853 * @return A decoder if one was found, NULL otherwise.
2854 */
2855AVCodec *avcodec_find_decoder_by_name(const char *name);
2856void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
2857
2858/**
2859 * Sets the fields of the given AVCodecContext to default values.
2860 *
2861 * @param s The AVCodecContext of which the fields should be set to default values.
2862 */
2863void avcodec_get_context_defaults(AVCodecContext *s);
2864
2865/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
2866 * we WILL change its arguments and name a few times! */
2867void avcodec_get_context_defaults2(AVCodecContext *s, enum CodecType);
2868
2869/**
2870 * Allocates an AVCodecContext and sets its fields to default values. The
2871 * resulting struct can be deallocated by simply calling av_free().
2872 *
2873 * @return An AVCodecContext filled with default values or NULL on failure.
2874 * @see avcodec_get_context_defaults
2875 */
2876AVCodecContext *avcodec_alloc_context(void);
2877
2878/** THIS FUNCTION IS NOT YET PART OF THE PUBLIC API!
2879 * we WILL change its arguments and name a few times! */
2880AVCodecContext *avcodec_alloc_context2(enum CodecType);
2881
2882/**
2883 * Sets the fields of the given AVFrame to default values.
2884 *
2885 * @param pic The AVFrame of which the fields should be set to default values.
2886 */
2887void avcodec_get_frame_defaults(AVFrame *pic);
2888
2889/**
2890 * Allocates an AVFrame and sets its fields to default values. The resulting
2891 * struct can be deallocated by simply calling av_free().
2892 *
2893 * @return An AVFrame filled with default values or NULL on failure.
2894 * @see avcodec_get_frame_defaults
2895 */
2896AVFrame *avcodec_alloc_frame(void);
2897
2898int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic);
2899void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic);
2900int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic);
2901void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
2902
2903/**
2904 * Checks if the given dimension of a picture is valid, meaning that all
2905 * bytes of the picture can be addressed with a signed int.
2906 *
2907 * @param[in] w Width of the picture.
2908 * @param[in] h Height of the picture.
2909 * @return Zero if valid, a negative value if invalid.
2910 */
2911int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h);
2912enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt);
2913
2914int avcodec_thread_init(AVCodecContext *s, int thread_count);
2915void avcodec_thread_free(AVCodecContext *s);
2916int avcodec_thread_execute(AVCodecContext *s, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
2917int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
2918//FIXME func typedef
2919
2920/**
2921 * Initializes the AVCodecContext to use the given AVCodec. Prior to using this
2922 * function the context has to be allocated.
2923 *
2924 * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
2925 * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
2926 * retrieving a codec.
2927 *
2928 * @warning This function is not thread safe!
2929 *
2930 * @code
2931 * avcodec_register_all();
2932 * codec = avcodec_find_decoder(CODEC_ID_H264);
2933 * if (!codec)
2934 * exit(1);
2935 *
2936 * context = avcodec_alloc_context();
2937 *
2938 * if (avcodec_open(context, codec) < 0)
2939 * exit(1);
2940 * @endcode
2941 *
2942 * @param avctx The context which will be set up to use the given codec.
2943 * @param codec The codec to use within the context.
2944 * @return zero on success, a negative value on error
2945 * @see avcodec_alloc_context, avcodec_find_decoder, avcodec_find_encoder
2946 */
2947int avcodec_open(AVCodecContext *avctx, AVCodec *codec);
2948
2949/**
2950 * Decodes an audio frame from \p buf into \p samples.
2951 * The avcodec_decode_audio2() function decodes an audio frame from the input
2952 * buffer \p buf of size \p buf_size. To decode it, it makes use of the
2953 * audio codec which was coupled with \p avctx using avcodec_open(). The
2954 * resulting decoded frame is stored in output buffer \p samples. If no frame
2955 * could be decompressed, \p frame_size_ptr is zero. Otherwise, it is the
2956 * decompressed frame size in \e bytes.
2957 *
2958 * @warning You \e must set \p frame_size_ptr to the allocated size of the
2959 * output buffer before calling avcodec_decode_audio2().
2960 *
2961 * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than
2962 * the actual read bytes because some optimized bitstream readers read 32 or 64
2963 * bits at once and could read over the end.
2964 *
2965 * @warning The end of the input buffer \p buf should be set to 0 to ensure that
2966 * no overreading happens for damaged MPEG streams.
2967 *
2968 * @note You might have to align the input buffer \p buf and output buffer \p
2969 * samples. The alignment requirements depend on the CPU: On some CPUs it isn't
2970 * necessary at all, on others it won't work at all if not aligned and on others
2971 * it will work but it will have an impact on performance. In practice, the
2972 * bitstream should have 4 byte alignment at minimum and all sample data should
2973 * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
2974 * the linesize is not a multiple of 16 then there's no sense in aligning the
2975 * start of the buffer to 16.
2976 *
2977 * @param avctx the codec context
2978 * @param[out] samples the output buffer
2979 * @param[in,out] frame_size_ptr the output buffer size in bytes
2980 * @param[in] buf the input buffer
2981 * @param[in] buf_size the input buffer size in bytes
2982 * @return On error a negative value is returned, otherwise the number of bytes
2983 * used or zero if no frame could be decompressed.
2984 */
2985int avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples,
2986 int *frame_size_ptr,
2987 const uint8_t *buf, int buf_size);
2988
2989/**
2990 * Decodes a video frame from \p buf into \p picture.
2991 * The avcodec_decode_video() function decodes a video frame from the input
2992 * buffer \p buf of size \p buf_size. To decode it, it makes use of the
2993 * video codec which was coupled with \p avctx using avcodec_open(). The
2994 * resulting decoded frame is stored in \p picture.
2995 *
2996 * @warning The input buffer must be \c FF_INPUT_BUFFER_PADDING_SIZE larger than
2997 * the actual read bytes because some optimized bitstream readers read 32 or 64
2998 * bits at once and could read over the end.
2999 *
3000 * @warning The end of the input buffer \p buf should be set to 0 to ensure that
3001 * no overreading happens for damaged MPEG streams.
3002 *
3003 * @note You might have to align the input buffer \p buf and output buffer \p
3004 * samples. The alignment requirements depend on the CPU: on some CPUs it isn't
3005 * necessary at all, on others it won't work at all if not aligned and on others
3006 * it will work but it will have an impact on performance. In practice, the
3007 * bitstream should have 4 byte alignment at minimum and all sample data should
3008 * be 16 byte aligned unless the CPU doesn't need it (AltiVec and SSE do). If
3009 * the linesize is not a multiple of 16 then there's no sense in aligning the
3010 * start of the buffer to 16.
3011 *
3012 * @note Some codecs have a delay between input and output, these need to be
3013 * feeded with buf=NULL, buf_size=0 at the end to return the remaining frames.
3014 *
3015 * @param avctx the codec context
3016 * @param[out] picture The AVFrame in which the decoded video frame will be stored.
3017 * @param[in] buf the input buffer
3018 * @param[in] buf_size the size of the input buffer in bytes
3019 * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
3020 * @return On error a negative value is returned, otherwise the number of bytes
3021 * used or zero if no frame could be decompressed.
3022 */
3023int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture,
3024 int *got_picture_ptr,
3025 const uint8_t *buf, int buf_size);
3026
3027/* Decode a subtitle message. Return -1 if error, otherwise return the
3028 * number of bytes used. If no subtitle could be decompressed,
3029 * got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */
3030int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub,
3031 int *got_sub_ptr,
3032 const uint8_t *buf, int buf_size);
3033int avcodec_parse_frame(AVCodecContext *avctx, uint8_t **pdata,
3034 int *data_size_ptr,
3035 uint8_t *buf, int buf_size);
3036
3037/**
3038 * Encodes an audio frame from \p samples into \p buf.
3039 * The avcodec_encode_audio() function encodes an audio frame from the input
3040 * buffer \p samples. To encode it, it makes use of the audio codec which was
3041 * coupled with \p avctx using avcodec_open(). The resulting encoded frame is
3042 * stored in output buffer \p buf.
3043 *
3044 * @note The output buffer should be at least \c FF_MIN_BUFFER_SIZE bytes large.
3045 *
3046 * @param avctx the codec context
3047 * @param[out] buf the output buffer
3048 * @param[in] buf_size the output buffer size
3049 * @param[in] samples the input buffer containing the samples
3050 * The number of samples read from this buffer is frame_size*channels,
3051 * both of which are defined in \p avctx.
3052 * For PCM audio the number of samples read from \p samples is equal to
3053 * \p buf_size * input_sample_size / output_sample_size.
3054 * @return On error a negative value is returned, on success zero or the number
3055 * of bytes used to encode the data read from the input buffer.
3056 */
3057int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size,
3058 const short *samples);
3059
3060/**
3061 * Encodes a video frame from \p pict into \p buf.
3062 * The avcodec_encode_video() function encodes a video frame from the input
3063 * \p pict. To encode it, it makes use of the video codec which was coupled with
3064 * \p avctx using avcodec_open(). The resulting encoded bytes representing the
3065 * frame are stored in the output buffer \p buf. The input picture should be
3066 * stored using a specific format, namely \c avctx.pix_fmt.
3067 *
3068 * @param avctx the codec context
3069 * @param[out] buf the output buffer for the bitstream of encoded frame
3070 * @param[in] buf_size the size of the output buffer in bytes
3071 * @param[in] pict the input picture to encode
3072 * @return On error a negative value is returned, on success zero or the number
3073 * of bytes used from the output buffer.
3074 */
3075int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size,
3076 const AVFrame *pict);
3077int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
3078 const AVSubtitle *sub);
3079
3080int avcodec_close(AVCodecContext *avctx);
3081
3082/**
3083 * Register all the codecs, parsers and bitstream filters which were enabled at
3084 * configuration time. If you do not call this function you can select exactly
3085 * which formats you want to support, by using the individual registration
3086 * functions.
3087 *
3088 * @see avcodec_register
3089 * @see av_register_codec_parser
3090 * @see av_register_bitstream_filter
3091 */
3092void avcodec_register_all(void);
3093
3094/**
3095 * Flush buffers, should be called when seeking or when switching to a different stream.
3096 */
3097void avcodec_flush_buffers(AVCodecContext *avctx);
3098
3099void avcodec_default_free_buffers(AVCodecContext *s);
3100
3101/* misc useful functions */
3102
3103/**
3104 * Returns a single letter to describe the given picture type \p pict_type.
3105 *
3106 * @param[in] pict_type the picture type
3107 * @return A single character representing the picture type.
3108 */
3109char av_get_pict_type_char(int pict_type);
3110
3111/**
3112 * Returns codec bits per sample.
3113 *
3114 * @param[in] codec_id the codec
3115 * @return Number of bits per sample or zero if unknown for the given codec.
3116 */
3117int av_get_bits_per_sample(enum CodecID codec_id);
3118
3119/**
3120 * Returns sample format bits per sample.
3121 *
3122 * @param[in] sample_fmt the sample format
3123 * @return Number of bits per sample or zero if unknown for the given sample format.
3124 */
3125int av_get_bits_per_sample_format(enum SampleFormat sample_fmt);
3126
3127/* frame parsing */
3128typedef struct AVCodecParserContext {
3129 void *priv_data;
3130 struct AVCodecParser *parser;
3131 int64_t frame_offset; /* offset of the current frame */
3132 int64_t cur_offset; /* current offset
3133 (incremented by each av_parser_parse()) */
3134 int64_t next_frame_offset; /* offset of the next frame */
3135 /* video info */
3136 int pict_type; /* XXX: Put it back in AVCodecContext. */
3137 /**
3138 * This field is used for proper frame duration computation in lavf.
3139 * It signals, how much longer the frame duration of the current frame
3140 * is compared to normal frame duration.
3141 *
3142 * frame_duration = (1 + repeat_pict) * time_base
3143 *
3144 * It is used by codecs like H.264 to display telecined material.
3145 */
3146 int repeat_pict; /* XXX: Put it back in AVCodecContext. */
3147 int64_t pts; /* pts of the current frame */
3148 int64_t dts; /* dts of the current frame */
3149
3150 /* private data */
3151 int64_t last_pts;
3152 int64_t last_dts;
3153 int fetch_timestamp;
3154
3155#define AV_PARSER_PTS_NB 4
3156 int cur_frame_start_index;
3157 int64_t cur_frame_offset[AV_PARSER_PTS_NB];
3158 int64_t cur_frame_pts[AV_PARSER_PTS_NB];
3159 int64_t cur_frame_dts[AV_PARSER_PTS_NB];
3160
3161 int flags;
3162#define PARSER_FLAG_COMPLETE_FRAMES 0x0001
3163
3164 int64_t offset; ///< byte offset from starting packet start
3165 int64_t cur_frame_end[AV_PARSER_PTS_NB];
3166
3167 /*!
3168 * Set by parser to 1 for key frames and 0 for non-key frames.
3169 * It is initialized to -1, so if the parser doesn't set this flag,
3170 * old-style fallback using FF_I_TYPE picture type as key frames
3171 * will be used.
3172 */
3173 int key_frame;
3174
3175 /**
3176 * Time difference in stream time base units from the pts of this
3177 * packet to the point at which the output from the decoder has converged
3178 * independent from the availability of previous frames. That is, the
3179 * frames are virtually identical no matter if decoding started from
3180 * the very first frame or from this keyframe.
3181 * Is AV_NOPTS_VALUE if unknown.
3182 * This field is not the display duration of the current frame.
3183 *
3184 * The purpose of this field is to allow seeking in streams that have no
3185 * keyframes in the conventional sense. It corresponds to the
3186 * recovery point SEI in H.264 and match_time_delta in NUT. It is also
3187 * essential for some types of subtitle streams to ensure that all
3188 * subtitles are correctly displayed after seeking.
3189 */
3190 int64_t convergence_duration;
3191
3192 // Timestamp generation support:
3193 /**
3194 * Synchronization point for start of timestamp generation.
3195 *
3196 * Set to >0 for sync point, 0 for no sync point and <0 for undefined
3197 * (default).
3198 *
3199 * For example, this corresponds to presence of H.264 buffering period
3200 * SEI message.
3201 */
3202 int dts_sync_point;
3203
3204 /**
3205 * Offset of the current timestamp against last timestamp sync point in
3206 * units of AVCodecContext.time_base.
3207 *
3208 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
3209 * contain a valid timestamp offset.
3210 *
3211 * Note that the timestamp of sync point has usually a nonzero
3212 * dts_ref_dts_delta, which refers to the previous sync point. Offset of
3213 * the next frame after timestamp sync point will be usually 1.
3214 *
3215 * For example, this corresponds to H.264 cpb_removal_delay.
3216 */
3217 int dts_ref_dts_delta;
3218
3219 /**
3220 * Presentation delay of current frame in units of AVCodecContext.time_base.
3221 *
3222 * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
3223 * contain valid non-negative timestamp delta (presentation time of a frame
3224 * must not lie in the past).
3225 *
3226 * This delay represents the difference between decoding and presentation
3227 * time of the frame.
3228 *
3229 * For example, this corresponds to H.264 dpb_output_delay.
3230 */
3231 int pts_dts_delta;
3232
3233 /**
3234 * Position of the packet in file.
3235 *
3236 * Analogous to cur_frame_pts/dts
3237 */
3238 int64_t cur_frame_pos[AV_PARSER_PTS_NB];
3239
3240 /**
3241 * Byte position of currently parsed frame in stream.
3242 */
3243 int64_t pos;
3244
3245 /**
3246 * Previous frame byte position.
3247 */
3248 int64_t last_pos;
3249} AVCodecParserContext;
3250
3251typedef struct AVCodecParser {
3252 int codec_ids[5]; /* several codec IDs are permitted */
3253 int priv_data_size;
3254 int (*parser_init)(AVCodecParserContext *s);
3255 int (*parser_parse)(AVCodecParserContext *s,
3256 AVCodecContext *avctx,
3257 const uint8_t **poutbuf, int *poutbuf_size,
3258 const uint8_t *buf, int buf_size);
3259 void (*parser_close)(AVCodecParserContext *s);
3260 int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
3261 struct AVCodecParser *next;
3262} AVCodecParser;
3263
3264AVCodecParser *av_parser_next(AVCodecParser *c);
3265
3266void av_register_codec_parser(AVCodecParser *parser);
3267AVCodecParserContext *av_parser_init(int codec_id);
3268
3269attribute_deprecated
3270int av_parser_parse(AVCodecParserContext *s,
3271 AVCodecContext *avctx,
3272 uint8_t **poutbuf, int *poutbuf_size,
3273 const uint8_t *buf, int buf_size,
3274 int64_t pts, int64_t dts);
3275
3276/**
3277 * Parse a packet.
3278 *
3279 * @param s parser context.
3280 * @param avctx codec context.
3281 * @param poutbuf set to pointer to parsed buffer or NULL if not yet finished.
3282 * @param poutbuf_size set to size of parsed buffer or zero if not yet finished.
3283 * @param buf input buffer.
3284 * @param buf_size input length, to signal EOF, this should be 0 (so that the last frame can be output).
3285 * @param pts input presentation timestamp.
3286 * @param dts input decoding timestamp.
3287 * @param pos input byte position in stream.
3288 * @return the number of bytes of the input bitstream used.
3289 *
3290 * Example:
3291 * @code
3292 * while(in_len){
3293 * len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
3294 * in_data, in_len,
3295 * pts, dts, pos);
3296 * in_data += len;
3297 * in_len -= len;
3298 *
3299 * if(size)
3300 * decode_frame(data, size);
3301 * }
3302 * @endcode
3303 */
3304int av_parser_parse2(AVCodecParserContext *s,
3305 AVCodecContext *avctx,
3306 uint8_t **poutbuf, int *poutbuf_size,
3307 const uint8_t *buf, int buf_size,
3308 int64_t pts, int64_t dts,
3309 int64_t pos);
3310
3311int av_parser_change(AVCodecParserContext *s,
3312 AVCodecContext *avctx,
3313 uint8_t **poutbuf, int *poutbuf_size,
3314 const uint8_t *buf, int buf_size, int keyframe);
3315void av_parser_close(AVCodecParserContext *s);
3316
3317
3318typedef struct AVBitStreamFilterContext {
3319 void *priv_data;
3320 struct AVBitStreamFilter *filter;
3321 AVCodecParserContext *parser;
3322 struct AVBitStreamFilterContext *next;
3323} AVBitStreamFilterContext;
3324
3325
3326typedef struct AVBitStreamFilter {
3327 const char *name;
3328 int priv_data_size;
3329 int (*filter)(AVBitStreamFilterContext *bsfc,
3330 AVCodecContext *avctx, const char *args,
3331 uint8_t **poutbuf, int *poutbuf_size,
3332 const uint8_t *buf, int buf_size, int keyframe);
3333 void (*close)(AVBitStreamFilterContext *bsfc);
3334 struct AVBitStreamFilter *next;
3335} AVBitStreamFilter;
3336
3337void av_register_bitstream_filter(AVBitStreamFilter *bsf);
3338AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
3339int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
3340 AVCodecContext *avctx, const char *args,
3341 uint8_t **poutbuf, int *poutbuf_size,
3342 const uint8_t *buf, int buf_size, int keyframe);
3343void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
3344
3345AVBitStreamFilter *av_bitstream_filter_next(AVBitStreamFilter *f);
3346
3347/* memory */
3348
3349/**
3350 * Reallocates the given block if it is not large enough, otherwise it
3351 * does nothing.
3352 *
3353 * @see av_realloc
3354 */
3355void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size);
3356
3357/**
3358 * Copy image 'src' to 'dst'.
3359 */
3360void av_picture_copy(AVPicture *dst, const AVPicture *src,
3361 int pix_fmt, int width, int height);
3362
3363/**
3364 * Crop image top and left side.
3365 */
3366int av_picture_crop(AVPicture *dst, const AVPicture *src,
3367 int pix_fmt, int top_band, int left_band);
3368
3369/**
3370 * Pad image.
3371 */
3372int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, int pix_fmt,
3373 int padtop, int padbottom, int padleft, int padright, int *color);
3374
3375unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
3376
3377/**
3378 * Parses \p str and put in \p width_ptr and \p height_ptr the detected values.
3379 *
3380 * @return 0 in case of a successful parsing, a negative value otherwise
3381 * @param[in] str the string to parse: it has to be a string in the format
3382 * <width>x<height> or a valid video frame size abbreviation.
3383 * @param[in,out] width_ptr pointer to the variable which will contain the detected
3384 * frame width value
3385 * @param[in,out] height_ptr pointer to the variable which will contain the detected
3386 * frame height value
3387 */
3388int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str);
3389
3390/**
3391 * Parses \p str and put in \p frame_rate the detected values.
3392 *
3393 * @return 0 in case of a successful parsing, a negative value otherwise
3394 * @param[in] str the string to parse: it has to be a string in the format
3395 * <frame_rate_num>/<frame_rate_den>, a float number or a valid video rate abbreviation
3396 * @param[in,out] frame_rate pointer to the AVRational which will contain the detected
3397 * frame rate
3398 */
3399int av_parse_video_frame_rate(AVRational *frame_rate, const char *str);
3400
3401/* error handling */
3402#if EINVAL > 0
3403#define AVERROR(e) (-(e)) /**< Returns a negative error code from a POSIX error code, to return from library functions. */
3404#define AVUNERROR(e) (-(e)) /**< Returns a POSIX error code from a library function error return value. */
3405#else
3406/* Some platforms have E* and errno already negated. */
3407#define AVERROR(e) (e)
3408#define AVUNERROR(e) (e)
3409#endif
3410#define AVERROR_UNKNOWN AVERROR(EINVAL) /**< unknown error */
3411#define AVERROR_IO AVERROR(EIO) /**< I/O error */
3412#define AVERROR_NUMEXPECTED AVERROR(EDOM) /**< Number syntax expected in filename. */
3413#define AVERROR_INVALIDDATA AVERROR(EINVAL) /**< invalid data found */
3414#define AVERROR_NOMEM AVERROR(ENOMEM) /**< not enough memory */
3415#define AVERROR_NOFMT AVERROR(EILSEQ) /**< unknown format */
3416#define AVERROR_NOTSUPP AVERROR(ENOSYS) /**< Operation not supported. */
3417#define AVERROR_NOENT AVERROR(ENOENT) /**< No such file or directory. */
3418#define AVERROR_EOF AVERROR(EPIPE) /**< End of file. */
3419#define AVERROR_PATCHWELCOME -MKTAG('P','A','W','E') /**< Not yet implemented in FFmpeg. Patches welcome. */
3420
3421/**
3422 * Registers the hardware accelerator \p hwaccel.
3423 */
3424void av_register_hwaccel(AVHWAccel *hwaccel);
3425
3426/**
3427 * If hwaccel is NULL, returns the first registered hardware accelerator,
3428 * if hwaccel is non-NULL, returns the next registered hardware accelerator
3429 * after hwaccel, or NULL if hwaccel is the last one.
3430 */
3431AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel);
3432#endif /* MT : DELETE THIS LINE ONLY. */
3433#endif /* AVCODEC_AVCODEC_H */
diff --git a/apps/codecs/libatrac/bytestream.h b/apps/codecs/libatrac/bytestream.h
index b56f6ce743..cc4f7a62c7 100644
--- a/apps/codecs/libatrac/bytestream.h
+++ b/apps/codecs/libatrac/bytestream.h
@@ -23,7 +23,6 @@
23#define AVCODEC_BYTESTREAM_H 23#define AVCODEC_BYTESTREAM_H
24 24
25#include <string.h> 25#include <string.h>
26#include "libavutil/common.h"
27#include "libavutil/intreadwrite.h" 26#include "libavutil/intreadwrite.h"
28 27
29#define DEF_T(type, name, bytes, read, write) \ 28#define DEF_T(type, name, bytes, read, write) \
diff --git a/apps/codecs/libatrac/libavutil/common.h b/apps/codecs/libatrac/libavutil/common.h
index 949f093d35..e369b43da7 100644
--- a/apps/codecs/libatrac/libavutil/common.h
+++ b/apps/codecs/libatrac/libavutil/common.h
@@ -276,11 +276,4 @@ static inline av_const float av_clipf(float a, float amin, float amax)
276 }\ 276 }\
277 } 277 }
278 278
279#include "mem.h"
280
281//#ifdef HAVE_AV_CONFIG_H
282//# include "ffmpeg_config.h"
283# include "internal.h"
284//#endif /* HAVE_AV_CONFIG_H */
285
286#endif /* AVUTIL_COMMON_H */ 279#endif /* AVUTIL_COMMON_H */
diff --git a/apps/codecs/libatrac/libavutil/internal.h b/apps/codecs/libatrac/libavutil/internal.h
deleted file mode 100644
index c28b6f9a5e..0000000000
--- a/apps/codecs/libatrac/libavutil/internal.h
+++ /dev/null
@@ -1,328 +0,0 @@
1/*
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21/**
22 * @file libavutil/internal.h
23 * common internal API header
24 */
25
26#ifndef AVUTIL_INTERNAL_H
27#define AVUTIL_INTERNAL_H
28
29#if !defined(DEBUG) && !defined(NDEBUG)
30# define NDEBUG
31#endif
32
33#include <limits.h>
34#include <stdint.h>
35#include <stddef.h>
36#include <assert.h>
37//#include "ffmpeg_config.h"
38#include "common.h"
39#include "mem.h"
40//#include "timer.h"
41
42#ifndef attribute_align_arg
43#if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,2)
44# define attribute_align_arg __attribute__((force_align_arg_pointer))
45#else
46# define attribute_align_arg
47#endif
48#endif
49
50#ifndef attribute_used
51#if AV_GCC_VERSION_AT_LEAST(3,1)
52# define attribute_used __attribute__((used))
53#else
54# define attribute_used
55#endif
56#endif
57
58#ifndef INT16_MIN
59#define INT16_MIN (-0x7fff-1)
60#endif
61
62#ifndef INT16_MAX
63#define INT16_MAX 0x7fff
64#endif
65
66#ifndef INT32_MIN
67#define INT32_MIN (-0x7fffffff-1)
68#endif
69
70#ifndef INT32_MAX
71#define INT32_MAX 0x7fffffff
72#endif
73
74#ifndef UINT32_MAX
75#define UINT32_MAX 0xffffffff
76#endif
77
78#ifndef INT64_MIN
79#define INT64_MIN (-0x7fffffffffffffffLL-1)
80#endif
81
82#ifndef INT64_MAX
83#define INT64_MAX INT64_C(9223372036854775807)
84#endif
85
86#ifndef UINT64_MAX
87#define UINT64_MAX UINT64_C(0xFFFFFFFFFFFFFFFF)
88#endif
89
90#ifndef INT_BIT
91# define INT_BIT (CHAR_BIT * sizeof(int))
92#endif
93
94#if ( defined(__PIC__) || defined(__pic__) ) && ! defined(PIC)
95# define PIC
96#endif
97
98#ifndef offsetof
99# define offsetof(T,F) ((unsigned int)((char *)&((T *)0)->F))
100#endif
101
102// Use rip-relative addressing if compiling PIC code on x86-64.
103#if ARCH_X86_64 && defined(PIC)
104# define LOCAL_MANGLE(a) #a "(%%rip)"
105#else
106# define LOCAL_MANGLE(a) #a
107#endif
108
109#define MANGLE(a) EXTERN_PREFIX LOCAL_MANGLE(a)
110
111/* debug stuff */
112
113/* dprintf macros */
114#ifdef DEBUG
115# define dprintf(pctx, ...) av_log(pctx, AV_LOG_DEBUG, __VA_ARGS__)
116#else
117# define dprintf(pctx, ...)
118#endif
119
120#define av_abort() do { av_log(NULL, AV_LOG_ERROR, "Abort at %s:%d\n", __FILE__, __LINE__); abort(); } while (0)
121
122/* math */
123
124extern const uint32_t ff_inverse[256];
125
126#if ARCH_X86
127# define FASTDIV(a,b) \
128 ({\
129 int ret,dmy;\
130 __asm__ volatile(\
131 "mull %3"\
132 :"=d"(ret),"=a"(dmy)\
133 :"1"(a),"g"(ff_inverse[b])\
134 );\
135 ret;\
136 })
137#elif HAVE_ARMV6 && HAVE_INLINE_ASM
138static inline av_const int FASTDIV(int a, int b)
139{
140 int r, t;
141 __asm__ volatile("cmp %3, #2 \n\t"
142 "ldr %1, [%4, %3, lsl #2] \n\t"
143 "lsrle %0, %2, #1 \n\t"
144 "smmulgt %0, %1, %2 \n\t"
145 : "=&r"(r), "=&r"(t) : "r"(a), "r"(b), "r"(ff_inverse));
146 return r;
147}
148#elif ARCH_ARM && HAVE_INLINE_ASM
149static inline av_const int FASTDIV(int a, int b)
150{
151 int r, t;
152 __asm__ volatile ("umull %1, %0, %2, %3"
153 : "=&r"(r), "=&r"(t) : "r"(a), "r"(ff_inverse[b]));
154 return r;
155}
156#elif CONFIG_FASTDIV
157# define FASTDIV(a,b) ((uint32_t)((((uint64_t)a)*ff_inverse[b])>>32))
158#else
159# define FASTDIV(a,b) ((a)/(b))
160#endif
161
162extern const uint8_t ff_sqrt_tab[256];
163
164static inline av_const unsigned int ff_sqrt(unsigned int a)
165{
166 unsigned int b;
167
168 if(a<255) return (ff_sqrt_tab[a+1]-1)>>4;
169 else if(a<(1<<12)) b= ff_sqrt_tab[a>>4 ]>>2;
170#if !CONFIG_SMALL
171 else if(a<(1<<14)) b= ff_sqrt_tab[a>>6 ]>>1;
172 else if(a<(1<<16)) b= ff_sqrt_tab[a>>8 ] ;
173#endif
174 else{
175 int s= av_log2_16bit(a>>16)>>1;
176 unsigned int c= a>>(s+2);
177 b= ff_sqrt_tab[c>>(s+8)];
178 b= FASTDIV(c,b) + (b<<s);
179 }
180
181 return b - (a<b*b);
182}
183
184#if ARCH_X86
185#define MASK_ABS(mask, level)\
186 __asm__ volatile(\
187 "cltd \n\t"\
188 "xorl %1, %0 \n\t"\
189 "subl %1, %0 \n\t"\
190 : "+a" (level), "=&d" (mask)\
191 );
192#else
193#define MASK_ABS(mask, level)\
194 mask= level>>31;\
195 level= (level^mask)-mask;
196#endif
197
198#if HAVE_CMOV
199#define COPY3_IF_LT(x,y,a,b,c,d)\
200__asm__ volatile (\
201 "cmpl %0, %3 \n\t"\
202 "cmovl %3, %0 \n\t"\
203 "cmovl %4, %1 \n\t"\
204 "cmovl %5, %2 \n\t"\
205 : "+&r" (x), "+&r" (a), "+r" (c)\
206 : "r" (y), "r" (b), "r" (d)\
207);
208#else
209#define COPY3_IF_LT(x,y,a,b,c,d)\
210if((y)<(x)){\
211 (x)=(y);\
212 (a)=(b);\
213 (c)=(d);\
214}
215#endif
216
217/* avoid usage of dangerous/inappropriate system functions */
218#undef malloc
219#define malloc please_use_av_malloc
220#undef free
221#define free please_use_av_free
222#undef realloc
223#define realloc please_use_av_realloc
224#undef time
225#define time time_is_forbidden_due_to_security_issues
226//#undef rand
227//#define rand rand_is_forbidden_due_to_state_trashing_use_av_random
228//#undef srand
229//#define srand srand_is_forbidden_due_to_state_trashing_use_av_random_init
230#undef random
231#define random random_is_forbidden_due_to_state_trashing_use_av_random
232#undef sprintf
233#define sprintf sprintf_is_forbidden_due_to_security_issues_use_snprintf
234#undef strcat
235#define strcat strcat_is_forbidden_due_to_security_issues_use_av_strlcat
236#undef exit
237#define exit exit_is_forbidden
238#ifndef LIBAVFORMAT_BUILD
239//#undef printf
240//#define printf please_use_av_log_instead_of_printf
241#undef fprintf
242#define fprintf please_use_av_log_instead_of_fprintf
243#undef puts
244#define puts please_use_av_log_instead_of_puts
245#undef perror
246#define perror please_use_av_log_instead_of_perror
247#endif
248
249#define CHECKED_ALLOCZ(p, size)\
250{\
251 p= av_mallocz(size);\
252 if(p==NULL && (size)!=0){\
253 av_log(NULL, AV_LOG_ERROR, "Cannot allocate memory.");\
254 goto fail;\
255 }\
256}
257
258#if defined(__ICC) || defined(__SUNPRO_C)
259 #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n)))
260 #define DECLARE_ASM_CONST(n,t,v) const t __attribute__ ((aligned (n))) v
261#elif defined(__GNUC__)
262 #define DECLARE_ALIGNED(n,t,v) t v __attribute__ ((aligned (n)))
263 #define DECLARE_ASM_CONST(n,t,v) static const t v attribute_used __attribute__ ((aligned (n)))
264#elif defined(_MSC_VER)
265 #define DECLARE_ALIGNED(n,t,v) __declspec(align(n)) t v
266 #define DECLARE_ASM_CONST(n,t,v) __declspec(align(n)) static const t v
267#elif HAVE_INLINE_ASM
268 #error The asm code needs alignment, but we do not know how to do it for this compiler.
269#else
270 #define DECLARE_ALIGNED(n,t,v) t v
271 #define DECLARE_ASM_CONST(n,t,v) static const t v
272#endif
273
274
275#if !HAVE_LLRINT
276static av_always_inline av_const long long llrint(double x)
277{
278 return rint(x);
279}
280#endif /* HAVE_LLRINT */
281
282#if !HAVE_LRINT
283static av_always_inline av_const long int lrint(double x)
284{
285 return rint(x);
286}
287#endif /* HAVE_LRINT */
288
289#if !HAVE_LRINTF
290static av_always_inline av_const long int lrintf(float x)
291{
292 return (int)(rint(x));
293}
294#endif /* HAVE_LRINTF */
295
296#if !HAVE_ROUND
297static av_always_inline av_const double round(double x)
298{
299 return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
300}
301#endif /* HAVE_ROUND */
302
303#if !HAVE_ROUNDF
304static av_always_inline av_const float roundf(float x)
305{
306 return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
307}
308#endif /* HAVE_ROUNDF */
309
310#if !HAVE_TRUNCF
311static av_always_inline av_const float truncf(float x)
312{
313 return (x > 0) ? floor(x) : ceil(x);
314}
315#endif /* HAVE_TRUNCF */
316
317/**
318 * Returns NULL if CONFIG_SMALL is true, otherwise the argument
319 * without modification. Used to disable the definition of strings
320 * (for example AVCodec long_names).
321 */
322#if CONFIG_SMALL
323# define NULL_IF_CONFIG_SMALL(x) NULL
324#else
325# define NULL_IF_CONFIG_SMALL(x) x
326#endif
327
328#endif /* AVUTIL_INTERNAL_H */
diff --git a/apps/codecs/libatrac/libavutil/log.c b/apps/codecs/libatrac/libavutil/log.c
deleted file mode 100644
index 4bb9652c2c..0000000000
--- a/apps/codecs/libatrac/libavutil/log.c
+++ /dev/null
@@ -1,89 +0,0 @@
1/*
2 * log functions
3 * Copyright (c) 2003 Michel Bardiaux
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
22/**
23 * @file libavutil/log.c
24 * logging functions
25 */
26
27#include "avutil.h"
28#include "log.h"
29
30int av_log_level = AV_LOG_INFO;
31
32void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl)
33{
34 static int print_prefix=1;
35 static int count;
36 static char line[1024], prev[1024];
37 AVClass* avc= ptr ? *(AVClass**)ptr : NULL;
38 if(level>av_log_level)
39 return;
40#undef fprintf
41 if(print_prefix && avc) {
42 snprintf(line, sizeof(line), "[%s @ %p]", avc->item_name(ptr), ptr);
43 }else
44 line[0]=0;
45
46 vsnprintf(line + strlen(line), sizeof(line) - strlen(line), fmt, vl);
47
48 print_prefix= line[strlen(line)-1] == '\n';
49 if(print_prefix && !strcmp(line, prev)){
50 count++;
51 return;
52 }
53 if(count>0){
54 fprintf(stderr, " Last message repeated %d times\n", count);
55 count=0;
56 }
57 fputs(line, stderr);
58 strcpy(prev, line);
59}
60
61static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback;
62
63void av_log(void* avcl, int level, const char *fmt, ...)
64{
65 va_list vl;
66 va_start(vl, fmt);
67 av_vlog(avcl, level, fmt, vl);
68 va_end(vl);
69}
70
71void av_vlog(void* avcl, int level, const char *fmt, va_list vl)
72{
73 av_log_callback(avcl, level, fmt, vl);
74}
75
76int av_log_get_level(void)
77{
78 return av_log_level;
79}
80
81void av_log_set_level(int level)
82{
83 av_log_level = level;
84}
85
86void av_log_set_callback(void (*callback)(void*, int, const char*, va_list))
87{
88 av_log_callback = callback;
89}
diff --git a/apps/codecs/libatrac/libavutil/log.h b/apps/codecs/libatrac/libavutil/log.h
deleted file mode 100644
index 1206a2fc38..0000000000
--- a/apps/codecs/libatrac/libavutil/log.h
+++ /dev/null
@@ -1,116 +0,0 @@
1/*
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef AVUTIL_LOG_H
22#define AVUTIL_LOG_H
23
24#include <stdarg.h>
25#include "avutil.h"
26
27/**
28 * Describes the class of an AVClass context structure. That is an
29 * arbitrary struct of which the first field is a pointer to an
30 * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.).
31 */
32typedef struct AVCLASS AVClass;
33struct AVCLASS {
34 /**
35 * The name of the class; usually it is the same name as the
36 * context structure type to which the AVClass is associated.
37 */
38 const char* class_name;
39
40 /**
41 * A pointer to a function which returns the name of a context
42 * instance \p ctx associated with the class.
43 */
44 const char* (*item_name)(void* ctx);
45
46 /**
47 * a pointer to the first option specified in the class if any or NULL
48 *
49 * @see av_set_default_options()
50 */
51 const struct AVOption *option;
52};
53
54/* av_log API */
55
56#define AV_LOG_QUIET -8
57
58/**
59 * Something went really wrong and we will crash now.
60 */
61#define AV_LOG_PANIC 0
62
63/**
64 * Something went wrong and recovery is not possible.
65 * For example, no header was found for a format which depends
66 * on headers or an illegal combination of parameters is used.
67 */
68#define AV_LOG_FATAL 8
69
70/**
71 * Something went wrong and cannot losslessly be recovered.
72 * However, not all future data is affected.
73 */
74#define AV_LOG_ERROR 16
75
76/**
77 * Something somehow does not look correct. This may or may not
78 * lead to problems. An example would be the use of '-vstrict -2'.
79 */
80#define AV_LOG_WARNING 24
81
82#define AV_LOG_INFO 32
83#define AV_LOG_VERBOSE 40
84
85/**
86 * Stuff which is only useful for libav* developers.
87 */
88#define AV_LOG_DEBUG 48
89
90/**
91 * Sends the specified message to the log if the level is less than or equal
92 * to the current av_log_level. By default, all logging messages are sent to
93 * stderr. This behavior can be altered by setting a different av_vlog callback
94 * function.
95 *
96 * @param avcl A pointer to an arbitrary struct of which the first field is a
97 * pointer to an AVClass struct.
98 * @param level The importance level of the message, lower values signifying
99 * higher importance.
100 * @param fmt The format string (printf-compatible) that specifies how
101 * subsequent arguments are converted to output.
102 * @see av_vlog
103 */
104#ifdef __GNUC__
105void av_log(void*, int level, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 3, 4)));
106#else
107void av_log(void*, int level, const char *fmt, ...);
108#endif
109
110void av_vlog(void*, int level, const char *fmt, va_list);
111int av_log_get_level(void);
112void av_log_set_level(int);
113void av_log_set_callback(void (*)(void*, int, const char*, va_list));
114void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl);
115
116#endif /* AVUTIL_LOG_H */
diff --git a/apps/codecs/libatrac/libavutil/mem.c b/apps/codecs/libatrac/libavutil/mem.c
deleted file mode 100644
index 9721222e50..0000000000
--- a/apps/codecs/libatrac/libavutil/mem.c
+++ /dev/null
@@ -1,159 +0,0 @@
1/*
2 * default memory allocator for libavutil
3 * Copyright (c) 2002 Fabrice Bellard
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
22/**
23 * @file libavutil/mem.c
24 * default memory allocator for libavutil
25 */
26
27//#include "ffmpeg_config.h"
28
29#include <limits.h>
30#include <stdlib.h>
31#include <string.h>
32#if HAVE_MALLOC_H
33#include <malloc.h>
34#endif
35
36#include "mem.h"
37
38/* here we can use OS-dependent allocation functions */
39#undef free
40#undef malloc
41#undef realloc
42
43/* You can redefine av_malloc and av_free in your project to use your
44 memory allocator. You do not need to suppress this file because the
45 linker will do it automatically. */
46
47void *av_malloc(unsigned int size)
48{
49 void *ptr = NULL;
50#if CONFIG_MEMALIGN_HACK
51 long diff;
52#endif
53
54 /* let's disallow possible ambiguous cases */
55 if(size > (INT_MAX-16) )
56 return NULL;
57
58#if CONFIG_MEMALIGN_HACK
59 ptr = malloc(size+16);
60 if(!ptr)
61 return ptr;
62 diff= ((-(long)ptr - 1)&15) + 1;
63 ptr = (char*)ptr + diff;
64 ((char*)ptr)[-1]= diff;
65#elif HAVE_POSIX_MEMALIGN
66 if (posix_memalign(&ptr,16,size))
67 ptr = NULL;
68#elif HAVE_MEMALIGN
69 ptr = memalign(16,size);
70 /* Why 64?
71 Indeed, we should align it:
72 on 4 for 386
73 on 16 for 486
74 on 32 for 586, PPro - K6-III
75 on 64 for K7 (maybe for P3 too).
76 Because L1 and L2 caches are aligned on those values.
77 But I don't want to code such logic here!
78 */
79 /* Why 16?
80 Because some CPUs need alignment, for example SSE2 on P4, & most RISC CPUs
81 it will just trigger an exception and the unaligned load will be done in the
82 exception handler or it will just segfault (SSE2 on P4).
83 Why not larger? Because I did not see a difference in benchmarks ...
84 */
85 /* benchmarks with P3
86 memalign(64)+1 3071,3051,3032
87 memalign(64)+2 3051,3032,3041
88 memalign(64)+4 2911,2896,2915
89 memalign(64)+8 2545,2554,2550
90 memalign(64)+16 2543,2572,2563
91 memalign(64)+32 2546,2545,2571
92 memalign(64)+64 2570,2533,2558
93
94 BTW, malloc seems to do 8-byte alignment by default here.
95 */
96#else
97 ptr = malloc(size);
98#endif
99 return ptr;
100}
101
102void *av_realloc(void *ptr, unsigned int size)
103{
104#if CONFIG_MEMALIGN_HACK
105 int diff;
106#endif
107
108 /* let's disallow possible ambiguous cases */
109 if(size > (INT_MAX-16) )
110 return NULL;
111
112#if CONFIG_MEMALIGN_HACK
113 //FIXME this isn't aligned correctly, though it probably isn't needed
114 if(!ptr) return av_malloc(size);
115 diff= ((char*)ptr)[-1];
116 return (char*)realloc((char*)ptr - diff, size + diff) + diff;
117#else
118 return realloc(ptr, size);
119#endif
120}
121
122void av_free(void *ptr)
123{
124 /* XXX: this test should not be needed on most libcs */
125 if (ptr)
126#if CONFIG_MEMALIGN_HACK
127 free((char*)ptr - ((char*)ptr)[-1]);
128#else
129 free(ptr);
130#endif
131}
132
133void av_freep(void *arg)
134{
135 void **ptr= (void**)arg;
136 av_free(*ptr);
137 *ptr = NULL;
138}
139
140void *av_mallocz(unsigned int size)
141{
142 void *ptr = av_malloc(size);
143 if (ptr)
144 memset(ptr, 0, size);
145 return ptr;
146}
147
148char *av_strdup(const char *s)
149{
150 char *ptr= NULL;
151 if(s){
152 int len = strlen(s) + 1;
153 ptr = av_malloc(len);
154 if (ptr)
155 memcpy(ptr, s, len);
156 }
157 return ptr;
158}
159
diff --git a/apps/codecs/libatrac/libavutil/mem.h b/apps/codecs/libatrac/libavutil/mem.h
deleted file mode 100644
index e50553aefe..0000000000
--- a/apps/codecs/libatrac/libavutil/mem.h
+++ /dev/null
@@ -1,104 +0,0 @@
1/*
2 * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21/**
22 * @file libavutil/mem.h
23 * memory handling functions
24 */
25
26#ifndef AVUTIL_MEM_H
27#define AVUTIL_MEM_H
28
29#include "common.h"
30
31#if AV_GCC_VERSION_AT_LEAST(3,1)
32 #define av_malloc_attrib __attribute__((__malloc__))
33#else
34 #define av_malloc_attrib
35#endif
36
37#if (!defined(__ICC) || __ICC > 1100) && AV_GCC_VERSION_AT_LEAST(4,3)
38 #define av_alloc_size(n) __attribute__((alloc_size(n)))
39#else
40 #define av_alloc_size(n)
41#endif
42
43/**
44 * Allocates a block of \p size bytes with alignment suitable for all
45 * memory accesses (including vectors if available on the CPU).
46 * @param size Size in bytes for the memory block to be allocated.
47 * @return Pointer to the allocated block, NULL if the block cannot
48 * be allocated.
49 * @see av_mallocz()
50 */
51void *av_malloc(unsigned int size) av_malloc_attrib av_alloc_size(1);
52
53/**
54 * Allocates or reallocates a block of memory.
55 * If \p ptr is NULL and \p size > 0, allocates a new block. If \p
56 * size is zero, frees the memory block pointed to by \p ptr.
57 * @param size Size in bytes for the memory block to be allocated or
58 * reallocated.
59 * @param ptr Pointer to a memory block already allocated with
60 * av_malloc(z)() or av_realloc() or NULL.
61 * @return Pointer to a newly reallocated block or NULL if the block
62 * cannot be reallocated or the function is used to free the memory block.
63 * @see av_fast_realloc()
64 */
65void *av_realloc(void *ptr, unsigned int size) av_alloc_size(2);
66
67/**
68 * Frees a memory block which has been allocated with av_malloc(z)() or
69 * av_realloc().
70 * @param ptr Pointer to the memory block which should be freed.
71 * @note ptr = NULL is explicitly allowed.
72 * @note It is recommended that you use av_freep() instead.
73 * @see av_freep()
74 */
75void av_free(void *ptr);
76
77/**
78 * Allocates a block of \p size bytes with alignment suitable for all
79 * memory accesses (including vectors if available on the CPU) and
80 * zeroes all the bytes of the block.
81 * @param size Size in bytes for the memory block to be allocated.
82 * @return Pointer to the allocated block, NULL if it cannot be allocated.
83 * @see av_malloc()
84 */
85void *av_mallocz(unsigned int size) av_malloc_attrib av_alloc_size(1);
86
87/**
88 * Duplicates the string \p s.
89 * @param s string to be duplicated
90 * @return Pointer to a newly allocated string containing a
91 * copy of \p s or NULL if the string cannot be allocated.
92 */
93char *av_strdup(const char *s) av_malloc_attrib;
94
95/**
96 * Frees a memory block which has been allocated with av_malloc(z)() or
97 * av_realloc() and set the pointer pointing to it to NULL.
98 * @param ptr Pointer to the pointer to the memory block which should
99 * be freed.
100 * @see av_free()
101 */
102void av_freep(void *ptr);
103
104#endif /* AVUTIL_MEM_H */