Mercurial > libavcodec.hg
annotate utils.c @ 5542:b0a566346fb1 libavcodec
Add attribute that forces alignment of stack to functions that need it.
Necessary for systems that don't align by default to 16 bytes, required by some
SSE instructions.
Requires GCC >= 4.2.
Based on patch by Ga¸«³l Chardon.
author | ramiro |
---|---|
date | Mon, 13 Aug 2007 15:28:29 +0000 |
parents | 3d10c3e84f96 |
children | b763947a7676 |
rev | line source |
---|---|
0 | 1 /* |
2 * utils for libavcodec | |
429 | 3 * Copyright (c) 2001 Fabrice Bellard. |
1739
07a484280a82
copyright year update of the files i touched and remembered, things look annoyingly unmaintained otherwise
michael
parents:
1730
diff
changeset
|
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> |
0 | 5 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
6 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
7 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
8 * FFmpeg is free software; you can redistribute it and/or |
429 | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
11 * version 2.1 of the License, or (at your option) any later version. |
0 | 12 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
13 * FFmpeg is distributed in the hope that it will be useful, |
0 | 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 * Lesser General Public License for more details. | |
0 | 17 * |
429 | 18 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
19 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
3031
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 21 */ |
2967 | 22 |
1106 | 23 /** |
24 * @file utils.c | |
25 * utils. | |
26 */ | |
2967 | 27 |
394 | 28 #include "avcodec.h" |
0 | 29 #include "dsputil.h" |
341 | 30 #include "mpegvideo.h" |
2002
b737b5e96ee0
use AVInteger in av_rescale() so it can finally do 64*64/64 instead of just 64*32/32
michael
parents:
1996
diff
changeset
|
31 #include "integer.h" |
2880 | 32 #include "opt.h" |
3169 | 33 #include "crc.h" |
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
34 #include <stdarg.h> |
2002
b737b5e96ee0
use AVInteger in av_rescale() so it can finally do 64*64/64 instead of just 64*32/32
michael
parents:
1996
diff
changeset
|
35 #include <limits.h> |
2862 | 36 #include <float.h> |
5284 | 37 #if !defined(HAVE_MKSTEMP) |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
38 #include <fcntl.h> |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
39 #endif |
0 | 40 |
2652
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
41 const uint8_t ff_reverse[256]={ |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
42 0x00,0x80,0x40,0xC0,0x20,0xA0,0x60,0xE0,0x10,0x90,0x50,0xD0,0x30,0xB0,0x70,0xF0, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
43 0x08,0x88,0x48,0xC8,0x28,0xA8,0x68,0xE8,0x18,0x98,0x58,0xD8,0x38,0xB8,0x78,0xF8, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
44 0x04,0x84,0x44,0xC4,0x24,0xA4,0x64,0xE4,0x14,0x94,0x54,0xD4,0x34,0xB4,0x74,0xF4, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
45 0x0C,0x8C,0x4C,0xCC,0x2C,0xAC,0x6C,0xEC,0x1C,0x9C,0x5C,0xDC,0x3C,0xBC,0x7C,0xFC, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
46 0x02,0x82,0x42,0xC2,0x22,0xA2,0x62,0xE2,0x12,0x92,0x52,0xD2,0x32,0xB2,0x72,0xF2, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
47 0x0A,0x8A,0x4A,0xCA,0x2A,0xAA,0x6A,0xEA,0x1A,0x9A,0x5A,0xDA,0x3A,0xBA,0x7A,0xFA, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
48 0x06,0x86,0x46,0xC6,0x26,0xA6,0x66,0xE6,0x16,0x96,0x56,0xD6,0x36,0xB6,0x76,0xF6, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
49 0x0E,0x8E,0x4E,0xCE,0x2E,0xAE,0x6E,0xEE,0x1E,0x9E,0x5E,0xDE,0x3E,0xBE,0x7E,0xFE, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
50 0x01,0x81,0x41,0xC1,0x21,0xA1,0x61,0xE1,0x11,0x91,0x51,0xD1,0x31,0xB1,0x71,0xF1, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
51 0x09,0x89,0x49,0xC9,0x29,0xA9,0x69,0xE9,0x19,0x99,0x59,0xD9,0x39,0xB9,0x79,0xF9, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
52 0x05,0x85,0x45,0xC5,0x25,0xA5,0x65,0xE5,0x15,0x95,0x55,0xD5,0x35,0xB5,0x75,0xF5, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
53 0x0D,0x8D,0x4D,0xCD,0x2D,0xAD,0x6D,0xED,0x1D,0x9D,0x5D,0xDD,0x3D,0xBD,0x7D,0xFD, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
54 0x03,0x83,0x43,0xC3,0x23,0xA3,0x63,0xE3,0x13,0x93,0x53,0xD3,0x33,0xB3,0x73,0xF3, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
55 0x0B,0x8B,0x4B,0xCB,0x2B,0xAB,0x6B,0xEB,0x1B,0x9B,0x5B,0xDB,0x3B,0xBB,0x7B,0xFB, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
56 0x07,0x87,0x47,0xC7,0x27,0xA7,0x67,0xE7,0x17,0x97,0x57,0xD7,0x37,0xB7,0x77,0xF7, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
57 0x0F,0x8F,0x4F,0xCF,0x2F,0xAF,0x6F,0xEF,0x1F,0x9F,0x5F,0xDF,0x3F,0xBF,0x7F,0xFF, |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
58 }; |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
59 |
2806 | 60 static int volatile entangled_thread_counter=0; |
61 | |
1057 | 62 void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size) |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
63 { |
2967 | 64 if(min_size < *size) |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
65 return ptr; |
2967 | 66 |
2422 | 67 *size= FFMAX(17*min_size/16 + 32, min_size); |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
68 |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
69 return av_realloc(ptr, *size); |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
70 } |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
71 |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
72 static unsigned int last_static = 0; |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
73 static unsigned int allocated_static = 0; |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
74 static void** array_static = NULL; |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
75 |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
76 void *av_mallocz_static(unsigned int size) |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
77 { |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
78 void *ptr = av_mallocz(size); |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
79 |
2967 | 80 if(ptr){ |
1901 | 81 array_static =av_fast_realloc(array_static, &allocated_static, sizeof(void*)*(last_static+1)); |
2422 | 82 if(!array_static) |
83 return NULL; | |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
84 array_static[last_static++] = ptr; |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
85 } |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
86 |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
87 return ptr; |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
88 } |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
89 |
4577
88cf097ebe75
av_realloc_static() is an internal function and therefore should use the ff_ prefix instead of av_.
takis
parents:
4567
diff
changeset
|
90 void *ff_realloc_static(void *ptr, unsigned int size) |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
91 { |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
92 int i; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
93 if(!ptr) |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
94 return av_mallocz_static(size); |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
95 /* Look for the old ptr */ |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
96 for(i = 0; i < last_static; i++) { |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
97 if(array_static[i] == ptr) { |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
98 array_static[i] = av_realloc(array_static[i], size); |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
99 return array_static[i]; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
100 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
101 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
102 return NULL; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
103 |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
104 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
105 |
1282 | 106 void av_free_static(void) |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
107 { |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
108 while(last_static){ |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
109 av_freep(&array_static[--last_static]); |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
110 } |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
111 av_freep(&array_static); |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
112 } |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
113 |
1854 | 114 /** |
2840
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
115 * Call av_free_static automatically before it's too late |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
116 */ |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
117 |
3075 | 118 static void do_free(void) __attribute__ ((destructor)); |
2840
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
119 |
3075 | 120 static void do_free(void) |
2840
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
121 { |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
122 av_free_static(); |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
123 } |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
124 |
400 | 125 |
0 | 126 /* encoder management */ |
2169
db8baace74d8
Minor Patch for shared libs on Mac OSX by (Bill May <wmay at cisco dot com>)
michael
parents:
2167
diff
changeset
|
127 AVCodec *first_avcodec = NULL; |
0 | 128 |
129 void register_avcodec(AVCodec *format) | |
130 { | |
131 AVCodec **p; | |
132 p = &first_avcodec; | |
133 while (*p != NULL) p = &(*p)->next; | |
134 *p = format; | |
135 format->next = NULL; | |
136 } | |
137 | |
2270 | 138 void avcodec_set_dimensions(AVCodecContext *s, int width, int height){ |
139 s->coded_width = width; | |
140 s->coded_height= height; | |
141 s->width = -((-width )>>s->lowres); | |
142 s->height= -((-height)>>s->lowres); | |
143 } | |
144 | |
1214 | 145 typedef struct InternalBuffer{ |
903 | 146 int last_pic_num; |
1214 | 147 uint8_t *base[4]; |
903 | 148 uint8_t *data[4]; |
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
149 int linesize[4]; |
5522
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
150 int width, height; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
151 enum PixelFormat pix_fmt; |
1214 | 152 }InternalBuffer; |
153 | |
154 #define INTERNAL_BUFFER_SIZE 32 | |
903 | 155 |
1538 | 156 #define ALIGN(x, a) (((x)+(a)-1)&~((a)-1)) |
157 | |
158 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){ | |
2967 | 159 int w_align= 1; |
160 int h_align= 1; | |
161 | |
1538 | 162 switch(s->pix_fmt){ |
163 case PIX_FMT_YUV420P: | |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4453
diff
changeset
|
164 case PIX_FMT_YUYV422: |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2125
diff
changeset
|
165 case PIX_FMT_UYVY422: |
1538 | 166 case PIX_FMT_YUV422P: |
167 case PIX_FMT_YUV444P: | |
168 case PIX_FMT_GRAY8: | |
4066 | 169 case PIX_FMT_GRAY16BE: |
170 case PIX_FMT_GRAY16LE: | |
1538 | 171 case PIX_FMT_YUVJ420P: |
172 case PIX_FMT_YUVJ422P: | |
173 case PIX_FMT_YUVJ444P: | |
174 w_align= 16; //FIXME check for non mpeg style codecs and use less alignment | |
175 h_align= 16; | |
176 break; | |
177 case PIX_FMT_YUV411P: | |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4453
diff
changeset
|
178 case PIX_FMT_UYYVYY411: |
1538 | 179 w_align=32; |
180 h_align=8; | |
181 break; | |
182 case PIX_FMT_YUV410P: | |
183 if(s->codec_id == CODEC_ID_SVQ1){ | |
184 w_align=64; | |
185 h_align=64; | |
186 } | |
2104 | 187 case PIX_FMT_RGB555: |
188 if(s->codec_id == CODEC_ID_RPZA){ | |
189 w_align=4; | |
190 h_align=4; | |
191 } | |
192 case PIX_FMT_PAL8: | |
193 if(s->codec_id == CODEC_ID_SMC){ | |
194 w_align=4; | |
195 h_align=4; | |
196 } | |
1538 | 197 break; |
2418
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
198 case PIX_FMT_BGR24: |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
199 if((s->codec_id == CODEC_ID_MSZH) || (s->codec_id == CODEC_ID_ZLIB)){ |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
200 w_align=4; |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
201 h_align=4; |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
202 } |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
203 break; |
1538 | 204 default: |
205 w_align= 1; | |
206 h_align= 1; | |
207 break; | |
208 } | |
209 | |
210 *width = ALIGN(*width , w_align); | |
211 *height= ALIGN(*height, h_align); | |
212 } | |
213 | |
2422 | 214 int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h){ |
215 if((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/4) | |
216 return 0; | |
2967 | 217 |
2422 | 218 av_log(av_log_ctx, AV_LOG_ERROR, "picture size invalid (%ux%u)\n", w, h); |
219 return -1; | |
220 } | |
221 | |
925 | 222 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ |
903 | 223 int i; |
1538 | 224 int w= s->width; |
225 int h= s->height; | |
1214 | 226 InternalBuffer *buf; |
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
227 int *picture_number; |
2422 | 228 |
4453
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
229 if(pic->data[0]!=NULL) { |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
230 av_log(s, AV_LOG_ERROR, "pic->data[0]!=NULL in avcodec_default_get_buffer\n"); |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
231 return -1; |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
232 } |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
233 if(s->internal_buffer_count >= INTERNAL_BUFFER_SIZE) { |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
234 av_log(s, AV_LOG_ERROR, "internal_buffer_count overflow (missing release_buffer?)\n"); |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
235 return -1; |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
236 } |
903 | 237 |
2422 | 238 if(avcodec_check_dimensions(s,w,h)) |
239 return -1; | |
240 | |
1214 | 241 if(s->internal_buffer==NULL){ |
242 s->internal_buffer= av_mallocz(INTERNAL_BUFFER_SIZE*sizeof(InternalBuffer)); | |
243 } | |
244 #if 0 | |
245 s->internal_buffer= av_fast_realloc( | |
2967 | 246 s->internal_buffer, |
247 &s->internal_buffer_size, | |
1214 | 248 sizeof(InternalBuffer)*FFMAX(99, s->internal_buffer_count+1)/*FIXME*/ |
249 ); | |
250 #endif | |
2967 | 251 |
1214 | 252 buf= &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; |
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
253 picture_number= &(((InternalBuffer*)s->internal_buffer)[INTERNAL_BUFFER_SIZE-1]).last_pic_num; //FIXME ugly hack |
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
254 (*picture_number)++; |
2967 | 255 |
5522
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
256 if(buf->base[0] && (buf->width != w || buf->height != h || buf->pix_fmt != s->pix_fmt)){ |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
257 for(i=0; i<4; i++){ |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
258 av_freep(&buf->base[i]); |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
259 buf->data[i]= NULL; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
260 } |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
261 } |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
262 |
1214 | 263 if(buf->base[0]){ |
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
264 pic->age= *picture_number - buf->last_pic_num; |
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
265 buf->last_pic_num= *picture_number; |
903 | 266 }else{ |
1538 | 267 int h_chroma_shift, v_chroma_shift; |
2950 | 268 int pixel_size, size[3]; |
269 AVPicture picture; | |
270 | |
903 | 271 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); |
1538 | 272 |
273 avcodec_align_dimensions(s, &w, &h); | |
2967 | 274 |
903 | 275 if(!(s->flags&CODEC_FLAG_EMU_EDGE)){ |
276 w+= EDGE_WIDTH*2; | |
277 h+= EDGE_WIDTH*2; | |
278 } | |
4986 | 279 avcodec_align_dimensions(s, &w, &h); |
280 | |
2950 | 281 avpicture_fill(&picture, NULL, s->pix_fmt, w, h); |
282 pixel_size= picture.linesize[0]*8 / w; | |
283 //av_log(NULL, AV_LOG_ERROR, "%d %d %d %d\n", (int)picture.data[1], w, h, s->pix_fmt); | |
284 assert(pixel_size>=1); | |
5127 | 285 //FIXME next ensures that linesize= 2^x uvlinesize, that is needed because some MC code assumes it |
2950 | 286 if(pixel_size == 3*8) |
287 w= ALIGN(w, STRIDE_ALIGN<<h_chroma_shift); | |
288 else | |
289 w= ALIGN(pixel_size*w, STRIDE_ALIGN<<(h_chroma_shift+3)) / pixel_size; | |
290 size[1] = avpicture_fill(&picture, NULL, s->pix_fmt, w, h); | |
291 size[0] = picture.linesize[0] * h; | |
292 size[1] -= size[0]; | |
293 if(picture.data[2]) | |
294 size[1]= size[2]= size[1]/2; | |
295 else | |
296 size[2]= 0; | |
297 | |
1214 | 298 buf->last_pic_num= -256*256*256*64; |
2950 | 299 memset(buf->base, 0, sizeof(buf->base)); |
300 memset(buf->data, 0, sizeof(buf->data)); | |
903 | 301 |
2950 | 302 for(i=0; i<3 && size[i]; i++){ |
1165 | 303 const int h_shift= i==0 ? 0 : h_chroma_shift; |
304 const int v_shift= i==0 ? 0 : v_chroma_shift; | |
903 | 305 |
2950 | 306 buf->linesize[i]= picture.linesize[i]; |
903 | 307 |
2950 | 308 buf->base[i]= av_malloc(size[i]+16); //FIXME 16 |
1214 | 309 if(buf->base[i]==NULL) return -1; |
2950 | 310 memset(buf->base[i], 128, size[i]); |
311 | |
312 // no edge if EDEG EMU or not planar YUV, we check for PAL8 redundantly to protect against a exploitable bug regression ... | |
2967 | 313 if((s->flags&CODEC_FLAG_EMU_EDGE) || (s->pix_fmt == PIX_FMT_PAL8) || !size[2]) |
1214 | 314 buf->data[i] = buf->base[i]; |
903 | 315 else |
2324 | 316 buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), STRIDE_ALIGN); |
903 | 317 } |
5522
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
318 buf->width = s->width; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
319 buf->height = s->height; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
320 buf->pix_fmt= s->pix_fmt; |
903 | 321 pic->age= 256*256*256*64; |
322 } | |
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
323 pic->type= FF_BUFFER_TYPE_INTERNAL; |
903 | 324 |
1214 | 325 for(i=0; i<4; i++){ |
326 pic->base[i]= buf->base[i]; | |
327 pic->data[i]= buf->data[i]; | |
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
328 pic->linesize[i]= buf->linesize[i]; |
1214 | 329 } |
330 s->internal_buffer_count++; | |
331 | |
903 | 332 return 0; |
333 } | |
334 | |
925 | 335 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ |
903 | 336 int i; |
4558 | 337 InternalBuffer *buf, *last; |
1214 | 338 |
924 | 339 assert(pic->type==FF_BUFFER_TYPE_INTERNAL); |
1396 | 340 assert(s->internal_buffer_count); |
1214 | 341 |
1455 | 342 buf = NULL; /* avoids warning */ |
1214 | 343 for(i=0; i<s->internal_buffer_count; i++){ //just 3-5 checks so is not worth to optimize |
344 buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
345 if(buf->data[0] == pic->data[0]) | |
346 break; | |
347 } | |
348 assert(i < s->internal_buffer_count); | |
349 s->internal_buffer_count--; | |
350 last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; | |
351 | |
4558 | 352 FFSWAP(InternalBuffer, *buf, *last); |
1214 | 353 |
354 for(i=0; i<3; i++){ | |
903 | 355 pic->data[i]=NULL; |
1214 | 356 // pic->base[i]=NULL; |
357 } | |
903 | 358 //printf("R%X\n", pic->opaque); |
359 } | |
360 | |
1630 | 361 int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic){ |
362 AVFrame temp_pic; | |
363 int i; | |
364 | |
365 /* If no picture return a new buffer */ | |
366 if(pic->data[0] == NULL) { | |
367 /* We will copy from buffer, so must be readable */ | |
368 pic->buffer_hints |= FF_BUFFER_HINTS_READABLE; | |
369 return s->get_buffer(s, pic); | |
370 } | |
371 | |
372 /* If internal buffer type return the same buffer */ | |
373 if(pic->type == FF_BUFFER_TYPE_INTERNAL) | |
374 return 0; | |
375 | |
376 /* | |
377 * Not internal type and reget_buffer not overridden, emulate cr buffer | |
378 */ | |
379 temp_pic = *pic; | |
380 for(i = 0; i < 4; i++) | |
381 pic->data[i] = pic->base[i] = NULL; | |
382 pic->opaque = NULL; | |
383 /* Allocate new frame */ | |
384 if (s->get_buffer(s, pic)) | |
385 return -1; | |
386 /* Copy image data from old buffer to new buffer */ | |
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4621
diff
changeset
|
387 av_picture_copy((AVPicture*)pic, (AVPicture*)&temp_pic, s->pix_fmt, s->width, |
1630 | 388 s->height); |
389 s->release_buffer(s, &temp_pic); // Release old frame | |
390 return 0; | |
391 } | |
392 | |
1799 | 393 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){ |
394 int i; | |
395 | |
396 for(i=0; i<count; i++){ | |
397 int r= func(c, arg[i]); | |
398 if(ret) ret[i]= r; | |
399 } | |
400 return 0; | |
401 } | |
402 | |
1858 | 403 enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt){ |
998 | 404 return fmt[0]; |
405 } | |
406 | |
1856 | 407 static const char* context_to_name(void* ptr) { |
408 AVCodecContext *avc= ptr; | |
409 | |
410 if(avc && avc->codec && avc->codec->name) | |
2967 | 411 return avc->codec->name; |
1856 | 412 else |
413 return "NULL"; | |
414 } | |
415 | |
3719 | 416 #define OFFSET(x) offsetof(AVCodecContext,x) |
5127 | 417 #define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C |
2873 | 418 //these names are too long to be readable |
419 #define V AV_OPT_FLAG_VIDEO_PARAM | |
420 #define A AV_OPT_FLAG_AUDIO_PARAM | |
421 #define S AV_OPT_FLAG_SUBTITLE_PARAM | |
2967 | 422 #define E AV_OPT_FLAG_ENCODING_PARAM |
2873 | 423 #define D AV_OPT_FLAG_DECODING_PARAM |
2862 | 424 |
3720
c52a1096385e
Synchronize the defaults specified in the AVOptions[] array to the defaults
takis
parents:
3719
diff
changeset
|
425 #define AV_CODEC_DEFAULT_BITRATE 200*1000 |
3704 | 426 |
3420 | 427 static const AVOption options[]={ |
4631 | 428 {"b", "set bitrate (in bits/s)", OFFSET(bit_rate), FF_OPT_TYPE_INT, AV_CODEC_DEFAULT_BITRATE, INT_MIN, INT_MAX, V|E}, |
429 {"ab", "set bitrate (in bits/s)", OFFSET(bit_rate), FF_OPT_TYPE_INT, 64*1000, INT_MIN, INT_MAX, A|E}, | |
4325 | 430 {"bt", "set video bitrate tolerance (in bits/s)", OFFSET(bit_rate_tolerance), FF_OPT_TYPE_INT, AV_CODEC_DEFAULT_BITRATE*20, 1, INT_MAX, V|E}, |
2877 | 431 {"flags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, V|A|E|D, "flags"}, |
2881 | 432 {"mv4", "use four motion vector by macroblock (mpeg4)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_4MV, INT_MIN, INT_MAX, V|E, "flags"}, |
433 {"obmc", "use overlapped block motion compensation (h263+)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_OBMC, INT_MIN, INT_MAX, V|E, "flags"}, | |
434 {"qpel", "use 1/4 pel motion compensation", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_QPEL, INT_MIN, INT_MAX, V|E, "flags"}, | |
435 {"loop", "use loop filter", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_LOOP_FILTER, INT_MIN, INT_MAX, V|E, "flags"}, | |
436 {"qscale", "use fixed qscale", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_QSCALE, INT_MIN, INT_MAX, 0, "flags"}, | |
437 {"gmc", "use gmc", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GMC, INT_MIN, INT_MAX, V|E, "flags"}, | |
438 {"mv0", "always try a mb with mv=<0,0>", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_MV0, INT_MIN, INT_MAX, V|E, "flags"}, | |
439 {"part", "use data partitioning", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PART, INT_MIN, INT_MAX, V|E, "flags"}, | |
440 {"input_preserved", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INPUT_PRESERVED, INT_MIN, INT_MAX, 0, "flags"}, | |
441 {"pass1", "use internal 2pass ratecontrol in first pass mode", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PASS1, INT_MIN, INT_MAX, 0, "flags"}, | |
442 {"pass2", "use internal 2pass ratecontrol in second pass mode", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PASS2, INT_MIN, INT_MAX, 0, "flags"}, | |
443 {"extern_huff", "use external huffman table (for mjpeg)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_EXTERN_HUFF, INT_MIN, INT_MAX, 0, "flags"}, | |
444 {"gray", "only decode/encode grayscale", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GRAY, INT_MIN, INT_MAX, V|E|D, "flags"}, | |
445 {"emu_edge", "don't draw edges", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_EMU_EDGE, INT_MIN, INT_MAX, 0, "flags"}, | |
446 {"psnr", "error[?] variables will be set during encoding", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PSNR, INT_MIN, INT_MAX, V|E, "flags"}, | |
447 {"truncated", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRUNCATED, INT_MIN, INT_MAX, 0, "flags"}, | |
448 {"naq", "normalize adaptive quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_NORMALIZE_AQP, INT_MIN, INT_MAX, V|E, "flags"}, | |
449 {"ildct", "use interlaced dct", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INTERLACED_DCT, INT_MIN, INT_MAX, V|E, "flags"}, | |
4189
3c98b0938897
add low delay forcing option for mpeg1/2 encoding
bcoudurier
parents:
4158
diff
changeset
|
450 {"low_delay", "force low delay", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_LOW_DELAY, INT_MIN, INT_MAX, V|D|E, "flags"}, |
2881 | 451 {"alt", "enable alternate scantable (mpeg2/mpeg4)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_ALT_SCAN, INT_MIN, INT_MAX, V|E, "flags"}, |
452 {"trell", "use trellis quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRELLIS_QUANT, INT_MIN, INT_MAX, V|E, "flags"}, | |
453 {"global_header", "place global headers in extradata instead of every keyframe", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GLOBAL_HEADER, INT_MIN, INT_MAX, 0, "flags"}, | |
454 {"bitexact", "use only bitexact stuff (except (i)dct)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_BITEXACT, INT_MIN, INT_MAX, A|V|S|D|E, "flags"}, | |
455 {"aic", "h263 advanced intra coding / mpeg4 ac prediction", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_AC_PRED, INT_MIN, INT_MAX, V|E, "flags"}, | |
456 {"umv", "use unlimited motion vectors", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_H263P_UMV, INT_MIN, INT_MAX, V|E, "flags"}, | |
457 {"cbp", "use rate distortion optimization for cbp", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_CBP_RD, INT_MIN, INT_MAX, V|E, "flags"}, | |
2890 | 458 {"qprd", "use rate distortion optimization for qp selection", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_QP_RD, INT_MIN, INT_MAX, V|E, "flags"}, |
2881 | 459 {"aiv", "h263 alternative inter vlc", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_H263P_AIV, INT_MIN, INT_MAX, V|E, "flags"}, |
460 {"slice", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_H263P_SLICE_STRUCT, INT_MIN, INT_MAX, V|E, "flags"}, | |
461 {"ilme", "interlaced motion estimation", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INTERLACED_ME, INT_MIN, INT_MAX, V|E, "flags"}, | |
462 {"scan_offset", "will reserve space for svcd scan offset user data", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_SVCD_SCAN_OFFSET, INT_MIN, INT_MAX, V|E, "flags"}, | |
2890 | 463 {"cgop", "closed gop", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_CLOSED_GOP, INT_MIN, INT_MAX, V|E, "flags"}, |
2881 | 464 {"fast", "allow non spec compliant speedup tricks", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_FAST, INT_MIN, INT_MAX, V|E, "flags2"}, |
465 {"sgop", "strictly enforce gop size", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_STRICT_GOP, INT_MIN, INT_MAX, V|E, "flags2"}, | |
466 {"noout", "skip bitstream encoding", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_NO_OUTPUT, INT_MIN, INT_MAX, V|E, "flags2"}, | |
467 {"local_header", "place global headers at every keyframe instead of in extradata", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_LOCAL_HEADER, INT_MIN, INT_MAX, V|E, "flags2"}, | |
2862 | 468 {"sub_id", NULL, OFFSET(sub_id), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3713
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
469 {"me_method", "set motion estimation method", OFFSET(me_method), FF_OPT_TYPE_INT, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method"}, |
5227 | 470 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) |
471 {"me", "set motion estimation method (deprecated, use me_method instead)", OFFSET(me_method), FF_OPT_TYPE_INT, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method"}, | |
472 #endif | |
473 {"zero", "zero motion estimation (fastest)", 0, FF_OPT_TYPE_CONST, ME_ZERO, INT_MIN, INT_MAX, V|E, "me_method" }, | |
474 {"full", "full motion estimation (slowest)", 0, FF_OPT_TYPE_CONST, ME_FULL, INT_MIN, INT_MAX, V|E, "me_method" }, | |
475 {"epzs", "EPZS motion estimation (default)", 0, FF_OPT_TYPE_CONST, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method" }, | |
476 {"log", "log motion estimation", 0, FF_OPT_TYPE_CONST, ME_LOG, INT_MIN, INT_MAX, V|E, "me_method" }, | |
477 {"phods", "phods motion estimation", 0, FF_OPT_TYPE_CONST, ME_PHODS, INT_MIN, INT_MAX, V|E, "me_method" }, | |
478 {"x1", "X1 motion estimation", 0, FF_OPT_TYPE_CONST, ME_X1, INT_MIN, INT_MAX, V|E, "me_method" }, | |
479 {"hex", "hex motion estimation", 0, FF_OPT_TYPE_CONST, ME_HEX, INT_MIN, INT_MAX, V|E, "me_method" }, | |
480 {"umh", "umh motion estimation", 0, FF_OPT_TYPE_CONST, ME_UMH, INT_MIN, INT_MAX, V|E, "me_method" }, | |
481 {"iter", "iter motion estimation", 0, FF_OPT_TYPE_CONST, ME_ITER, INT_MIN, INT_MAX, V|E, "me_method" }, | |
2862 | 482 {"extradata_size", NULL, OFFSET(extradata_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
483 {"time_base", NULL, OFFSET(time_base), FF_OPT_TYPE_RATIONAL, DEFAULT, INT_MIN, INT_MAX}, | |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
484 {"g", "set the group of picture size", OFFSET(gop_size), FF_OPT_TYPE_INT, 12, INT_MIN, INT_MAX, V|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
485 {"rate_emu", "frame rate emulation", OFFSET(rate_emu), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
486 {"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3966 | 487 {"ac", "set number of audio channels", OFFSET(channels), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3031
0f5f311f2f94
Parameter added for user to set the cutoff frequency when encoding with faac.
banan
parents:
2996
diff
changeset
|
488 {"cutoff", "set cutoff bandwidth", OFFSET(cutoff), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|E}, |
3442
5d133e59ecf2
allows user-settable block size and fixes related typo
jbr
parents:
3438
diff
changeset
|
489 {"frame_size", NULL, OFFSET(frame_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|E}, |
2862 | 490 {"frame_number", NULL, OFFSET(frame_number), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
491 {"real_pict_num", NULL, OFFSET(real_pict_num), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
492 {"delay", NULL, OFFSET(delay), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
3916 | 493 {"qcomp", "video quantizer scale compression (VBR)", OFFSET(qcompress), FF_OPT_TYPE_FLOAT, 0.5, FLT_MIN, FLT_MAX, V|E}, |
494 {"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), FF_OPT_TYPE_FLOAT, 0.5, FLT_MIN, FLT_MAX, V|E}, | |
495 {"qmin", "min video quantizer scale (VBR)", OFFSET(qmin), FF_OPT_TYPE_INT, 2, 1, 51, V|E}, | |
496 {"qmax", "max video quantizer scale (VBR)", OFFSET(qmax), FF_OPT_TYPE_INT, 31, 1, 51, V|E}, | |
497 {"qdiff", "max difference between the quantizer scale (VBR)", OFFSET(max_qdiff), FF_OPT_TYPE_INT, 3, INT_MIN, INT_MAX, V|E}, | |
3736
1d70bb4e21d6
Remove the "bf" OptionDef parameter so the equally named AVOption will take
takis
parents:
3734
diff
changeset
|
498 {"bf", "use 'frames' B frames", OFFSET(max_b_frames), FF_OPT_TYPE_INT, DEFAULT, 0, FF_MAX_B_FRAMES, V|E}, |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
499 {"b_qfactor", "qp factor between p and b frames", OFFSET(b_quant_factor), FF_OPT_TYPE_FLOAT, 1.25, FLT_MIN, FLT_MAX, V|E}, |
4261 | 500 {"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
501 {"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E}, | |
2873 | 502 {"hurry_up", NULL, OFFSET(hurry_up), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D}, |
4608
62e88c68166c
get rid of rtp_mode field after next major bump
bcoudurier
parents:
4607
diff
changeset
|
503 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) |
2862 | 504 {"rtp_mode", NULL, OFFSET(rtp_mode), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
4608
62e88c68166c
get rid of rtp_mode field after next major bump
bcoudurier
parents:
4607
diff
changeset
|
505 #endif |
4613
c1c2e47aa5fe
remove ps option and rename rtp_payload_size AVOption to ps
bcoudurier
parents:
4608
diff
changeset
|
506 {"ps", "rtp payload size in bits", OFFSET(rtp_payload_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2862 | 507 {"mv_bits", NULL, OFFSET(mv_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
508 {"header_bits", NULL, OFFSET(header_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
509 {"i_tex_bits", NULL, OFFSET(i_tex_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
510 {"p_tex_bits", NULL, OFFSET(p_tex_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
511 {"i_count", NULL, OFFSET(i_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
512 {"p_count", NULL, OFFSET(p_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
513 {"skip_count", NULL, OFFSET(skip_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
514 {"misc_bits", NULL, OFFSET(misc_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
515 {"frame_bits", NULL, OFFSET(frame_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
516 {"codec_tag", NULL, OFFSET(codec_tag), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
517 {"bug", "workaround not auto detected encoder bugs", OFFSET(workaround_bugs), FF_OPT_TYPE_FLAGS, FF_BUG_AUTODETECT, INT_MIN, INT_MAX, V|D, "bug"}, |
2881 | 518 {"autodetect", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_AUTODETECT, INT_MIN, INT_MAX, V|D, "bug"}, |
4261 | 519 {"old_msmpeg4", "some old lavc generated msmpeg4v3 files (no autodetection)", 0, FF_OPT_TYPE_CONST, FF_BUG_OLD_MSMPEG4, INT_MIN, INT_MAX, V|D, "bug"}, |
520 {"xvid_ilace", "Xvid interlacing bug (autodetected if fourcc==XVIX)", 0, FF_OPT_TYPE_CONST, FF_BUG_XVID_ILACE, INT_MIN, INT_MAX, V|D, "bug"}, | |
521 {"ump4", "(autodetected if fourcc==UMP4)", 0, FF_OPT_TYPE_CONST, FF_BUG_UMP4, INT_MIN, INT_MAX, V|D, "bug"}, | |
522 {"no_padding", "padding bug (autodetected)", 0, FF_OPT_TYPE_CONST, FF_BUG_NO_PADDING, INT_MIN, INT_MAX, V|D, "bug"}, | |
2881 | 523 {"amv", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_AMV, INT_MIN, INT_MAX, V|D, "bug"}, |
4261 | 524 {"ac_vlc", "illegal vlc bug (autodetected per fourcc)", 0, FF_OPT_TYPE_CONST, FF_BUG_AC_VLC, INT_MIN, INT_MAX, V|D, "bug"}, |
2881 | 525 {"qpel_chroma", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_QPEL_CHROMA, INT_MIN, INT_MAX, V|D, "bug"}, |
4261 | 526 {"std_qpel", "old standard qpel (autodetected per fourcc/version)", 0, FF_OPT_TYPE_CONST, FF_BUG_STD_QPEL, INT_MIN, INT_MAX, V|D, "bug"}, |
2881 | 527 {"qpel_chroma2", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_QPEL_CHROMA2, INT_MIN, INT_MAX, V|D, "bug"}, |
4261 | 528 {"direct_blocksize", "direct-qpel-blocksize bug (autodetected per fourcc/version)", 0, FF_OPT_TYPE_CONST, FF_BUG_DIRECT_BLOCKSIZE, INT_MIN, INT_MAX, V|D, "bug"}, |
529 {"edge", "edge padding bug (autodetected per fourcc/version)", 0, FF_OPT_TYPE_CONST, FF_BUG_EDGE, INT_MIN, INT_MAX, V|D, "bug"}, | |
2881 | 530 {"hpel_chroma", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_HPEL_CHROMA, INT_MIN, INT_MAX, V|D, "bug"}, |
531 {"dc_clip", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_DC_CLIP, INT_MIN, INT_MAX, V|D, "bug"}, | |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
532 {"ms", "workaround various bugs in microsofts broken decoders", 0, FF_OPT_TYPE_CONST, FF_BUG_MS, INT_MIN, INT_MAX, V|D, "bug"}, |
2881 | 533 {"lelim", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)", OFFSET(luma_elim_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
534 {"celim", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)", OFFSET(chroma_elim_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
4350 | 535 {"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|V|D, "strict"}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
536 {"very", "strictly conform to a older more strict version of the spec or reference software", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_VERY_STRICT, INT_MIN, INT_MAX, V|E, "strict"}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
537 {"strict", "strictly conform to all the things in the spec no matter what consequences", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_STRICT, INT_MIN, INT_MAX, V|E, "strict"}, |
2881 | 538 {"normal", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_NORMAL, INT_MIN, INT_MAX, V|E, "strict"}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
539 {"inofficial", "allow inofficial extensions", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_INOFFICIAL, INT_MIN, INT_MAX, V|E, "strict"}, |
4796 | 540 {"experimental", "allow non standardized experimental things", 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_EXPERIMENTAL, INT_MIN, INT_MAX, V|E, "strict"}, |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
541 {"b_qoffset", "qp offset between p and b frames", OFFSET(b_quant_offset), FF_OPT_TYPE_FLOAT, 1.25, FLT_MIN, FLT_MAX, V|E}, |
4350 | 542 {"er", "set error resilience strategy", OFFSET(error_resilience), FF_OPT_TYPE_INT, FF_ER_CAREFUL, INT_MIN, INT_MAX, A|V|D, "er"}, |
2881 | 543 {"careful", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_CAREFUL, INT_MIN, INT_MAX, V|D, "er"}, |
544 {"compliant", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_COMPLIANT, INT_MIN, INT_MAX, V|D, "er"}, | |
545 {"aggressive", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_AGGRESSIVE, INT_MIN, INT_MAX, V|D, "er"}, | |
546 {"very_aggressive", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_VERY_AGGRESSIVE, INT_MIN, INT_MAX, V|D, "er"}, | |
2862 | 547 {"has_b_frames", NULL, OFFSET(has_b_frames), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
548 {"block_align", NULL, OFFSET(block_align), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
549 {"parse_only", NULL, OFFSET(parse_only), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
4261 | 550 {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2862 | 551 {"stats_out", NULL, OFFSET(stats_out), FF_OPT_TYPE_STRING, DEFAULT, CHAR_MIN, CHAR_MAX}, |
552 {"stats_in", NULL, OFFSET(stats_in), FF_OPT_TYPE_STRING, DEFAULT, CHAR_MIN, CHAR_MAX}, | |
3916 | 553 {"qsquish", "how to keep quantizer between qmin and qmax (0 = clip, 1 = use differentiable function)", OFFSET(rc_qsquish), FF_OPT_TYPE_FLOAT, DEFAULT, 0, 99, V|E}, |
4261 | 554 {"rc_qmod_amp", "experimental quantizer modulation", OFFSET(rc_qmod_amp), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, |
555 {"rc_qmod_freq", "experimental quantizer modulation", OFFSET(rc_qmod_freq), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
2862 | 556 {"rc_override_count", NULL, OFFSET(rc_override_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3713
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
557 {"rc_eq", "set rate control equation", OFFSET(rc_eq), FF_OPT_TYPE_STRING, DEFAULT, CHAR_MIN, CHAR_MAX, V|E}, |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
558 {"maxrate", "set max video bitrate tolerance (in bits/s)", OFFSET(rc_max_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
559 {"minrate", "set min video bitrate tolerance (in bits/s)", OFFSET(rc_min_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
560 {"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
4261 | 561 {"rc_buf_aggressivity", "currently useless", OFFSET(rc_buffer_aggressivity), FF_OPT_TYPE_FLOAT, 1.0, FLT_MIN, FLT_MAX, V|E}, |
3725
3e5ef8f13f1b
Correct the i_qfactor minimum, which was current set higher then the default
takis
parents:
3723
diff
changeset
|
562 {"i_qfactor", "qp factor between p and i frames", OFFSET(i_quant_factor), FF_OPT_TYPE_FLOAT, -0.8, -FLT_MAX, FLT_MAX, V|E}, |
3734
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
563 {"i_qoffset", "qp offset between p and i frames", OFFSET(i_quant_offset), FF_OPT_TYPE_FLOAT, 0.0, -FLT_MAX, FLT_MAX, V|E}, |
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
564 {"rc_init_cplx", "initial complexity for 1-pass encoding", OFFSET(rc_initial_cplx), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, |
4261 | 565 {"dct", "DCT algorithm", OFFSET(dct_algo), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|E, "dct"}, |
566 {"auto", "autoselect a good one (default)", 0, FF_OPT_TYPE_CONST, FF_DCT_AUTO, INT_MIN, INT_MAX, V|E, "dct"}, | |
567 {"fastint", "fast integer", 0, FF_OPT_TYPE_CONST, FF_DCT_FASTINT, INT_MIN, INT_MAX, V|E, "dct"}, | |
568 {"int", "accurate integer", 0, FF_OPT_TYPE_CONST, FF_DCT_INT, INT_MIN, INT_MAX, V|E, "dct"}, | |
2881 | 569 {"mmx", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_MMX, INT_MIN, INT_MAX, V|E, "dct"}, |
570 {"mlib", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_MLIB, INT_MIN, INT_MAX, V|E, "dct"}, | |
571 {"altivec", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_ALTIVEC, INT_MIN, INT_MAX, V|E, "dct"}, | |
4264
769ea5de44d3
Fix some obvious mistakes in the option descriptions.
diego
parents:
4261
diff
changeset
|
572 {"faan", "floating point AAN DCT", 0, FF_OPT_TYPE_CONST, FF_DCT_FAAN, INT_MIN, INT_MAX, V|E, "dct"}, |
4261 | 573 {"lumi_mask", "compresses bright areas stronger than medium ones", OFFSET(lumi_masking), FF_OPT_TYPE_FLOAT, 0, -FLT_MAX, FLT_MAX, V|E}, |
3734
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
574 {"tcplx_mask", "temporal complexity masking", OFFSET(temporal_cplx_masking), FF_OPT_TYPE_FLOAT, 0, -FLT_MAX, FLT_MAX, V|E}, |
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
575 {"scplx_mask", "spatial complexity masking", OFFSET(spatial_cplx_masking), FF_OPT_TYPE_FLOAT, 0, -FLT_MAX, FLT_MAX, V|E}, |
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
576 {"p_mask", "inter masking", OFFSET(p_masking), FF_OPT_TYPE_FLOAT, 0, -FLT_MAX, FLT_MAX, V|E}, |
4261 | 577 {"dark_mask", "compresses dark areas stronger than medium ones", OFFSET(dark_masking), FF_OPT_TYPE_FLOAT, 0, -FLT_MAX, FLT_MAX, V|E}, |
2862 | 578 {"unused", NULL, OFFSET(unused), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
4293 | 579 {"idct", "select IDCT implementation", OFFSET(idct_algo), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|E|D, "idct"}, |
2881 | 580 {"auto", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_AUTO, INT_MIN, INT_MAX, V|E|D, "idct"}, |
581 {"int", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_INT, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
582 {"simple", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLE, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
583 {"simplemmx", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEMMX, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
584 {"libmpeg2mmx", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_LIBMPEG2MMX, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
585 {"ps2", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_PS2, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
586 {"mlib", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_MLIB, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
587 {"arm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_ARM, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
588 {"altivec", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_ALTIVEC, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
589 {"sh4", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SH4, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
590 {"simplearm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARM, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
3769 | 591 {"simplearmv5te", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARMV5TE, INT_MIN, INT_MAX, V|E|D, "idct"}, |
2881 | 592 {"h264", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_H264, INT_MIN, INT_MAX, V|E|D, "idct"}, |
593 {"vp3", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_VP3, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
594 {"ipp", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_IPP, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
595 {"xvidmmx", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_XVIDMMX, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
2862 | 596 {"slice_count", NULL, OFFSET(slice_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
4261 | 597 {"ec", "set error concealment strategy", OFFSET(error_concealment), FF_OPT_TYPE_FLAGS, 3, INT_MIN, INT_MAX, V|D, "ec"}, |
598 {"guess_mvs", "iterative motion vector (MV) search (slow)", 0, FF_OPT_TYPE_CONST, FF_EC_GUESS_MVS, INT_MIN, INT_MAX, V|D, "ec"}, | |
599 {"deblock", "use strong deblock filter for damaged MBs", 0, FF_OPT_TYPE_CONST, FF_EC_DEBLOCK, INT_MIN, INT_MAX, V|D, "ec"}, | |
2862 | 600 {"bits_per_sample", NULL, OFFSET(bits_per_sample), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
2890 | 601 {"pred", "prediction method", OFFSET(prediction_method), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "pred"}, |
2881 | 602 {"left", NULL, 0, FF_OPT_TYPE_CONST, FF_PRED_LEFT, INT_MIN, INT_MAX, V|E, "pred"}, |
603 {"plane", NULL, 0, FF_OPT_TYPE_CONST, FF_PRED_PLANE, INT_MIN, INT_MAX, V|E, "pred"}, | |
604 {"median", NULL, 0, FF_OPT_TYPE_CONST, FF_PRED_MEDIAN, INT_MIN, INT_MAX, V|E, "pred"}, | |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
605 {"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), FF_OPT_TYPE_RATIONAL, DEFAULT, 0, 10, V|E}, |
2877 | 606 {"debug", "print specific debug info", OFFSET(debug), FF_OPT_TYPE_FLAGS, DEFAULT, 0, INT_MAX, V|A|S|E|D, "debug"}, |
4261 | 607 {"pict", "picture info", 0, FF_OPT_TYPE_CONST, FF_DEBUG_PICT_INFO, INT_MIN, INT_MAX, V|D, "debug"}, |
608 {"rc", "rate control", 0, FF_OPT_TYPE_CONST, FF_DEBUG_RC, INT_MIN, INT_MAX, V|E, "debug"}, | |
2881 | 609 {"bitstream", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_BITSTREAM, INT_MIN, INT_MAX, V|D, "debug"}, |
4261 | 610 {"mb_type", "macroblock (MB) type", 0, FF_OPT_TYPE_CONST, FF_DEBUG_MB_TYPE, INT_MIN, INT_MAX, V|D, "debug"}, |
611 {"qp", "per-block quantization parameter (QP)", 0, FF_OPT_TYPE_CONST, FF_DEBUG_QP, INT_MIN, INT_MAX, V|D, "debug"}, | |
612 {"mv", "motion vector", 0, FF_OPT_TYPE_CONST, FF_DEBUG_MV, INT_MIN, INT_MAX, V|D, "debug"}, | |
2881 | 613 {"dct_coeff", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_DCT_COEFF, INT_MIN, INT_MAX, V|D, "debug"}, |
614 {"skip", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_SKIP, INT_MIN, INT_MAX, V|D, "debug"}, | |
615 {"startcode", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_STARTCODE, INT_MIN, INT_MAX, V|D, "debug"}, | |
616 {"pts", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_PTS, INT_MIN, INT_MAX, V|D, "debug"}, | |
4261 | 617 {"er", "error resilience", 0, FF_OPT_TYPE_CONST, FF_DEBUG_ER, INT_MIN, INT_MAX, V|D, "debug"}, |
618 {"mmco", "memory management control operations (H.264)", 0, FF_OPT_TYPE_CONST, FF_DEBUG_MMCO, INT_MIN, INT_MAX, V|D, "debug"}, | |
2881 | 619 {"bugs", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_BUGS, INT_MIN, INT_MAX, V|D, "debug"}, |
4261 | 620 {"vis_qp", "visualize quantization parameter (QP), lower QP are tinted greener", 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_QP, INT_MIN, INT_MAX, V|D, "debug"}, |
621 {"vis_mb_type", "visualize block types", 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MB_TYPE, INT_MIN, INT_MAX, V|D, "debug"}, | |
622 {"vismv", "visualize motion vectors (MVs)", OFFSET(debug_mv), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|D, "debug_mv"}, | |
623 {"pf", "forward predicted MVs of P-frames", 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MV_P_FOR, INT_MIN, INT_MAX, V|D, "debug_mv"}, | |
624 {"bf", "forward predicted MVs of B-frames", 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MV_B_FOR, INT_MIN, INT_MAX, V|D, "debug_mv"}, | |
625 {"bb", "backward predicted MVs of B-frames", 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MV_B_BACK, INT_MIN, INT_MAX, V|D, "debug_mv"}, | |
4300 | 626 {"mb_qmin", "obsolete, use qmin", OFFSET(mb_qmin), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
627 {"mb_qmax", "obsolete, use qmax", OFFSET(mb_qmax), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
2881 | 628 {"cmp", "full pel me compare function", OFFSET(me_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
629 {"subcmp", "sub pel me compare function", OFFSET(me_sub_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
2878 | 630 {"mbcmp", "macroblock compare function", OFFSET(mb_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
3704 | 631 {"ildctcmp", "interlaced dct compare function", OFFSET(ildct_cmp), FF_OPT_TYPE_INT, FF_CMP_VSAD, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
4261 | 632 {"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
633 {"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
3713
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
634 {"preme", "pre motion estimation", OFFSET(pre_me), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2878 | 635 {"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
4261 | 636 {"sad", "sum of absolute differences, fast (default)", 0, FF_OPT_TYPE_CONST, FF_CMP_SAD, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
637 {"sse", "sum of squared errors", 0, FF_OPT_TYPE_CONST, FF_CMP_SSE, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
638 {"satd", "sum of absolute Hadamard transformed differences", 0, FF_OPT_TYPE_CONST, FF_CMP_SATD, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
639 {"dct", "sum of absolute DCT transformed differences", 0, FF_OPT_TYPE_CONST, FF_CMP_DCT, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
640 {"psnr", "sum of squared quantization errors (avoid, low quality)", 0, FF_OPT_TYPE_CONST, FF_CMP_PSNR, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
641 {"bit", "number of bits needed for the block", 0, FF_OPT_TYPE_CONST, FF_CMP_BIT, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
642 {"rd", "rate distortion optimal, slow", 0, FF_OPT_TYPE_CONST, FF_CMP_RD, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
643 {"zero", "0", 0, FF_OPT_TYPE_CONST, FF_CMP_ZERO, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
644 {"vsad", "sum of absolute vertical differences", 0, FF_OPT_TYPE_CONST, FF_CMP_VSAD, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
645 {"vsse","sum of squared vertical differences", 0, FF_OPT_TYPE_CONST, FF_CMP_VSSE, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
646 {"nsse", "noise preserving sum of squared differences", 0, FF_OPT_TYPE_CONST, FF_CMP_NSSE, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
3373
b8996cc5ccae
Disable w53 and w97 cmp methods when snow encoder is disabled
gpoirier
parents:
3372
diff
changeset
|
647 #ifdef CONFIG_SNOW_ENCODER |
4261 | 648 {"w53", "5/3 wavelet, only used in snow", 0, FF_OPT_TYPE_CONST, FF_CMP_W53, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
649 {"w97", "9/7 wavelet, only used in snow", 0, FF_OPT_TYPE_CONST, FF_CMP_W97, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
3373
b8996cc5ccae
Disable w53 and w97 cmp methods when snow encoder is disabled
gpoirier
parents:
3372
diff
changeset
|
650 #endif |
2881 | 651 {"dctmax", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_DCTMAX, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
652 {"chroma", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_CHROMA, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
4261 | 653 {"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3704 | 654 {"subq", "sub pel motion estimation quality", OFFSET(me_subpel_quality), FF_OPT_TYPE_INT, 8, INT_MIN, INT_MAX, V|E}, |
2862 | 655 {"dtg_active_format", NULL, OFFSET(dtg_active_format), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3713
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
656 {"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
657 {"ibias", "intra quant bias", OFFSET(intra_quant_bias), FF_OPT_TYPE_INT, FF_DEFAULT_QUANT_BIAS, INT_MIN, INT_MAX, V|E}, |
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
658 {"pbias", "inter quant bias", OFFSET(inter_quant_bias), FF_OPT_TYPE_INT, FF_DEFAULT_QUANT_BIAS, INT_MIN, INT_MAX, V|E}, |
2862 | 659 {"color_table_id", NULL, OFFSET(color_table_id), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
660 {"internal_buffer_count", NULL, OFFSET(internal_buffer_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
661 {"global_quality", NULL, OFFSET(global_quality), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
2878 | 662 {"coder", NULL, OFFSET(coder_type), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "coder"}, |
2890 | 663 {"vlc", "variable length coder / huffman coder", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_VLC, INT_MIN, INT_MAX, V|E, "coder"}, |
664 {"ac", "arithmetic coder", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_AC, INT_MIN, INT_MAX, V|E, "coder"}, | |
4775
14e7131344b3
FF_CODER_TYPE_RAW / RLE / DEFLATE extracted from a patch by Kamil Nowosad
michael
parents:
4763
diff
changeset
|
665 {"raw", "raw (no encoding)", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_RAW, INT_MIN, INT_MAX, V|E, "coder"}, |
4777 | 666 {"rle", "run-length coder", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_RLE, INT_MIN, INT_MAX, V|E, "coder"}, |
4775
14e7131344b3
FF_CODER_TYPE_RAW / RLE / DEFLATE extracted from a patch by Kamil Nowosad
michael
parents:
4763
diff
changeset
|
667 {"deflate", "deflate-based coder", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_DEFLATE, INT_MIN, INT_MAX, V|E, "coder"}, |
2890 | 668 {"context", "context model", OFFSET(context_model), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2862 | 669 {"slice_flags", NULL, OFFSET(slice_flags), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
670 {"xvmc_acceleration", NULL, OFFSET(xvmc_acceleration), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
4261 | 671 {"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "mbd"}, |
672 {"simple", "use mbcmp (default)", 0, FF_OPT_TYPE_CONST, FF_MB_DECISION_SIMPLE, INT_MIN, INT_MAX, V|E, "mbd"}, | |
673 {"bits", "use fewest bits", 0, FF_OPT_TYPE_CONST, FF_MB_DECISION_BITS, INT_MIN, INT_MAX, V|E, "mbd"}, | |
674 {"rd", "use best rate distortion", 0, FF_OPT_TYPE_CONST, FF_MB_DECISION_RD, INT_MIN, INT_MAX, V|E, "mbd"}, | |
2862 | 675 {"stream_codec_tag", NULL, OFFSET(stream_codec_tag), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3713
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
676 {"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
677 {"lmin", "min lagrange factor (VBR)", OFFSET(lmin), FF_OPT_TYPE_INT, 2*FF_QP2LAMBDA, 0, INT_MAX, V|E}, |
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
678 {"lmax", "max lagrange factor (VBR)", OFFSET(lmax), FF_OPT_TYPE_INT, 31*FF_QP2LAMBDA, 0, INT_MAX, V|E}, |
2890 | 679 {"nr", "noise reduction", OFFSET(noise_reduction), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
680 {"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2873 | 681 {"inter_threshold", NULL, OFFSET(inter_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3704 | 682 {"flags2", NULL, OFFSET(flags2), FF_OPT_TYPE_FLAGS, CODEC_FLAG2_FASTPSKIP, INT_MIN, INT_MAX, V|A|E|D, "flags2"}, |
3751
0882d618eb57
Remove the "error" OptionDef. The equally named AVOption takes over its
takis
parents:
3750
diff
changeset
|
683 {"error", NULL, OFFSET(error_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
684 {"antialias", "MP3 antialias algorithm", OFFSET(antialias_algo), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D, "aa"}, |
2881 | 685 {"auto", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_AUTO, INT_MIN, INT_MAX, V|D, "aa"}, |
686 {"fastint", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_FASTINT, INT_MIN, INT_MAX, V|D, "aa"}, | |
687 {"int", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_INT, INT_MIN, INT_MAX, V|D, "aa"}, | |
688 {"float", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_FLOAT, INT_MIN, INT_MAX, V|D, "aa"}, | |
2890 | 689 {"qns", "quantizer noise shaping", OFFSET(quantizer_noise_shaping), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
690 {"threads", NULL, OFFSET(thread_count), FF_OPT_TYPE_INT, 1, INT_MIN, INT_MAX, V|E|D}, |
2877 | 691 {"me_threshold", "motion estimaton threshold", OFFSET(me_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3749
ac7cef800ab1
Remove the "mb_threshold" OptionDef. The equally named AVOption takes over its
takis
parents:
3739
diff
changeset
|
692 {"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3765 | 693 {"dc", "intra_dc_precision", OFFSET(intra_dc_precision), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E}, |
2890 | 694 {"nssew", "nsse weight", OFFSET(nsse_weight), FF_OPT_TYPE_INT, 8, INT_MIN, INT_MAX, V|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
695 {"skip_top", "number of macroblock rows at the top which are skipped", OFFSET(skip_top), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
696 {"skip_bottom", "number of macroblock rows at the bottom which are skipped", OFFSET(skip_bottom), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D}, |
2878 | 697 {"profile", NULL, OFFSET(profile), FF_OPT_TYPE_INT, FF_PROFILE_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "profile"}, |
2881 | 698 {"unknown", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "profile"}, |
4891 | 699 {"aac_main", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_AAC_MAIN, INT_MIN, INT_MAX, A|E, "profile"}, |
700 {"aac_low", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_AAC_LOW, INT_MIN, INT_MAX, A|E, "profile"}, | |
701 {"aac_ssr", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_AAC_SSR, INT_MIN, INT_MAX, A|E, "profile"}, | |
702 {"aac_ltp", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_AAC_LTP, INT_MIN, INT_MAX, A|E, "profile"}, | |
2878 | 703 {"level", NULL, OFFSET(level), FF_OPT_TYPE_INT, FF_LEVEL_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "level"}, |
2881 | 704 {"unknown", NULL, 0, FF_OPT_TYPE_CONST, FF_LEVEL_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "level"}, |
4261 | 705 {"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), FF_OPT_TYPE_INT, 0, 0, INT_MAX, V|D}, |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
706 {"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
707 {"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
708 {"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2927 | 709 {"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), FF_OPT_TYPE_INT, FF_CMP_DCTMAX, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
4261 | 710 {"border_mask", "increases the quantizer for macroblocks close to borders", OFFSET(border_masking), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, |
4124 | 711 {"mblmin", "min macroblock lagrange factor (VBR)", OFFSET(mb_lmin), FF_OPT_TYPE_INT, FF_QP2LAMBDA * 2, 1, FF_LAMBDA_MAX, V|E}, |
712 {"mblmax", "max macroblock lagrange factor (VBR)", OFFSET(mb_lmax), FF_OPT_TYPE_INT, FF_QP2LAMBDA * 31, 1, FF_LAMBDA_MAX, V|E}, | |
3750
b95d0b7b8d73
Remove the "mepc" OptionDef. The equally named AVOption takes over its function.
takis
parents:
3749
diff
changeset
|
713 {"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), FF_OPT_TYPE_INT, 256, INT_MIN, INT_MAX, V|E}, |
4261 | 714 {"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), FF_OPT_TYPE_INT, DEFAULT, 0, 4, V|E}, |
715 {"brd_scale", "downscales frames for dynamic B-frame decision", OFFSET(brd_scale), FF_OPT_TYPE_INT, DEFAULT, 0, 10, V|E}, | |
716 {"crf", "enables constant quality mode, and selects the quality (x264)", OFFSET(crf), FF_OPT_TYPE_FLOAT, DEFAULT, 0, 51, V|E}, | |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
717 {"cqp", "constant quantization parameter rate control method", OFFSET(cqp), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, V|E}, |
4261 | 718 {"keyint_min", "minimum interval between IDR-frames (x264)", OFFSET(keyint_min), FF_OPT_TYPE_INT, 25, INT_MIN, INT_MAX, V|E}, |
719 {"refs", "reference frames to consider for motion compensation (Snow)", OFFSET(refs), FF_OPT_TYPE_INT, 1, INT_MIN, INT_MAX, V|E}, | |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
720 {"chromaoffset", "chroma qp offset from luma", OFFSET(chromaoffset), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
721 {"bframebias", "influences how often B-frames are used", OFFSET(bframebias), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
4261 | 722 {"trellis", "rate-distortion optimal quantization", OFFSET(trellis), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|A|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
723 {"directpred", "direct mv prediction mode - 0 (none), 1 (spatial), 2 (temporal)", OFFSET(directpred), FF_OPT_TYPE_INT, 2, INT_MIN, INT_MAX, V|E}, |
4261 | 724 {"bpyramid", "allows B-frames to be used as references for predicting", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_BPYRAMID, INT_MIN, INT_MAX, V|E, "flags2"}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
725 {"wpred", "weighted biprediction for b-frames (H.264)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_WPRED, INT_MIN, INT_MAX, V|E, "flags2"}, |
4273
73abe5df48ea
Add "mixed_refs" description suggested by Loren Merritt and update accompanying
takis
parents:
4272
diff
changeset
|
726 {"mixed_refs", "one reference per partition, as opposed to one reference per macroblock", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_MIXED_REFS, INT_MIN, INT_MAX, V|E, "flags2"}, |
4714 | 727 {"dct8x8", "high profile 8x8 transform (H.264)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_8X8DCT, INT_MIN, INT_MAX, V|E, "flags2"}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
728 {"fastpskip", "fast pskip (H.264)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_FASTPSKIP, INT_MIN, INT_MAX, V|E, "flags2"}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
729 {"aud", "access unit delimiters (H.264)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_AUD, INT_MIN, INT_MAX, V|E, "flags2"}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
730 {"brdo", "b-frame rate-distortion optimization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_BRDO, INT_MIN, INT_MAX, V|E, "flags2"}, |
4796 | 731 {"skiprd", "RD optimal MB level residual skipping", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_SKIP_RD, INT_MIN, INT_MAX, V|E, "flags2"}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
732 {"complexityblur", "reduce fluctuations in qp (before curve compression)", OFFSET(complexityblur), FF_OPT_TYPE_FLOAT, 20.0, FLT_MIN, FLT_MAX, V|E}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
733 {"deblockalpha", "in-loop deblocking filter alphac0 parameter", OFFSET(deblockalpha), FF_OPT_TYPE_INT, DEFAULT, -6, 6, V|E}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
734 {"deblockbeta", "in-loop deblocking filter beta parameter", OFFSET(deblockbeta), FF_OPT_TYPE_INT, DEFAULT, -6, 6, V|E}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
735 {"partitions", "macroblock subpartition sizes to consider", OFFSET(partitions), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, V|E, "partitions"}, |
2996 | 736 {"parti4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_I4X4, INT_MIN, INT_MAX, V|E, "partitions"}, |
737 {"parti8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_I8X8, INT_MIN, INT_MAX, V|E, "partitions"}, | |
738 {"partp4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P4X4, INT_MIN, INT_MAX, V|E, "partitions"}, | |
739 {"partp8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P8X8, INT_MIN, INT_MAX, V|E, "partitions"}, | |
740 {"partb8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_B8X8, INT_MIN, INT_MAX, V|E, "partitions"}, | |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
741 {"sc_factor", "multiplied by qscale for each frame and added to scene_change_score", OFFSET(scenechange_factor), FF_OPT_TYPE_INT, 6, 0, INT_MAX, V|E}, |
3293 | 742 {"mv0_threshold", NULL, OFFSET(mv0_threshold), FF_OPT_TYPE_INT, 256, 0, INT_MAX, V|E}, |
3305 | 743 {"ivlc", "intra vlc table", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_INTRA_VLC, INT_MIN, INT_MAX, V|E, "flags2"}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
744 {"b_sensitivity", "adjusts sensitivity of b_frame_strategy 1", OFFSET(b_sensitivity), FF_OPT_TYPE_INT, 40, 1, INT_MAX, V|E}, |
3385
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
745 {"compression_level", NULL, OFFSET(compression_level), FF_OPT_TYPE_INT, FF_COMPRESSION_DEFAULT, INT_MIN, INT_MAX, V|A|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
746 {"use_lpc", "sets whether to use LPC mode (FLAC)", OFFSET(use_lpc), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
747 {"lpc_coeff_precision", "LPC coefficient precision (FLAC)", OFFSET(lpc_coeff_precision), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, A|E}, |
3385
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
748 {"min_prediction_order", NULL, OFFSET(min_prediction_order), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
749 {"max_prediction_order", NULL, OFFSET(max_prediction_order), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
750 {"prediction_order_method", "search method for selecting prediction order", OFFSET(prediction_order_method), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
3385
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
751 {"min_partition_order", NULL, OFFSET(min_partition_order), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
752 {"max_partition_order", NULL, OFFSET(max_partition_order), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
4272
41a4841117d2
Add more descriptions to the AVOption array taken from the avcodec.h AVCodec structure member comments.
takis
parents:
4264
diff
changeset
|
753 {"timecode_frame_start", "GOP timecode frame start number, in non drop frame format", OFFSET(timecode_frame_start), FF_OPT_TYPE_INT, 0, 0, INT_MAX, V|E}, |
4158
47d1b5261f17
add option to set mpeg1/2 gop timecode start, and drop frame flag timecode flag
bcoudurier
parents:
4124
diff
changeset
|
754 {"drop_frame_timecode", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_DROP_FRAME_TIMECODE, INT_MIN, INT_MAX, V|E, "flags2"}, |
4621 | 755 {"non_linear_q", "use non linear quantizer", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_NON_LINEAR_QUANT, INT_MIN, INT_MAX, V|E, "flags2"}, |
2862 | 756 {NULL}, |
757 }; | |
758 | |
2873 | 759 #undef A |
760 #undef V | |
3688
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
761 #undef S |
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
762 #undef E |
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
763 #undef D |
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
764 #undef DEFAULT |
2873 | 765 |
2862 | 766 static AVClass av_codec_context_class = { "AVCodecContext", context_to_name, options }; |
1856 | 767 |
4630
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
768 void avcodec_get_context_defaults2(AVCodecContext *s, enum CodecType codec_type){ |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
769 int flags=0; |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
770 memset(s, 0, sizeof(AVCodecContext)); |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
771 |
1856 | 772 s->av_class= &av_codec_context_class; |
3702 | 773 |
5356 | 774 s->codec_type = codec_type; |
4630
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
775 if(codec_type == CODEC_TYPE_AUDIO) |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
776 flags= AV_OPT_FLAG_AUDIO_PARAM; |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
777 else if(codec_type == CODEC_TYPE_VIDEO) |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
778 flags= AV_OPT_FLAG_VIDEO_PARAM; |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
779 else if(codec_type == CODEC_TYPE_SUBTITLE) |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
780 flags= AV_OPT_FLAG_SUBTITLE_PARAM; |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
781 av_opt_set_defaults2(s, flags, flags); |
3702 | 782 |
681 | 783 s->rc_eq= "tex^qComp"; |
2637 | 784 s->time_base= (AVRational){0,1}; |
903 | 785 s->get_buffer= avcodec_default_get_buffer; |
786 s->release_buffer= avcodec_default_release_buffer; | |
998 | 787 s->get_format= avcodec_default_get_format; |
1799 | 788 s->execute= avcodec_default_execute; |
1548 | 789 s->sample_aspect_ratio= (AVRational){0,1}; |
2635 | 790 s->pix_fmt= PIX_FMT_NONE; |
3136
ddf6d81a6369
added none/8bit/24bit audio formats and defaulting to s16 for now (once the system works like pix_fmt, the defaulting should be changed to SAMPLE_FMT_NONE)
alex
parents:
3075
diff
changeset
|
791 s->sample_fmt= SAMPLE_FMT_S16; // FIXME: set to NONE |
2967 | 792 |
1585
6b224ca24033
revised palette API, courtesy of Roberto Togni (rtogni at freemail.it)
melanson
parents:
1582
diff
changeset
|
793 s->palctrl = NULL; |
1630 | 794 s->reget_buffer= avcodec_default_reget_buffer; |
681 | 795 } |
796 | |
4630
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
797 AVCodecContext *avcodec_alloc_context2(enum CodecType codec_type){ |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
798 AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext)); |
2967 | 799 |
681 | 800 if(avctx==NULL) return NULL; |
2967 | 801 |
4630
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
802 avcodec_get_context_defaults2(avctx, codec_type); |
2967 | 803 |
681 | 804 return avctx; |
805 } | |
806 | |
4630
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
807 void avcodec_get_context_defaults(AVCodecContext *s){ |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
808 avcodec_get_context_defaults2(s, CODEC_TYPE_UNKNOWN); |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
809 } |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
810 |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
811 AVCodecContext *avcodec_alloc_context(void){ |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
812 return avcodec_alloc_context2(CODEC_TYPE_UNKNOWN); |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
813 } |
1416371d4a6c
add avcodec_get_context_defaults2() / avcodec_alloc_context2() which take CodecType as an additional parameter
michael
parents:
4625
diff
changeset
|
814 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
815 void avcodec_get_frame_defaults(AVFrame *pic){ |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
816 memset(pic, 0, sizeof(AVFrame)); |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
817 |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
818 pic->pts= AV_NOPTS_VALUE; |
2488 | 819 pic->key_frame= 1; |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
820 } |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
821 |
925 | 822 AVFrame *avcodec_alloc_frame(void){ |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
823 AVFrame *pic= av_malloc(sizeof(AVFrame)); |
2967 | 824 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
825 if(pic==NULL) return NULL; |
2967 | 826 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
827 avcodec_get_frame_defaults(pic); |
2967 | 828 |
903 | 829 return pic; |
830 } | |
831 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
832 int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec) |
0 | 833 { |
2806 | 834 int ret= -1; |
2967 | 835 |
2806 | 836 entangled_thread_counter++; |
837 if(entangled_thread_counter != 1){ | |
838 av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); | |
839 goto end; | |
840 } | |
0 | 841 |
1456
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
842 if(avctx->codec) |
2806 | 843 goto end; |
1456
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
844 |
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
845 if (codec->priv_data_size > 0) { |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
846 avctx->priv_data = av_mallocz(codec->priv_data_size); |
5382
7f96f6e16f81
Return AVERROR(ENOMEM) on memory allocation failure of avcodec_open.
takis
parents:
5356
diff
changeset
|
847 if (!avctx->priv_data) { |
7f96f6e16f81
Return AVERROR(ENOMEM) on memory allocation failure of avcodec_open.
takis
parents:
5356
diff
changeset
|
848 ret = AVERROR(ENOMEM); |
2806 | 849 goto end; |
5382
7f96f6e16f81
Return AVERROR(ENOMEM) on memory allocation failure of avcodec_open.
takis
parents:
5356
diff
changeset
|
850 } |
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
851 } else { |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
852 avctx->priv_data = NULL; |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
853 } |
2270 | 854 |
855 if(avctx->coded_width && avctx->coded_height) | |
856 avcodec_set_dimensions(avctx, avctx->coded_width, avctx->coded_height); | |
857 else if(avctx->width && avctx->height) | |
858 avcodec_set_dimensions(avctx, avctx->width, avctx->height); | |
859 | |
2422 | 860 if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)){ |
861 av_freep(&avctx->priv_data); | |
5383
8a28860d54ba
Return AVERROR(EINVAL) when invalid width and/or height are specified to
takis
parents:
5382
diff
changeset
|
862 ret = AVERROR(EINVAL); |
2806 | 863 goto end; |
2422 | 864 } |
865 | |
3159 | 866 avctx->codec = codec; |
867 avctx->codec_id = codec->id; | |
868 avctx->frame_number = 0; | |
4762 | 869 if(avctx->codec->init){ |
4763 | 870 ret = avctx->codec->init(avctx); |
871 if (ret < 0) { | |
872 av_freep(&avctx->priv_data); | |
873 avctx->codec= NULL; | |
874 goto end; | |
875 } | |
4762 | 876 } |
2806 | 877 ret=0; |
878 end: | |
879 entangled_thread_counter--; | |
880 return ret; | |
0 | 881 } |
882 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
883 int attribute_align_arg avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
0 | 884 const short *samples) |
885 { | |
2422 | 886 if(buf_size < FF_MIN_BUFFER_SIZE && 0){ |
4526 | 887 av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n"); |
2422 | 888 return -1; |
889 } | |
2091 | 890 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || samples){ |
891 int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples); | |
892 avctx->frame_number++; | |
893 return ret; | |
894 }else | |
895 return 0; | |
0 | 896 } |
897 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
898 int attribute_align_arg avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
925 | 899 const AVFrame *pict) |
0 | 900 { |
2422 | 901 if(buf_size < FF_MIN_BUFFER_SIZE){ |
4526 | 902 av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n"); |
2422 | 903 return -1; |
904 } | |
905 if(avcodec_check_dimensions(avctx,avctx->width,avctx->height)) | |
906 return -1; | |
2091 | 907 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || pict){ |
908 int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict); | |
909 avctx->frame_number++; | |
2764 | 910 emms_c(); //needed to avoid an emms_c() call before every return; |
2967 | 911 |
2091 | 912 return ret; |
913 }else | |
914 return 0; | |
0 | 915 } |
916 | |
2967 | 917 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
2756 | 918 const AVSubtitle *sub) |
919 { | |
920 int ret; | |
921 ret = avctx->codec->encode(avctx, buf, buf_size, (void *)sub); | |
922 avctx->frame_number++; | |
923 return ret; | |
924 } | |
925 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
926 int attribute_align_arg avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, |
0 | 927 int *got_picture_ptr, |
1064 | 928 uint8_t *buf, int buf_size) |
0 | 929 { |
930 int ret; | |
2967 | 931 |
2028 | 932 *got_picture_ptr= 0; |
2422 | 933 if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)) |
934 return -1; | |
2453 | 935 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){ |
2967 | 936 ret = avctx->codec->decode(avctx, picture, got_picture_ptr, |
2453 | 937 buf, buf_size); |
814 | 938 |
2764 | 939 emms_c(); //needed to avoid an emms_c() call before every return; |
2967 | 940 |
941 if (*got_picture_ptr) | |
2453 | 942 avctx->frame_number++; |
943 }else | |
944 ret= 0; | |
945 | |
0 | 946 return ret; |
947 } | |
948 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
949 int attribute_align_arg avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, |
0 | 950 int *frame_size_ptr, |
1064 | 951 uint8_t *buf, int buf_size) |
0 | 952 { |
953 int ret; | |
954 | |
2791 | 955 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){ |
4578
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
956 //FIXME remove the check below _after_ ensuring that all audio check that the available space is enough |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
957 if(*frame_size_ptr < AVCODEC_MAX_AUDIO_FRAME_SIZE){ |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
958 av_log(avctx, AV_LOG_ERROR, "buffer smaller than AVCODEC_MAX_AUDIO_FRAME_SIZE\n"); |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
959 return -1; |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
960 } |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
961 if(*frame_size_ptr < FF_MIN_BUFFER_SIZE || |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
962 *frame_size_ptr < avctx->channels * avctx->frame_size * sizeof(int16_t) || |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
963 *frame_size_ptr < buf_size){ |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
964 av_log(avctx, AV_LOG_ERROR, "buffer %d too small\n", *frame_size_ptr); |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
965 return -1; |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
966 } |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
967 |
2967 | 968 ret = avctx->codec->decode(avctx, samples, frame_size_ptr, |
2791 | 969 buf, buf_size); |
970 avctx->frame_number++; | |
4351 | 971 }else{ |
2791 | 972 ret= 0; |
4351 | 973 *frame_size_ptr=0; |
974 } | |
0 | 975 return ret; |
976 } | |
977 | |
4351 | 978 #if LIBAVCODEC_VERSION_INT < ((52<<16)+(0<<8)+0) |
979 int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, | |
980 int *frame_size_ptr, | |
981 uint8_t *buf, int buf_size){ | |
982 *frame_size_ptr= AVCODEC_MAX_AUDIO_FRAME_SIZE; | |
983 return avcodec_decode_audio2(avctx, samples, frame_size_ptr, buf, buf_size); | |
984 } | |
985 #endif | |
986 | |
2756 | 987 int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub, |
988 int *got_sub_ptr, | |
989 const uint8_t *buf, int buf_size) | |
990 { | |
991 int ret; | |
992 | |
993 *got_sub_ptr = 0; | |
2967 | 994 ret = avctx->codec->decode(avctx, sub, got_sub_ptr, |
2756 | 995 (uint8_t *)buf, buf_size); |
996 if (*got_sub_ptr) | |
997 avctx->frame_number++; | |
998 return ret; | |
999 } | |
1000 | |
0 | 1001 int avcodec_close(AVCodecContext *avctx) |
1002 { | |
2806 | 1003 entangled_thread_counter++; |
1004 if(entangled_thread_counter != 1){ | |
1005 av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); | |
1006 entangled_thread_counter--; | |
1007 return -1; | |
1008 } | |
1009 | |
5234 | 1010 if (ENABLE_THREADS && avctx->thread_opaque) |
1011 avcodec_thread_free(avctx); | |
0 | 1012 if (avctx->codec->close) |
1013 avctx->codec->close(avctx); | |
1994 | 1014 avcodec_default_free_buffers(avctx); |
394 | 1015 av_freep(&avctx->priv_data); |
0 | 1016 avctx->codec = NULL; |
2806 | 1017 entangled_thread_counter--; |
0 | 1018 return 0; |
1019 } | |
1020 | |
1021 AVCodec *avcodec_find_encoder(enum CodecID id) | |
1022 { | |
1023 AVCodec *p; | |
1024 p = first_avcodec; | |
1025 while (p) { | |
1026 if (p->encode != NULL && p->id == id) | |
1027 return p; | |
1028 p = p->next; | |
1029 } | |
1030 return NULL; | |
1031 } | |
1032 | |
177 | 1033 AVCodec *avcodec_find_encoder_by_name(const char *name) |
1034 { | |
1035 AVCodec *p; | |
1036 p = first_avcodec; | |
1037 while (p) { | |
1038 if (p->encode != NULL && strcmp(name,p->name) == 0) | |
1039 return p; | |
1040 p = p->next; | |
1041 } | |
1042 return NULL; | |
1043 } | |
1044 | |
0 | 1045 AVCodec *avcodec_find_decoder(enum CodecID id) |
1046 { | |
1047 AVCodec *p; | |
1048 p = first_avcodec; | |
1049 while (p) { | |
1050 if (p->decode != NULL && p->id == id) | |
1051 return p; | |
1052 p = p->next; | |
1053 } | |
1054 return NULL; | |
1055 } | |
1056 | |
1057 AVCodec *avcodec_find_decoder_by_name(const char *name) | |
1058 { | |
1059 AVCodec *p; | |
1060 p = first_avcodec; | |
1061 while (p) { | |
1062 if (p->decode != NULL && strcmp(name,p->name) == 0) | |
1063 return p; | |
1064 p = p->next; | |
1065 } | |
1066 return NULL; | |
1067 } | |
1068 | |
1069 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) | |
1070 { | |
1071 const char *codec_name; | |
1072 AVCodec *p; | |
1073 char buf1[32]; | |
337 | 1074 char channels_str[100]; |
92 | 1075 int bitrate; |
0 | 1076 |
1077 if (encode) | |
1078 p = avcodec_find_encoder(enc->codec_id); | |
1079 else | |
1080 p = avcodec_find_decoder(enc->codec_id); | |
1081 | |
1082 if (p) { | |
1083 codec_name = p->name; | |
1449
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1084 if (!encode && enc->codec_id == CODEC_ID_MP3) { |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1085 if (enc->sub_id == 2) |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1086 codec_name = "mp2"; |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1087 else if (enc->sub_id == 1) |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1088 codec_name = "mp1"; |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1089 } |
1582
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1090 } else if (enc->codec_id == CODEC_ID_MPEG2TS) { |
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1091 /* fake mpeg2 transport stream codec (currently not |
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1092 registered) */ |
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1093 codec_name = "mpeg2ts"; |
0 | 1094 } else if (enc->codec_name[0] != '\0') { |
1095 codec_name = enc->codec_name; | |
1096 } else { | |
1097 /* output avi tags */ | |
2967 | 1098 if( isprint(enc->codec_tag&0xFF) && isprint((enc->codec_tag>>8)&0xFF) |
2856 | 1099 && isprint((enc->codec_tag>>16)&0xFF) && isprint((enc->codec_tag>>24)&0xFF)){ |
2967 | 1100 snprintf(buf1, sizeof(buf1), "%c%c%c%c / 0x%04X", |
0 | 1101 enc->codec_tag & 0xff, |
1102 (enc->codec_tag >> 8) & 0xff, | |
1103 (enc->codec_tag >> 16) & 0xff, | |
2856 | 1104 (enc->codec_tag >> 24) & 0xff, |
1105 enc->codec_tag); | |
0 | 1106 } else { |
1107 snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag); | |
1108 } | |
1109 codec_name = buf1; | |
1110 } | |
1111 | |
1112 switch(enc->codec_type) { | |
1113 case CODEC_TYPE_VIDEO: | |
1114 snprintf(buf, buf_size, | |
1115 "Video: %s%s", | |
1389 | 1116 codec_name, enc->mb_decision ? " (hq)" : ""); |
2636
2344c6713011
print pix_fmt if its known instead of if the raw codec is used
michael
parents:
2635
diff
changeset
|
1117 if (enc->pix_fmt != PIX_FMT_NONE) { |
55 | 1118 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
1119 ", %s", | |
988
001b7d3045e5
moved avcodec_get_chroma_sub_sample() to imgconvert.c
bellard
parents:
963
diff
changeset
|
1120 avcodec_get_pix_fmt_name(enc->pix_fmt)); |
55 | 1121 } |
0 | 1122 if (enc->width) { |
1123 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
2884
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1124 ", %dx%d", |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1125 enc->width, enc->height); |
4500
18a88f830d1a
Directly access av_log_level instead of calling av_log_{set, get}_level()
lucabe
parents:
4494
diff
changeset
|
1126 if(av_log_level >= AV_LOG_DEBUG){ |
2884
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1127 int g= ff_gcd(enc->time_base.num, enc->time_base.den); |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1128 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1129 ", %d/%d", |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1130 enc->time_base.num/g, enc->time_base.den/g); |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1131 } |
0 | 1132 } |
741 | 1133 if (encode) { |
1134 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1135 ", q=%d-%d", enc->qmin, enc->qmax); | |
1136 } | |
92 | 1137 bitrate = enc->bit_rate; |
0 | 1138 break; |
1139 case CODEC_TYPE_AUDIO: | |
1140 snprintf(buf, buf_size, | |
1141 "Audio: %s", | |
1142 codec_name); | |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1143 switch (enc->channels) { |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1144 case 1: |
337 | 1145 strcpy(channels_str, "mono"); |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1146 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1147 case 2: |
337 | 1148 strcpy(channels_str, "stereo"); |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1149 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1150 case 6: |
337 | 1151 strcpy(channels_str, "5:1"); |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1152 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1153 default: |
2423 | 1154 snprintf(channels_str, sizeof(channels_str), "%d channels", enc->channels); |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1155 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1156 } |
0 | 1157 if (enc->sample_rate) { |
1158 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1159 ", %d Hz, %s", | |
1160 enc->sample_rate, | |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1161 channels_str); |
0 | 1162 } |
2967 | 1163 |
92 | 1164 /* for PCM codecs, compute bitrate directly */ |
1165 switch(enc->codec_id) { | |
2852
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1166 case CODEC_ID_PCM_S32LE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1167 case CODEC_ID_PCM_S32BE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1168 case CODEC_ID_PCM_U32LE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1169 case CODEC_ID_PCM_U32BE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1170 bitrate = enc->sample_rate * enc->channels * 32; |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1171 break; |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1172 case CODEC_ID_PCM_S24LE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1173 case CODEC_ID_PCM_S24BE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1174 case CODEC_ID_PCM_U24LE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1175 case CODEC_ID_PCM_U24BE: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1176 case CODEC_ID_PCM_S24DAUD: |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1177 bitrate = enc->sample_rate * enc->channels * 24; |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1178 break; |
92 | 1179 case CODEC_ID_PCM_S16LE: |
1180 case CODEC_ID_PCM_S16BE: | |
1181 case CODEC_ID_PCM_U16LE: | |
1182 case CODEC_ID_PCM_U16BE: | |
94 | 1183 bitrate = enc->sample_rate * enc->channels * 16; |
92 | 1184 break; |
1185 case CODEC_ID_PCM_S8: | |
1186 case CODEC_ID_PCM_U8: | |
1187 case CODEC_ID_PCM_ALAW: | |
1188 case CODEC_ID_PCM_MULAW: | |
94 | 1189 bitrate = enc->sample_rate * enc->channels * 8; |
92 | 1190 break; |
1191 default: | |
1192 bitrate = enc->bit_rate; | |
1193 break; | |
1194 } | |
0 | 1195 break; |
1582
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1196 case CODEC_TYPE_DATA: |
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1197 snprintf(buf, buf_size, "Data: %s", codec_name); |
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1198 bitrate = enc->bit_rate; |
ece0ad14a35d
added fake codec CODEC_ID_MPEG2TS of type CODEC_TYPE_DATA (needed for simpler handling of raw transport streams in ffserver and RTP - better solutions are welcomed)
bellard
parents:
1549
diff
changeset
|
1199 break; |
2756 | 1200 case CODEC_TYPE_SUBTITLE: |
1201 snprintf(buf, buf_size, "Subtitle: %s", codec_name); | |
1202 bitrate = enc->bit_rate; | |
1203 break; | |
0 | 1204 default: |
2281 | 1205 snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type); |
1206 return; | |
0 | 1207 } |
741 | 1208 if (encode) { |
1209 if (enc->flags & CODEC_FLAG_PASS1) | |
1210 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1211 ", pass 1"); | |
1212 if (enc->flags & CODEC_FLAG_PASS2) | |
1213 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1214 ", pass 2"); | |
1215 } | |
92 | 1216 if (bitrate != 0) { |
2967 | 1217 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
92 | 1218 ", %d kb/s", bitrate / 1000); |
0 | 1219 } |
1220 } | |
1221 | |
362 | 1222 unsigned avcodec_version( void ) |
1223 { | |
1224 return LIBAVCODEC_VERSION_INT; | |
1225 } | |
55 | 1226 |
379 | 1227 unsigned avcodec_build( void ) |
1228 { | |
1229 return LIBAVCODEC_BUILD; | |
1230 } | |
1231 | |
3169 | 1232 static void init_crcs(void){ |
4663 | 1233 #if LIBAVUTIL_VERSION_INT < (50<<16) |
3169 | 1234 av_crc04C11DB7= av_mallocz_static(sizeof(AVCRC) * 257); |
3170 | 1235 av_crc8005 = av_mallocz_static(sizeof(AVCRC) * 257); |
3171 | 1236 av_crc07 = av_mallocz_static(sizeof(AVCRC) * 257); |
4663 | 1237 #endif |
3169 | 1238 av_crc_init(av_crc04C11DB7, 0, 32, 0x04c11db7, sizeof(AVCRC)*257); |
3170 | 1239 av_crc_init(av_crc8005 , 0, 16, 0x8005 , sizeof(AVCRC)*257); |
3171 | 1240 av_crc_init(av_crc07 , 0, 8, 0x07 , sizeof(AVCRC)*257); |
3169 | 1241 } |
1242 | |
0 | 1243 void avcodec_init(void) |
1244 { | |
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1245 static int inited = 0; |
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1246 |
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1247 if (inited != 0) |
2979 | 1248 return; |
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1249 inited = 1; |
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1250 |
4197 | 1251 dsputil_static_init(); |
3169 | 1252 init_crcs(); |
0 | 1253 } |
1254 | |
341 | 1255 void avcodec_flush_buffers(AVCodecContext *avctx) |
1256 { | |
1368 | 1257 if(avctx->codec->flush) |
1258 avctx->codec->flush(avctx); | |
341 | 1259 } |
1260 | |
2231 | 1261 void avcodec_default_free_buffers(AVCodecContext *s){ |
1214 | 1262 int i, j; |
1263 | |
1264 if(s->internal_buffer==NULL) return; | |
2967 | 1265 |
1214 | 1266 for(i=0; i<INTERNAL_BUFFER_SIZE; i++){ |
1267 InternalBuffer *buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
1268 for(j=0; j<4; j++){ | |
1269 av_freep(&buf->base[j]); | |
1270 buf->data[j]= NULL; | |
1271 } | |
1272 } | |
1273 av_freep(&s->internal_buffer); | |
2967 | 1274 |
1214 | 1275 s->internal_buffer_count=0; |
1276 } | |
1277 | |
1264 | 1278 char av_get_pict_type_char(int pict_type){ |
1279 switch(pict_type){ | |
2967 | 1280 case I_TYPE: return 'I'; |
1281 case P_TYPE: return 'P'; | |
1282 case B_TYPE: return 'B'; | |
1283 case S_TYPE: return 'S'; | |
1284 case SI_TYPE:return 'i'; | |
1285 case SP_TYPE:return 'p'; | |
1264 | 1286 default: return '?'; |
1287 } | |
1288 } | |
1289 | |
3433 | 1290 int av_get_bits_per_sample(enum CodecID codec_id){ |
1291 switch(codec_id){ | |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
1292 case CODEC_ID_ADPCM_SBPRO_2: |
3438 | 1293 return 2; |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
1294 case CODEC_ID_ADPCM_SBPRO_3: |
3438 | 1295 return 3; |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
1296 case CODEC_ID_ADPCM_SBPRO_4: |
3438 | 1297 case CODEC_ID_ADPCM_CT: |
1298 return 4; | |
3433 | 1299 case CODEC_ID_PCM_ALAW: |
1300 case CODEC_ID_PCM_MULAW: | |
1301 case CODEC_ID_PCM_S8: | |
1302 case CODEC_ID_PCM_U8: | |
1303 return 8; | |
1304 case CODEC_ID_PCM_S16BE: | |
1305 case CODEC_ID_PCM_S16LE: | |
1306 case CODEC_ID_PCM_U16BE: | |
1307 case CODEC_ID_PCM_U16LE: | |
1308 return 16; | |
1309 case CODEC_ID_PCM_S24DAUD: | |
1310 case CODEC_ID_PCM_S24BE: | |
1311 case CODEC_ID_PCM_S24LE: | |
1312 case CODEC_ID_PCM_U24BE: | |
1313 case CODEC_ID_PCM_U24LE: | |
1314 return 24; | |
1315 case CODEC_ID_PCM_S32BE: | |
1316 case CODEC_ID_PCM_S32LE: | |
1317 case CODEC_ID_PCM_U32BE: | |
1318 case CODEC_ID_PCM_U32LE: | |
1319 return 32; | |
1320 default: | |
1321 return 0; | |
1322 } | |
1323 } | |
1324 | |
5537 | 1325 int av_get_bits_per_sample_format(enum SampleFormat sample_fmt) { |
1326 switch (sample_fmt) { | |
1327 case SAMPLE_FMT_U8: | |
1328 return 8; | |
1329 case SAMPLE_FMT_S16: | |
1330 return 16; | |
1331 case SAMPLE_FMT_S24: | |
1332 return 24; | |
1333 case SAMPLE_FMT_S32: | |
1334 case SAMPLE_FMT_FLT: | |
1335 return 32; | |
1336 default: | |
1337 return 0; | |
1338 } | |
1339 } | |
1340 | |
2362
7a6ff8cc7c95
BeOS threading support. changed some "if FOO_THREAD||BAR_THREAD" to a more generic "if HAVE_THREADS"
mmu_man
parents:
2324
diff
changeset
|
1341 #if !defined(HAVE_THREADS) |
2013
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1342 int avcodec_thread_init(AVCodecContext *s, int thread_count){ |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1343 return -1; |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1344 } |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1345 #endif |
2676 | 1346 |
1347 unsigned int av_xiphlacing(unsigned char *s, unsigned int v) | |
1348 { | |
1349 unsigned int n = 0; | |
1350 | |
1351 while(v >= 0xff) { | |
1352 *s++ = 0xff; | |
1353 v -= 0xff; | |
1354 n++; | |
1355 } | |
1356 *s = v; | |
1357 n++; | |
1358 return n; | |
1359 } | |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1360 |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1361 /* Wrapper to work around the lack of mkstemp() on mingw/cygin. |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1362 * Also, tries to create file in /tmp first, if possible. |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1363 * *prefix can be a character constant; *filename will be allocated internally. |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1364 * Returns file descriptor of opened file (or -1 on error) |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1365 * and opened file name in **filename. */ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1366 int av_tempfile(char *prefix, char **filename) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1367 int fd=-1; |
5284 | 1368 #if !defined(HAVE_MKSTEMP) |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1369 *filename = tempnam(".", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1370 #else |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1371 size_t len = strlen(prefix) + 12; /* room for "/tmp/" and "XXXXXX\0" */ |
3372 | 1372 *filename = av_malloc(len); |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1373 #endif |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1374 /* -----common section-----*/ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1375 if (*filename == NULL) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1376 av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot allocate file name\n"); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1377 return -1; |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1378 } |
5284 | 1379 #if !defined(HAVE_MKSTEMP) |
5285 | 1380 fd = open(*filename, O_RDWR | O_BINARY | O_CREAT, 0444); |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1381 #else |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1382 snprintf(*filename, len, "/tmp/%sXXXXXX", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1383 fd = mkstemp(*filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1384 if (fd < 0) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1385 snprintf(*filename, len, "./%sXXXXXX", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1386 fd = mkstemp(*filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1387 } |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1388 #endif |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1389 /* -----common section-----*/ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1390 if (fd < 0) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1391 av_log(NULL, AV_LOG_ERROR, "ff_tempfile: Cannot open temporary file %s\n", *filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1392 return -1; |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1393 } |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1394 return fd; /* success */ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1395 } |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1396 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1397 typedef struct { |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1398 const char *abbr; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1399 int width, height; |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1400 } VideoFrameSizeAbbr; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1401 |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1402 typedef struct { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1403 const char *abbr; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1404 int rate_num, rate_den; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1405 } VideoFrameRateAbbr; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1406 |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1407 static VideoFrameSizeAbbr video_frame_size_abbrs[] = { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1408 { "ntsc", 720, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1409 { "pal", 720, 576 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1410 { "qntsc", 352, 240 }, /* VCD compliant NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1411 { "qpal", 352, 288 }, /* VCD compliant PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1412 { "sntsc", 640, 480 }, /* square pixel NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1413 { "spal", 768, 576 }, /* square pixel PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1414 { "film", 352, 240 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1415 { "ntsc-film", 352, 240 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1416 { "sqcif", 128, 96 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1417 { "qcif", 176, 144 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1418 { "cif", 352, 288 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1419 { "4cif", 704, 576 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1420 { "qqvga", 160, 120 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1421 { "qvga", 320, 240 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1422 { "vga", 640, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1423 { "svga", 800, 600 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1424 { "xga", 1024, 768 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1425 { "uxga", 1600,1200 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1426 { "qxga", 2048,1536 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1427 { "sxga", 1280,1024 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1428 { "qsxga", 2560,2048 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1429 { "hsxga", 5120,4096 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1430 { "wvga", 852, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1431 { "wxga", 1366, 768 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1432 { "wsxga", 1600,1024 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1433 { "wuxga", 1920,1200 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1434 { "woxga", 2560,1600 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1435 { "wqsxga", 3200,2048 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1436 { "wquxga", 3840,2400 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1437 { "whsxga", 6400,4096 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1438 { "whuxga", 7680,4800 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1439 { "cga", 320, 200 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1440 { "ega", 640, 350 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1441 { "hd480", 852, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1442 { "hd720", 1280, 720 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1443 { "hd1080", 1920,1080 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1444 }; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1445 |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1446 static VideoFrameRateAbbr video_frame_rate_abbrs[]= { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1447 { "ntsc", 30000, 1001 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1448 { "pal", 25, 1 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1449 { "qntsc", 30000, 1001 }, /* VCD compliant NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1450 { "qpal", 25, 1 }, /* VCD compliant PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1451 { "sntsc", 30000, 1001 }, /* square pixel NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1452 { "spal", 25, 1 }, /* square pixel PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1453 { "film", 24, 1 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1454 { "ntsc-film", 24000, 1001 }, |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1455 }; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1456 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1457 int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1458 { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1459 int i; |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1460 int n = sizeof(video_frame_size_abbrs) / sizeof(VideoFrameSizeAbbr); |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1461 const char *p; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1462 int frame_width = 0, frame_height = 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1463 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1464 for(i=0;i<n;i++) { |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1465 if (!strcmp(video_frame_size_abbrs[i].abbr, str)) { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1466 frame_width = video_frame_size_abbrs[i].width; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1467 frame_height = video_frame_size_abbrs[i].height; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1468 break; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1469 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1470 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1471 if (i == n) { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1472 p = str; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1473 frame_width = strtol(p, (char **)&p, 10); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1474 if (*p) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1475 p++; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1476 frame_height = strtol(p, (char **)&p, 10); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1477 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1478 if (frame_width <= 0 || frame_height <= 0) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1479 return -1; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1480 *width_ptr = frame_width; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1481 *height_ptr = frame_height; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1482 return 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1483 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1484 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1485 int av_parse_video_frame_rate(AVRational *frame_rate, const char *arg) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1486 { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1487 int i; |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1488 int n = sizeof(video_frame_rate_abbrs) / sizeof(VideoFrameRateAbbr); |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1489 char* cp; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1490 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1491 /* First, we check our abbreviation table */ |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1492 for (i = 0; i < n; ++i) |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1493 if (!strcmp(video_frame_rate_abbrs[i].abbr, arg)) { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1494 frame_rate->num = video_frame_rate_abbrs[i].rate_num; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1495 frame_rate->den = video_frame_rate_abbrs[i].rate_den; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1496 return 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1497 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1498 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1499 /* Then, we try to parse it as fraction */ |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1500 cp = strchr(arg, '/'); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1501 if (!cp) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1502 cp = strchr(arg, ':'); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1503 if (cp) { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1504 char* cpp; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1505 frame_rate->num = strtol(arg, &cpp, 10); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1506 if (cpp != arg || cpp == cp) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1507 frame_rate->den = strtol(cp+1, &cpp, 10); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1508 else |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1509 frame_rate->num = 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1510 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1511 else { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1512 /* Finally we give up and parse it as double */ |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1513 AVRational time_base = av_d2q(strtod(arg, 0), DEFAULT_FRAME_RATE_BASE); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1514 frame_rate->den = time_base.den; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1515 frame_rate->num = time_base.num; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1516 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1517 if (!frame_rate->num || !frame_rate->den) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1518 return -1; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1519 else |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1520 return 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1521 } |