Mercurial > libavcodec.hg
annotate utils.c @ 3995:b00c06477dff libavcodec
write cabac low and range variables as early as possible to prevent stalls from reading them before they where written, the P4 is said to disslike that alot, on P3 its 2% faster (START/STOP_TIMER over decode_residual)
author | michael |
---|---|
date | Wed, 11 Oct 2006 16:11:41 +0000 |
parents | c3ed6f46c5d7 |
children | ffe1b004ecc7 |
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> |
3461
7581658de3d1
CONFIG_WIN32 implies MinGW and Cygwin and possibly more, so use just
diego
parents:
3442
diff
changeset
|
37 #ifdef __MINGW32__ |
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 | |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
62 /** |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
63 * realloc which does nothing if the block is large enough |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
64 */ |
1057 | 65 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
|
66 { |
2967 | 67 if(min_size < *size) |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
68 return ptr; |
2967 | 69 |
2422 | 70 *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
|
71 |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
72 return av_realloc(ptr, *size); |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
73 } |
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
74 |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
75 static unsigned int last_static = 0; |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
76 static unsigned int allocated_static = 0; |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
77 static void** array_static = NULL; |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
78 |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
79 /** |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
80 * allocation of static arrays - do not use for normal allocation. |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
81 */ |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
82 void *av_mallocz_static(unsigned int size) |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
83 { |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
84 void *ptr = av_mallocz(size); |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
85 |
2967 | 86 if(ptr){ |
1901 | 87 array_static =av_fast_realloc(array_static, &allocated_static, sizeof(void*)*(last_static+1)); |
2422 | 88 if(!array_static) |
89 return NULL; | |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
90 array_static[last_static++] = ptr; |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
91 } |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
92 |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
93 return ptr; |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
94 } |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
95 |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
96 /** |
2370
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
97 * same as above, but does realloc |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
98 */ |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
99 |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
100 void *av_realloc_static(void *ptr, unsigned int size) |
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 int i; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
103 if(!ptr) |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
104 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
|
105 /* 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
|
106 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
|
107 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
|
108 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
|
109 return array_static[i]; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
110 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
111 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
112 return NULL; |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
113 |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
114 } |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
115 |
26560d4fdb1f
Memory leak fix patch by (Burkhard Plaum <plaum >at< ipf.uni-stuttgart )dot( de>)
michael
parents:
2362
diff
changeset
|
116 /** |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
117 * free all static arrays and reset pointers to 0. |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
118 */ |
1282 | 119 void av_free_static(void) |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
120 { |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
121 while(last_static){ |
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
122 av_freep(&array_static[--last_static]); |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
123 } |
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
124 av_freep(&array_static); |
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
125 } |
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
126 |
1854 | 127 /** |
2840
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
128 * 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
|
129 */ |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
130 |
3075 | 131 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
|
132 |
3075 | 133 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
|
134 { |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
135 av_free_static(); |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
136 } |
22eec5a1b043
Call av_free_static automatically before DLL unload patch by (plaum:ipf uni-stuttgart de)
michael
parents:
2817
diff
changeset
|
137 |
400 | 138 |
0 | 139 /* 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
|
140 AVCodec *first_avcodec = NULL; |
0 | 141 |
142 void register_avcodec(AVCodec *format) | |
143 { | |
144 AVCodec **p; | |
145 p = &first_avcodec; | |
146 while (*p != NULL) p = &(*p)->next; | |
147 *p = format; | |
148 format->next = NULL; | |
149 } | |
150 | |
2270 | 151 void avcodec_set_dimensions(AVCodecContext *s, int width, int height){ |
152 s->coded_width = width; | |
153 s->coded_height= height; | |
154 s->width = -((-width )>>s->lowres); | |
155 s->height= -((-height)>>s->lowres); | |
156 } | |
157 | |
1214 | 158 typedef struct InternalBuffer{ |
903 | 159 int last_pic_num; |
1214 | 160 uint8_t *base[4]; |
903 | 161 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
|
162 int linesize[4]; |
1214 | 163 }InternalBuffer; |
164 | |
165 #define INTERNAL_BUFFER_SIZE 32 | |
903 | 166 |
1538 | 167 #define ALIGN(x, a) (((x)+(a)-1)&~((a)-1)) |
168 | |
169 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){ | |
2967 | 170 int w_align= 1; |
171 int h_align= 1; | |
172 | |
1538 | 173 switch(s->pix_fmt){ |
174 case PIX_FMT_YUV420P: | |
175 case PIX_FMT_YUV422: | |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2125
diff
changeset
|
176 case PIX_FMT_UYVY422: |
1538 | 177 case PIX_FMT_YUV422P: |
178 case PIX_FMT_YUV444P: | |
179 case PIX_FMT_GRAY8: | |
180 case PIX_FMT_YUVJ420P: | |
181 case PIX_FMT_YUVJ422P: | |
182 case PIX_FMT_YUVJ444P: | |
183 w_align= 16; //FIXME check for non mpeg style codecs and use less alignment | |
184 h_align= 16; | |
185 break; | |
186 case PIX_FMT_YUV411P: | |
2309 | 187 case PIX_FMT_UYVY411: |
1538 | 188 w_align=32; |
189 h_align=8; | |
190 break; | |
191 case PIX_FMT_YUV410P: | |
192 if(s->codec_id == CODEC_ID_SVQ1){ | |
193 w_align=64; | |
194 h_align=64; | |
195 } | |
2104 | 196 case PIX_FMT_RGB555: |
197 if(s->codec_id == CODEC_ID_RPZA){ | |
198 w_align=4; | |
199 h_align=4; | |
200 } | |
201 case PIX_FMT_PAL8: | |
202 if(s->codec_id == CODEC_ID_SMC){ | |
203 w_align=4; | |
204 h_align=4; | |
205 } | |
1538 | 206 break; |
2418
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
207 case PIX_FMT_BGR24: |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
208 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
|
209 w_align=4; |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
210 h_align=4; |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
211 } |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
212 break; |
1538 | 213 default: |
214 w_align= 1; | |
215 h_align= 1; | |
216 break; | |
217 } | |
218 | |
219 *width = ALIGN(*width , w_align); | |
220 *height= ALIGN(*height, h_align); | |
221 } | |
222 | |
2422 | 223 int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h){ |
224 if((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/4) | |
225 return 0; | |
2967 | 226 |
2422 | 227 av_log(av_log_ctx, AV_LOG_ERROR, "picture size invalid (%ux%u)\n", w, h); |
228 return -1; | |
229 } | |
230 | |
925 | 231 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ |
903 | 232 int i; |
1538 | 233 int w= s->width; |
234 int h= s->height; | |
1214 | 235 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
|
236 int *picture_number; |
2422 | 237 |
924 | 238 assert(pic->data[0]==NULL); |
1214 | 239 assert(INTERNAL_BUFFER_SIZE > s->internal_buffer_count); |
903 | 240 |
2422 | 241 if(avcodec_check_dimensions(s,w,h)) |
242 return -1; | |
243 | |
1214 | 244 if(s->internal_buffer==NULL){ |
245 s->internal_buffer= av_mallocz(INTERNAL_BUFFER_SIZE*sizeof(InternalBuffer)); | |
246 } | |
247 #if 0 | |
248 s->internal_buffer= av_fast_realloc( | |
2967 | 249 s->internal_buffer, |
250 &s->internal_buffer_size, | |
1214 | 251 sizeof(InternalBuffer)*FFMAX(99, s->internal_buffer_count+1)/*FIXME*/ |
252 ); | |
253 #endif | |
2967 | 254 |
1214 | 255 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
|
256 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
|
257 (*picture_number)++; |
2967 | 258 |
1214 | 259 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
|
260 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
|
261 buf->last_pic_num= *picture_number; |
903 | 262 }else{ |
1538 | 263 int h_chroma_shift, v_chroma_shift; |
2950 | 264 int pixel_size, size[3]; |
265 AVPicture picture; | |
266 | |
903 | 267 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); |
1538 | 268 |
269 avcodec_align_dimensions(s, &w, &h); | |
2967 | 270 |
903 | 271 if(!(s->flags&CODEC_FLAG_EMU_EDGE)){ |
272 w+= EDGE_WIDTH*2; | |
273 h+= EDGE_WIDTH*2; | |
274 } | |
2950 | 275 avpicture_fill(&picture, NULL, s->pix_fmt, w, h); |
276 pixel_size= picture.linesize[0]*8 / w; | |
277 //av_log(NULL, AV_LOG_ERROR, "%d %d %d %d\n", (int)picture.data[1], w, h, s->pix_fmt); | |
278 assert(pixel_size>=1); | |
279 //FIXME next ensures that linesize= 2^x uvlinesize, thats needed because some MC code assumes it | |
280 if(pixel_size == 3*8) | |
281 w= ALIGN(w, STRIDE_ALIGN<<h_chroma_shift); | |
282 else | |
283 w= ALIGN(pixel_size*w, STRIDE_ALIGN<<(h_chroma_shift+3)) / pixel_size; | |
284 size[1] = avpicture_fill(&picture, NULL, s->pix_fmt, w, h); | |
285 size[0] = picture.linesize[0] * h; | |
286 size[1] -= size[0]; | |
287 if(picture.data[2]) | |
288 size[1]= size[2]= size[1]/2; | |
289 else | |
290 size[2]= 0; | |
291 | |
1214 | 292 buf->last_pic_num= -256*256*256*64; |
2950 | 293 memset(buf->base, 0, sizeof(buf->base)); |
294 memset(buf->data, 0, sizeof(buf->data)); | |
903 | 295 |
2950 | 296 for(i=0; i<3 && size[i]; i++){ |
1165 | 297 const int h_shift= i==0 ? 0 : h_chroma_shift; |
298 const int v_shift= i==0 ? 0 : v_chroma_shift; | |
903 | 299 |
2950 | 300 buf->linesize[i]= picture.linesize[i]; |
903 | 301 |
2950 | 302 buf->base[i]= av_malloc(size[i]+16); //FIXME 16 |
1214 | 303 if(buf->base[i]==NULL) return -1; |
2950 | 304 memset(buf->base[i], 128, size[i]); |
305 | |
306 // no edge if EDEG EMU or not planar YUV, we check for PAL8 redundantly to protect against a exploitable bug regression ... | |
2967 | 307 if((s->flags&CODEC_FLAG_EMU_EDGE) || (s->pix_fmt == PIX_FMT_PAL8) || !size[2]) |
1214 | 308 buf->data[i] = buf->base[i]; |
903 | 309 else |
2324 | 310 buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), STRIDE_ALIGN); |
903 | 311 } |
312 pic->age= 256*256*256*64; | |
313 } | |
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
|
314 pic->type= FF_BUFFER_TYPE_INTERNAL; |
903 | 315 |
1214 | 316 for(i=0; i<4; i++){ |
317 pic->base[i]= buf->base[i]; | |
318 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
|
319 pic->linesize[i]= buf->linesize[i]; |
1214 | 320 } |
321 s->internal_buffer_count++; | |
322 | |
903 | 323 return 0; |
324 } | |
325 | |
925 | 326 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ |
903 | 327 int i; |
1214 | 328 InternalBuffer *buf, *last, temp; |
329 | |
924 | 330 assert(pic->type==FF_BUFFER_TYPE_INTERNAL); |
1396 | 331 assert(s->internal_buffer_count); |
1214 | 332 |
1455 | 333 buf = NULL; /* avoids warning */ |
1214 | 334 for(i=0; i<s->internal_buffer_count; i++){ //just 3-5 checks so is not worth to optimize |
335 buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
336 if(buf->data[0] == pic->data[0]) | |
337 break; | |
338 } | |
339 assert(i < s->internal_buffer_count); | |
340 s->internal_buffer_count--; | |
341 last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; | |
342 | |
343 temp= *buf; | |
344 *buf= *last; | |
345 *last= temp; | |
346 | |
347 for(i=0; i<3; i++){ | |
903 | 348 pic->data[i]=NULL; |
1214 | 349 // pic->base[i]=NULL; |
350 } | |
903 | 351 //printf("R%X\n", pic->opaque); |
352 } | |
353 | |
1630 | 354 int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic){ |
355 AVFrame temp_pic; | |
356 int i; | |
357 | |
358 /* If no picture return a new buffer */ | |
359 if(pic->data[0] == NULL) { | |
360 /* We will copy from buffer, so must be readable */ | |
361 pic->buffer_hints |= FF_BUFFER_HINTS_READABLE; | |
362 return s->get_buffer(s, pic); | |
363 } | |
364 | |
365 /* If internal buffer type return the same buffer */ | |
366 if(pic->type == FF_BUFFER_TYPE_INTERNAL) | |
367 return 0; | |
368 | |
369 /* | |
370 * Not internal type and reget_buffer not overridden, emulate cr buffer | |
371 */ | |
372 temp_pic = *pic; | |
373 for(i = 0; i < 4; i++) | |
374 pic->data[i] = pic->base[i] = NULL; | |
375 pic->opaque = NULL; | |
376 /* Allocate new frame */ | |
377 if (s->get_buffer(s, pic)) | |
378 return -1; | |
379 /* Copy image data from old buffer to new buffer */ | |
380 img_copy((AVPicture*)pic, (AVPicture*)&temp_pic, s->pix_fmt, s->width, | |
381 s->height); | |
382 s->release_buffer(s, &temp_pic); // Release old frame | |
383 return 0; | |
384 } | |
385 | |
1799 | 386 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){ |
387 int i; | |
388 | |
389 for(i=0; i<count; i++){ | |
390 int r= func(c, arg[i]); | |
391 if(ret) ret[i]= r; | |
392 } | |
393 return 0; | |
394 } | |
395 | |
1858 | 396 enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt){ |
998 | 397 return fmt[0]; |
398 } | |
399 | |
1856 | 400 static const char* context_to_name(void* ptr) { |
401 AVCodecContext *avc= ptr; | |
402 | |
403 if(avc && avc->codec && avc->codec->name) | |
2967 | 404 return avc->codec->name; |
1856 | 405 else |
406 return "NULL"; | |
407 } | |
408 | |
3719 | 409 #define OFFSET(x) offsetof(AVCodecContext,x) |
2862 | 410 #define DEFAULT 0 //should be NAN but it doesnt work as its not a constant in glibc as required by ANSI/ISO C |
2873 | 411 //these names are too long to be readable |
412 #define V AV_OPT_FLAG_VIDEO_PARAM | |
413 #define A AV_OPT_FLAG_AUDIO_PARAM | |
414 #define S AV_OPT_FLAG_SUBTITLE_PARAM | |
2967 | 415 #define E AV_OPT_FLAG_ENCODING_PARAM |
2873 | 416 #define D AV_OPT_FLAG_DECODING_PARAM |
2862 | 417 |
3720
c52a1096385e
Synchronize the defaults specified in the AVOptions[] array to the defaults
takis
parents:
3719
diff
changeset
|
418 #define AV_CODEC_DEFAULT_BITRATE 200*1000 |
3704 | 419 |
3420 | 420 static const AVOption options[]={ |
3723
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
421 {"b", "set video bitrate (in bits/s)", OFFSET(bit_rate), FF_OPT_TYPE_INT, AV_CODEC_DEFAULT_BITRATE, INT_MIN, INT_MAX, V|A|E}, |
26a99b559184
Rename the AVOption's names to the shorter OptionDef names.
takis
parents:
3720
diff
changeset
|
422 {"bt", "set video bitrate tolerance (in bits/s)", OFFSET(bit_rate_tolerance), FF_OPT_TYPE_INT, AV_CODEC_DEFAULT_BITRATE*20, INT_MIN, INT_MAX, V|E}, |
2877 | 423 {"flags", NULL, OFFSET(flags), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, V|A|E|D, "flags"}, |
2881 | 424 {"mv4", "use four motion vector by macroblock (mpeg4)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_4MV, INT_MIN, INT_MAX, V|E, "flags"}, |
425 {"obmc", "use overlapped block motion compensation (h263+)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_OBMC, INT_MIN, INT_MAX, V|E, "flags"}, | |
426 {"qpel", "use 1/4 pel motion compensation", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_QPEL, INT_MIN, INT_MAX, V|E, "flags"}, | |
427 {"loop", "use loop filter", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_LOOP_FILTER, INT_MIN, INT_MAX, V|E, "flags"}, | |
428 {"qscale", "use fixed qscale", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_QSCALE, INT_MIN, INT_MAX, 0, "flags"}, | |
429 {"gmc", "use gmc", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GMC, INT_MIN, INT_MAX, V|E, "flags"}, | |
430 {"mv0", "always try a mb with mv=<0,0>", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_MV0, INT_MIN, INT_MAX, V|E, "flags"}, | |
431 {"part", "use data partitioning", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PART, INT_MIN, INT_MAX, V|E, "flags"}, | |
432 {"input_preserved", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INPUT_PRESERVED, INT_MIN, INT_MAX, 0, "flags"}, | |
433 {"pass1", "use internal 2pass ratecontrol in first pass mode", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PASS1, INT_MIN, INT_MAX, 0, "flags"}, | |
434 {"pass2", "use internal 2pass ratecontrol in second pass mode", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PASS2, INT_MIN, INT_MAX, 0, "flags"}, | |
435 {"extern_huff", "use external huffman table (for mjpeg)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_EXTERN_HUFF, INT_MIN, INT_MAX, 0, "flags"}, | |
436 {"gray", "only decode/encode grayscale", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_GRAY, INT_MIN, INT_MAX, V|E|D, "flags"}, | |
437 {"emu_edge", "don't draw edges", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_EMU_EDGE, INT_MIN, INT_MAX, 0, "flags"}, | |
438 {"psnr", "error[?] variables will be set during encoding", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_PSNR, INT_MIN, INT_MAX, V|E, "flags"}, | |
439 {"truncated", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRUNCATED, INT_MIN, INT_MAX, 0, "flags"}, | |
440 {"naq", "normalize adaptive quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_NORMALIZE_AQP, INT_MIN, INT_MAX, V|E, "flags"}, | |
441 {"ildct", "use interlaced dct", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INTERLACED_DCT, INT_MIN, INT_MAX, V|E, "flags"}, | |
442 {"low_delay", "force low delay", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_LOW_DELAY, INT_MIN, INT_MAX, V|D, "flags"}, | |
443 {"alt", "enable alternate scantable (mpeg2/mpeg4)", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_ALT_SCAN, INT_MIN, INT_MAX, V|E, "flags"}, | |
444 {"trell", "use trellis quantization", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_TRELLIS_QUANT, INT_MIN, INT_MAX, V|E, "flags"}, | |
445 {"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"}, | |
446 {"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"}, | |
447 {"aic", "h263 advanced intra coding / mpeg4 ac prediction", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_AC_PRED, INT_MIN, INT_MAX, V|E, "flags"}, | |
448 {"umv", "use unlimited motion vectors", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_H263P_UMV, INT_MIN, INT_MAX, V|E, "flags"}, | |
449 {"cbp", "use rate distortion optimization for cbp", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_CBP_RD, INT_MIN, INT_MAX, V|E, "flags"}, | |
2890 | 450 {"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 | 451 {"aiv", "h263 alternative inter vlc", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_H263P_AIV, INT_MIN, INT_MAX, V|E, "flags"}, |
452 {"slice", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG_H263P_SLICE_STRUCT, INT_MIN, INT_MAX, V|E, "flags"}, | |
453 {"ilme", "interlaced motion estimation", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_INTERLACED_ME, INT_MIN, INT_MAX, V|E, "flags"}, | |
454 {"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 | 455 {"cgop", "closed gop", 0, FF_OPT_TYPE_CONST, CODEC_FLAG_CLOSED_GOP, INT_MIN, INT_MAX, V|E, "flags"}, |
2881 | 456 {"fast", "allow non spec compliant speedup tricks", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_FAST, INT_MIN, INT_MAX, V|E, "flags2"}, |
457 {"sgop", "strictly enforce gop size", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_STRICT_GOP, INT_MIN, INT_MAX, V|E, "flags2"}, | |
458 {"noout", "skip bitstream encoding", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_NO_OUTPUT, INT_MIN, INT_MAX, V|E, "flags2"}, | |
459 {"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 | 460 {"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
|
461 {"me_method", "set motion estimation method", OFFSET(me_method), FF_OPT_TYPE_INT, ME_EPZS, INT_MIN, INT_MAX, V|E, "me_method"}, |
2862 | 462 {"extradata_size", NULL, OFFSET(extradata_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
463 {"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
|
464 {"g", "set the group of picture size", OFFSET(gop_size), FF_OPT_TYPE_INT, 12, INT_MIN, INT_MAX, V|E}, |
2862 | 465 {"rate_emu", NULL, 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
|
466 {"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
3966 | 467 {"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
|
468 {"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
|
469 {"frame_size", NULL, OFFSET(frame_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, A|E}, |
2862 | 470 {"frame_number", NULL, OFFSET(frame_number), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
471 {"real_pict_num", NULL, OFFSET(real_pict_num), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
472 {"delay", NULL, OFFSET(delay), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
3916 | 473 {"qcomp", "video quantizer scale compression (VBR)", OFFSET(qcompress), FF_OPT_TYPE_FLOAT, 0.5, FLT_MIN, FLT_MAX, V|E}, |
474 {"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), FF_OPT_TYPE_FLOAT, 0.5, FLT_MIN, FLT_MAX, V|E}, | |
475 {"qmin", "min video quantizer scale (VBR)", OFFSET(qmin), FF_OPT_TYPE_INT, 2, 1, 51, V|E}, | |
476 {"qmax", "max video quantizer scale (VBR)", OFFSET(qmax), FF_OPT_TYPE_INT, 31, 1, 51, V|E}, | |
477 {"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
|
478 {"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
|
479 {"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}, |
2873 | 480 {"rc_strategy", NULL, OFFSET(rc_strategy), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2989
c6e656e76eed
10l (didnt remove option from old ones after converting to AVOption)
michael
parents:
2983
diff
changeset
|
481 {"b_strategy", NULL, OFFSET(b_frame_strategy), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E}, |
2873 | 482 {"hurry_up", NULL, OFFSET(hurry_up), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D}, |
2862 | 483 {"rtp_mode", NULL, OFFSET(rtp_mode), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
484 {"rtp_payload_size", NULL, OFFSET(rtp_payload_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
485 {"mv_bits", NULL, OFFSET(mv_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
486 {"header_bits", NULL, OFFSET(header_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
487 {"i_tex_bits", NULL, OFFSET(i_tex_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
488 {"p_tex_bits", NULL, OFFSET(p_tex_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
489 {"i_count", NULL, OFFSET(i_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
490 {"p_count", NULL, OFFSET(p_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
491 {"skip_count", NULL, OFFSET(skip_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
492 {"misc_bits", NULL, OFFSET(misc_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
493 {"frame_bits", NULL, OFFSET(frame_bits), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
494 {"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
|
495 {"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 | 496 {"autodetect", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_AUTODETECT, INT_MIN, INT_MAX, V|D, "bug"}, |
497 {"old_msmpeg4", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_OLD_MSMPEG4, INT_MIN, INT_MAX, V|D, "bug"}, | |
498 {"xvid_ilace", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_XVID_ILACE, INT_MIN, INT_MAX, V|D, "bug"}, | |
499 {"ump4", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_UMP4, INT_MIN, INT_MAX, V|D, "bug"}, | |
500 {"no_padding", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_NO_PADDING, INT_MIN, INT_MAX, V|D, "bug"}, | |
501 {"amv", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_AMV, INT_MIN, INT_MAX, V|D, "bug"}, | |
502 {"ac_vlc", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_AC_VLC, INT_MIN, INT_MAX, V|D, "bug"}, | |
503 {"qpel_chroma", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_QPEL_CHROMA, INT_MIN, INT_MAX, V|D, "bug"}, | |
504 {"std_qpel", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_STD_QPEL, INT_MIN, INT_MAX, V|D, "bug"}, | |
505 {"qpel_chroma2", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_QPEL_CHROMA2, INT_MIN, INT_MAX, V|D, "bug"}, | |
506 {"direct_blocksize", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_DIRECT_BLOCKSIZE, INT_MIN, INT_MAX, V|D, "bug"}, | |
507 {"edge", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_EDGE, INT_MIN, INT_MAX, V|D, "bug"}, | |
508 {"hpel_chroma", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_HPEL_CHROMA, INT_MIN, INT_MAX, V|D, "bug"}, | |
509 {"dc_clip", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_DC_CLIP, INT_MIN, INT_MAX, V|D, "bug"}, | |
510 {"ms", NULL, 0, FF_OPT_TYPE_CONST, FF_BUG_MS, INT_MIN, INT_MAX, V|D, "bug"}, | |
511 {"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}, | |
512 {"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}, | |
3713
8b0992252432
adds descriptions to the libavcodec AVOptions array, taken from the
gpoirier
parents:
3704
diff
changeset
|
513 {"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "strict"}, |
2881 | 514 {"very", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_VERY_STRICT, INT_MIN, INT_MAX, V|E, "strict"}, |
515 {"strict", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_STRICT, INT_MIN, INT_MAX, V|E, "strict"}, | |
516 {"normal", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_NORMAL, INT_MIN, INT_MAX, V|E, "strict"}, | |
517 {"inofficial", NULL, 0, FF_OPT_TYPE_CONST, FF_COMPLIANCE_INOFFICIAL, INT_MIN, INT_MAX, V|E, "strict"}, | |
518 {"experimental", NULL, 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
|
519 {"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}, |
2890 | 520 {"er", NULL, OFFSET(error_resilience), FF_OPT_TYPE_INT, FF_ER_CAREFUL, INT_MIN, INT_MAX, V|D, "er"}, |
2881 | 521 {"careful", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_CAREFUL, INT_MIN, INT_MAX, V|D, "er"}, |
522 {"compliant", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_COMPLIANT, INT_MIN, INT_MAX, V|D, "er"}, | |
523 {"aggressive", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_AGGRESSIVE, INT_MIN, INT_MAX, V|D, "er"}, | |
524 {"very_aggressive", NULL, 0, FF_OPT_TYPE_CONST, FF_ER_VERY_AGGRESSIVE, INT_MIN, INT_MAX, V|D, "er"}, | |
2862 | 525 {"has_b_frames", NULL, OFFSET(has_b_frames), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
526 {"block_align", NULL, OFFSET(block_align), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
527 {"parse_only", NULL, OFFSET(parse_only), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
2873 | 528 {"mpeg_quant", NULL, OFFSET(mpeg_quant), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2862 | 529 {"stats_out", NULL, OFFSET(stats_out), FF_OPT_TYPE_STRING, DEFAULT, CHAR_MIN, CHAR_MAX}, |
530 {"stats_in", NULL, OFFSET(stats_in), FF_OPT_TYPE_STRING, DEFAULT, CHAR_MIN, CHAR_MAX}, | |
3916 | 531 {"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}, |
3734
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
532 {"rc_qmod_amp", NULL, OFFSET(rc_qmod_amp), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, |
2873 | 533 {"rc_qmod_freq", NULL, OFFSET(rc_qmod_freq), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2862 | 534 {"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
|
535 {"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
|
536 {"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
|
537 {"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
|
538 {"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3720
c52a1096385e
Synchronize the defaults specified in the AVOptions[] array to the defaults
takis
parents:
3719
diff
changeset
|
539 {"rc_buf_aggressivity", NULL, 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
|
540 {"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
|
541 {"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
|
542 {"rc_init_cplx", "initial complexity for 1-pass encoding", OFFSET(rc_initial_cplx), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, |
2877 | 543 {"dct", NULL, OFFSET(dct_algo), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|E, "dct"}, |
2881 | 544 {"auto", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_AUTO, INT_MIN, INT_MAX, V|E, "dct"}, |
545 {"fastint", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_FASTINT, INT_MIN, INT_MAX, V|E, "dct"}, | |
546 {"int", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_INT, INT_MIN, INT_MAX, V|E, "dct"}, | |
547 {"mmx", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_MMX, INT_MIN, INT_MAX, V|E, "dct"}, | |
548 {"mlib", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_MLIB, INT_MIN, INT_MAX, V|E, "dct"}, | |
549 {"altivec", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_ALTIVEC, INT_MIN, INT_MAX, V|E, "dct"}, | |
550 {"faan", NULL, 0, FF_OPT_TYPE_CONST, FF_DCT_FAAN, INT_MIN, INT_MAX, V|E, "dct"}, | |
3734
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
551 {"lumi_mask", "lumimasking", OFFSET(lumi_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
|
552 {"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
|
553 {"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
|
554 {"p_mask", "inter masking", OFFSET(p_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
|
555 {"dark_mask", "darkness masking", OFFSET(dark_masking), FF_OPT_TYPE_FLOAT, 0, -FLT_MAX, FLT_MAX, V|E}, |
2862 | 556 {"unused", NULL, OFFSET(unused), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
2877 | 557 {"idct", NULL, OFFSET(idct_algo), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|E|D, "idct"}, |
2881 | 558 {"auto", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_AUTO, INT_MIN, INT_MAX, V|E|D, "idct"}, |
559 {"int", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_INT, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
560 {"simple", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLE, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
561 {"simplemmx", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEMMX, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
562 {"libmpeg2mmx", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_LIBMPEG2MMX, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
563 {"ps2", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_PS2, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
564 {"mlib", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_MLIB, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
565 {"arm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_ARM, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
566 {"altivec", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_ALTIVEC, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
567 {"sh4", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SH4, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
568 {"simplearm", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARM, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
3769 | 569 {"simplearmv5te", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_SIMPLEARMV5TE, INT_MIN, INT_MAX, V|E|D, "idct"}, |
2881 | 570 {"h264", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_H264, INT_MIN, INT_MAX, V|E|D, "idct"}, |
571 {"vp3", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_VP3, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
572 {"ipp", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_IPP, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
573 {"xvidmmx", NULL, 0, FF_OPT_TYPE_CONST, FF_IDCT_XVIDMMX, INT_MIN, INT_MAX, V|E|D, "idct"}, | |
2862 | 574 {"slice_count", NULL, OFFSET(slice_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
2890 | 575 {"ec", NULL, OFFSET(error_concealment), FF_OPT_TYPE_FLAGS, 3, INT_MIN, INT_MAX, V|D, "ec"}, |
2881 | 576 {"guess_mvs", NULL, 0, FF_OPT_TYPE_CONST, FF_EC_GUESS_MVS, INT_MIN, INT_MAX, V|D, "ec"}, |
577 {"deblock", NULL, 0, FF_OPT_TYPE_CONST, FF_EC_DEBLOCK, INT_MIN, INT_MAX, V|D, "ec"}, | |
2862 | 578 {"bits_per_sample", NULL, OFFSET(bits_per_sample), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
2890 | 579 {"pred", "prediction method", OFFSET(prediction_method), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "pred"}, |
2881 | 580 {"left", NULL, 0, FF_OPT_TYPE_CONST, FF_PRED_LEFT, INT_MIN, INT_MAX, V|E, "pred"}, |
581 {"plane", NULL, 0, FF_OPT_TYPE_CONST, FF_PRED_PLANE, INT_MIN, INT_MAX, V|E, "pred"}, | |
582 {"median", NULL, 0, FF_OPT_TYPE_CONST, FF_PRED_MEDIAN, INT_MIN, INT_MAX, V|E, "pred"}, | |
2877 | 583 {"aspect", NULL, OFFSET(sample_aspect_ratio), FF_OPT_TYPE_RATIONAL, DEFAULT, 0, 10, V|E}, |
584 {"debug", "print specific debug info", OFFSET(debug), FF_OPT_TYPE_FLAGS, DEFAULT, 0, INT_MAX, V|A|S|E|D, "debug"}, | |
2881 | 585 {"pict", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_PICT_INFO, INT_MIN, INT_MAX, V|D, "debug"}, |
586 {"rc", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_RC, INT_MIN, INT_MAX, V|E, "debug"}, | |
587 {"bitstream", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_BITSTREAM, INT_MIN, INT_MAX, V|D, "debug"}, | |
588 {"mb_type", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_MB_TYPE, INT_MIN, INT_MAX, V|D, "debug"}, | |
589 {"qp", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_QP, INT_MIN, INT_MAX, V|D, "debug"}, | |
590 {"mv", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_MV, INT_MIN, INT_MAX, V|D, "debug"}, | |
591 {"dct_coeff", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_DCT_COEFF, INT_MIN, INT_MAX, V|D, "debug"}, | |
592 {"skip", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_SKIP, INT_MIN, INT_MAX, V|D, "debug"}, | |
593 {"startcode", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_STARTCODE, INT_MIN, INT_MAX, V|D, "debug"}, | |
594 {"pts", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_PTS, INT_MIN, INT_MAX, V|D, "debug"}, | |
595 {"er", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_ER, INT_MIN, INT_MAX, V|D, "debug"}, | |
596 {"mmco", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_MMCO, INT_MIN, INT_MAX, V|D, "debug"}, | |
597 {"bugs", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_BUGS, INT_MIN, INT_MAX, V|D, "debug"}, | |
598 {"vis_qp", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_QP, INT_MIN, INT_MAX, V|D, "debug"}, | |
599 {"vis_mb_type", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MB_TYPE, INT_MIN, INT_MAX, V|D, "debug"}, | |
2877 | 600 {"vismv", "visualize motion vectors", OFFSET(debug_mv), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, V|D, "debug_mv"}, |
2881 | 601 {"pf", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MV_P_FOR, INT_MIN, INT_MAX, V|D, "debug_mv"}, |
602 {"bf", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MV_B_FOR, INT_MIN, INT_MAX, V|D, "debug_mv"}, | |
603 {"bb", NULL, 0, FF_OPT_TYPE_CONST, FF_DEBUG_VIS_MV_B_BACK, INT_MIN, INT_MAX, V|D, "debug_mv"}, | |
2873 | 604 {"mb_qmin", NULL, OFFSET(mb_qmin), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
605 {"mb_qmax", NULL, OFFSET(mb_qmax), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
2881 | 606 {"cmp", "full pel me compare function", OFFSET(me_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
607 {"subcmp", "sub pel me compare function", OFFSET(me_sub_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
2878 | 608 {"mbcmp", "macroblock compare function", OFFSET(mb_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
3704 | 609 {"ildctcmp", "interlaced dct compare function", OFFSET(ildct_cmp), FF_OPT_TYPE_INT, FF_CMP_VSAD, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
2878 | 610 {"dia_size", NULL, OFFSET(dia_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2873 | 611 {"last_pred", NULL, 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
|
612 {"preme", "pre motion estimation", OFFSET(pre_me), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2878 | 613 {"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
2881 | 614 {"sad", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_SAD, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
615 {"sse", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_SSE, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
616 {"satd", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_SATD, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
617 {"dct", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_DCT, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
618 {"psnr", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_PSNR, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
619 {"bit", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_BIT, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
620 {"rd", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_RD, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
621 {"zero", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_ZERO, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
622 {"vsad", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_VSAD, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
623 {"vsse", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_VSSE, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
624 {"nsse", NULL, 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
|
625 #ifdef CONFIG_SNOW_ENCODER |
2881 | 626 {"w53", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_W53, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
627 {"w97", NULL, 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
|
628 #endif |
2881 | 629 {"dctmax", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_DCTMAX, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
630 {"chroma", NULL, 0, FF_OPT_TYPE_CONST, FF_CMP_CHROMA, INT_MIN, INT_MAX, V|E, "cmp_func"}, | |
2873 | 631 {"pre_dia_size", NULL, OFFSET(pre_dia_size), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3704 | 632 {"subq", "sub pel motion estimation quality", OFFSET(me_subpel_quality), FF_OPT_TYPE_INT, 8, INT_MIN, INT_MAX, V|E}, |
2862 | 633 {"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
|
634 {"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
|
635 {"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
|
636 {"pbias", "inter quant bias", OFFSET(inter_quant_bias), FF_OPT_TYPE_INT, FF_DEFAULT_QUANT_BIAS, INT_MIN, INT_MAX, V|E}, |
2862 | 637 {"color_table_id", NULL, OFFSET(color_table_id), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
638 {"internal_buffer_count", NULL, OFFSET(internal_buffer_count), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
639 {"global_quality", NULL, OFFSET(global_quality), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
2878 | 640 {"coder", NULL, OFFSET(coder_type), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "coder"}, |
2890 | 641 {"vlc", "variable length coder / huffman coder", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_VLC, INT_MIN, INT_MAX, V|E, "coder"}, |
642 {"ac", "arithmetic coder", 0, FF_OPT_TYPE_CONST, FF_CODER_TYPE_AC, INT_MIN, INT_MAX, V|E, "coder"}, | |
643 {"context", "context model", OFFSET(context_model), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
2862 | 644 {"slice_flags", NULL, OFFSET(slice_flags), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, |
645 {"xvmc_acceleration", NULL, OFFSET(xvmc_acceleration), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX}, | |
2878 | 646 {"mbd", NULL, OFFSET(mb_decision), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E, "mbd"}, |
2881 | 647 {"simple", NULL, 0, FF_OPT_TYPE_CONST, FF_MB_DECISION_SIMPLE, INT_MIN, INT_MAX, V|E, "mbd"}, |
648 {"bits", NULL, 0, FF_OPT_TYPE_CONST, FF_MB_DECISION_BITS, INT_MIN, INT_MAX, V|E, "mbd"}, | |
649 {"rd", NULL, 0, FF_OPT_TYPE_CONST, FF_MB_DECISION_RD, INT_MIN, INT_MAX, V|E, "mbd"}, | |
2862 | 650 {"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
|
651 {"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
|
652 {"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
|
653 {"lmax", "max lagrange factor (VBR)", OFFSET(lmax), FF_OPT_TYPE_INT, 31*FF_QP2LAMBDA, 0, INT_MAX, V|E}, |
2890 | 654 {"nr", "noise reduction", OFFSET(noise_reduction), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2873 | 655 {"rc_init_occupancy", NULL, OFFSET(rc_initial_buffer_occupancy), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
656 {"inter_threshold", NULL, OFFSET(inter_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
3704 | 657 {"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
|
658 {"error", NULL, OFFSET(error_rate), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2878 | 659 {"antialias", NULL, OFFSET(antialias_algo), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D, "aa"}, |
2881 | 660 {"auto", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_AUTO, INT_MIN, INT_MAX, V|D, "aa"}, |
661 {"fastint", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_FASTINT, INT_MIN, INT_MAX, V|D, "aa"}, | |
662 {"int", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_INT, INT_MIN, INT_MAX, V|D, "aa"}, | |
663 {"float", NULL, 0, FF_OPT_TYPE_CONST, FF_AA_FLOAT, INT_MIN, INT_MAX, V|D, "aa"}, | |
2890 | 664 {"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
|
665 {"threads", NULL, OFFSET(thread_count), FF_OPT_TYPE_INT, 1, INT_MIN, INT_MAX, V|E|D}, |
2877 | 666 {"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
|
667 {"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3765 | 668 {"dc", "intra_dc_precision", OFFSET(intra_dc_precision), FF_OPT_TYPE_INT, 0, INT_MIN, INT_MAX, V|E}, |
2890 | 669 {"nssew", "nsse weight", OFFSET(nsse_weight), FF_OPT_TYPE_INT, 8, INT_MIN, INT_MAX, V|E}, |
2873 | 670 {"skip_top", NULL, OFFSET(skip_top), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D}, |
671 {"skip_bottom", NULL, OFFSET(skip_bottom), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|D}, | |
2878 | 672 {"profile", NULL, OFFSET(profile), FF_OPT_TYPE_INT, FF_PROFILE_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "profile"}, |
2881 | 673 {"unknown", NULL, 0, FF_OPT_TYPE_CONST, FF_PROFILE_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "profile"}, |
2878 | 674 {"level", NULL, OFFSET(level), FF_OPT_TYPE_INT, FF_LEVEL_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "level"}, |
2881 | 675 {"unknown", NULL, 0, FF_OPT_TYPE_CONST, FF_LEVEL_UNKNOWN, INT_MIN, INT_MAX, V|A|E, "level"}, |
2877 | 676 {"lowres", NULL, 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
|
677 {"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
|
678 {"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
|
679 {"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
2927 | 680 {"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), FF_OPT_TYPE_INT, FF_CMP_DCTMAX, INT_MIN, INT_MAX, V|E, "cmp_func"}, |
3734
6903463caf49
Correct the constraints of some AVOptions. These had a default value of zero,
takis
parents:
3725
diff
changeset
|
681 {"border_mask", NULL, OFFSET(border_masking), FF_OPT_TYPE_FLOAT, DEFAULT, -FLT_MAX, FLT_MAX, V|E}, |
3916 | 682 {"mblmin", "min macroblock quantizer scale (VBR)", OFFSET(mb_lmin), FF_OPT_TYPE_INT, FF_QP2LAMBDA * 2, 1, FF_LAMBDA_MAX, V|E}, |
683 {"mblmax", "max macroblock quantizer scale (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
|
684 {"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), FF_OPT_TYPE_INT, 256, INT_MIN, INT_MAX, V|E}, |
2983 | 685 {"bidir_refine", NULL, OFFSET(bidir_refine), FF_OPT_TYPE_INT, DEFAULT, 0, 4, V|E}, |
2990
0300c2647bc3
support downscaling frames for dynamic b frame decission
michael
parents:
2989
diff
changeset
|
686 {"brd_scale", NULL, OFFSET(brd_scale), FF_OPT_TYPE_INT, DEFAULT, 0, 10, V|E}, |
2996 | 687 {"crf", NULL, OFFSET(crf), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
3704 | 688 {"cqp", NULL, OFFSET(cqp), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, V|E}, |
689 {"keyint_min", NULL, OFFSET(keyint_min), FF_OPT_TYPE_INT, 25, INT_MIN, INT_MAX, V|E}, | |
690 {"refs", NULL, OFFSET(refs), FF_OPT_TYPE_INT, 1, INT_MIN, INT_MAX, V|E}, | |
2996 | 691 {"chromaoffset", NULL, OFFSET(chromaoffset), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
692 {"bframebias", NULL, OFFSET(bframebias), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
3336 | 693 {"trellis", NULL, OFFSET(trellis), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|A|E}, |
3704 | 694 {"directpred", NULL, OFFSET(directpred), FF_OPT_TYPE_INT, 2, INT_MIN, INT_MAX, V|E}, |
2996 | 695 {"bpyramid", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_BPYRAMID, INT_MIN, INT_MAX, V|E, "flags2"}, |
696 {"wpred", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_WPRED, INT_MIN, INT_MAX, V|E, "flags2"}, | |
697 {"mixed_refs", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_MIXED_REFS, INT_MIN, INT_MAX, V|E, "flags2"}, | |
698 {"8x8dct", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_8X8DCT, INT_MIN, INT_MAX, V|E, "flags2"}, | |
699 {"fastpskip", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_FASTPSKIP, INT_MIN, INT_MAX, V|E, "flags2"}, | |
700 {"aud", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_AUD, INT_MIN, INT_MAX, V|E, "flags2"}, | |
701 {"brdo", NULL, 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_BRDO, INT_MIN, INT_MAX, V|E, "flags2"}, | |
3704 | 702 {"complexityblur", NULL, OFFSET(complexityblur), FF_OPT_TYPE_FLOAT, 20.0, FLT_MIN, FLT_MAX, V|E}, |
2996 | 703 {"deblockalpha", NULL, OFFSET(deblockalpha), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, |
704 {"deblockbeta", NULL, OFFSET(deblockbeta), FF_OPT_TYPE_INT, DEFAULT, INT_MIN, INT_MAX, V|E}, | |
705 {"partitions", NULL, OFFSET(partitions), FF_OPT_TYPE_FLAGS, DEFAULT, INT_MIN, INT_MAX, V|E, "partitions"}, | |
706 {"parti4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_I4X4, INT_MIN, INT_MAX, V|E, "partitions"}, | |
707 {"parti8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_I8X8, INT_MIN, INT_MAX, V|E, "partitions"}, | |
708 {"partp4x4", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P4X4, INT_MIN, INT_MAX, V|E, "partitions"}, | |
709 {"partp8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_P8X8, INT_MIN, INT_MAX, V|E, "partitions"}, | |
710 {"partb8x8", NULL, 0, FF_OPT_TYPE_CONST, X264_PART_B8X8, INT_MIN, INT_MAX, V|E, "partitions"}, | |
3061 | 711 {"sc_factor", NULL, OFFSET(scenechange_factor), FF_OPT_TYPE_INT, 6, 0, INT_MAX, V|E}, |
3293 | 712 {"mv0_threshold", NULL, OFFSET(mv0_threshold), FF_OPT_TYPE_INT, 256, 0, INT_MAX, V|E}, |
3305 | 713 {"ivlc", "intra vlc table", 0, FF_OPT_TYPE_CONST, CODEC_FLAG2_INTRA_VLC, INT_MIN, INT_MAX, V|E, "flags2"}, |
3335
97af1b315f59
Make B-frame reduction sensitivity by b_strategy/vb_strategy = 1
corey
parents:
3305
diff
changeset
|
714 {"b_sensitivity", NULL, 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
|
715 {"compression_level", NULL, OFFSET(compression_level), FF_OPT_TYPE_INT, FF_COMPRESSION_DEFAULT, INT_MIN, INT_MAX, V|A|E}, |
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
716 {"use_lpc", NULL, OFFSET(use_lpc), 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
|
717 {"lpc_coeff_precision", NULL, OFFSET(lpc_coeff_precision), FF_OPT_TYPE_INT, DEFAULT, 0, INT_MAX, A|E}, |
340e5d35b326
flac-lpc patch by (Justin Ruggles jruggle earthlink net)
michael
parents:
3373
diff
changeset
|
718 {"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
|
719 {"max_prediction_order", NULL, OFFSET(max_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
|
720 {"prediction_order_method", NULL, OFFSET(prediction_order_method), 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
|
721 {"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
|
722 {"max_partition_order", NULL, OFFSET(max_partition_order), FF_OPT_TYPE_INT, -1, INT_MIN, INT_MAX, A|E}, |
2862 | 723 {NULL}, |
724 }; | |
725 | |
2873 | 726 #undef A |
727 #undef V | |
3688
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
728 #undef S |
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
729 #undef E |
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
730 #undef D |
c63b9bb49532
undefines a few temporary defines which were not undefined after their usage.
gpoirier
parents:
3666
diff
changeset
|
731 #undef DEFAULT |
2873 | 732 |
2862 | 733 static AVClass av_codec_context_class = { "AVCodecContext", context_to_name, options }; |
1856 | 734 |
681 | 735 void avcodec_get_context_defaults(AVCodecContext *s){ |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
736 memset(s, 0, sizeof(AVCodecContext)); |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
737 |
1856 | 738 s->av_class= &av_codec_context_class; |
3702 | 739 |
740 av_opt_set_defaults(s); | |
741 | |
681 | 742 s->rc_eq= "tex^qComp"; |
2637 | 743 s->time_base= (AVRational){0,1}; |
903 | 744 s->get_buffer= avcodec_default_get_buffer; |
745 s->release_buffer= avcodec_default_release_buffer; | |
998 | 746 s->get_format= avcodec_default_get_format; |
1799 | 747 s->execute= avcodec_default_execute; |
1548 | 748 s->sample_aspect_ratio= (AVRational){0,1}; |
2635 | 749 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
|
750 s->sample_fmt= SAMPLE_FMT_S16; // FIXME: set to NONE |
2967 | 751 |
1585
6b224ca24033
revised palette API, courtesy of Roberto Togni (rtogni at freemail.it)
melanson
parents:
1582
diff
changeset
|
752 s->palctrl = NULL; |
1630 | 753 s->reget_buffer= avcodec_default_reget_buffer; |
681 | 754 } |
755 | |
756 /** | |
757 * allocates a AVCodecContext and set it to defaults. | |
2967 | 758 * this can be deallocated by simply calling free() |
681 | 759 */ |
703 | 760 AVCodecContext *avcodec_alloc_context(void){ |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
761 AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext)); |
2967 | 762 |
681 | 763 if(avctx==NULL) return NULL; |
2967 | 764 |
681 | 765 avcodec_get_context_defaults(avctx); |
2967 | 766 |
681 | 767 return avctx; |
768 } | |
769 | |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
770 void avcodec_get_frame_defaults(AVFrame *pic){ |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
771 memset(pic, 0, sizeof(AVFrame)); |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
772 |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
773 pic->pts= AV_NOPTS_VALUE; |
2488 | 774 pic->key_frame= 1; |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
775 } |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
776 |
903 | 777 /** |
925 | 778 * allocates a AVPFrame and set it to defaults. |
2967 | 779 * this can be deallocated by simply calling free() |
903 | 780 */ |
925 | 781 AVFrame *avcodec_alloc_frame(void){ |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
782 AVFrame *pic= av_malloc(sizeof(AVFrame)); |
2967 | 783 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
784 if(pic==NULL) return NULL; |
2967 | 785 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
786 avcodec_get_frame_defaults(pic); |
2967 | 787 |
903 | 788 return pic; |
789 } | |
790 | |
0 | 791 int avcodec_open(AVCodecContext *avctx, AVCodec *codec) |
792 { | |
2806 | 793 int ret= -1; |
2967 | 794 |
2806 | 795 entangled_thread_counter++; |
796 if(entangled_thread_counter != 1){ | |
797 av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); | |
798 goto end; | |
799 } | |
0 | 800 |
1456
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
801 if(avctx->codec) |
2806 | 802 goto end; |
1456
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
803 |
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
804 if (codec->priv_data_size > 0) { |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
805 avctx->priv_data = av_mallocz(codec->priv_data_size); |
2967 | 806 if (!avctx->priv_data) |
2806 | 807 goto end; |
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
808 } else { |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
809 avctx->priv_data = NULL; |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
810 } |
2270 | 811 |
812 if(avctx->coded_width && avctx->coded_height) | |
813 avcodec_set_dimensions(avctx, avctx->coded_width, avctx->coded_height); | |
814 else if(avctx->width && avctx->height) | |
815 avcodec_set_dimensions(avctx, avctx->width, avctx->height); | |
816 | |
2422 | 817 if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)){ |
818 av_freep(&avctx->priv_data); | |
2806 | 819 goto end; |
2422 | 820 } |
821 | |
3159 | 822 avctx->codec = codec; |
823 avctx->codec_id = codec->id; | |
824 avctx->frame_number = 0; | |
0 | 825 ret = avctx->codec->init(avctx); |
826 if (ret < 0) { | |
394 | 827 av_freep(&avctx->priv_data); |
3159 | 828 avctx->codec= NULL; |
2806 | 829 goto end; |
0 | 830 } |
2806 | 831 ret=0; |
832 end: | |
833 entangled_thread_counter--; | |
834 return ret; | |
0 | 835 } |
836 | |
2967 | 837 int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
0 | 838 const short *samples) |
839 { | |
2422 | 840 if(buf_size < FF_MIN_BUFFER_SIZE && 0){ |
841 av_log(avctx, AV_LOG_ERROR, "buffer smaller then minimum size\n"); | |
842 return -1; | |
843 } | |
2091 | 844 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || samples){ |
845 int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples); | |
846 avctx->frame_number++; | |
847 return ret; | |
848 }else | |
849 return 0; | |
0 | 850 } |
851 | |
2967 | 852 int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
925 | 853 const AVFrame *pict) |
0 | 854 { |
2422 | 855 if(buf_size < FF_MIN_BUFFER_SIZE){ |
856 av_log(avctx, AV_LOG_ERROR, "buffer smaller then minimum size\n"); | |
857 return -1; | |
858 } | |
859 if(avcodec_check_dimensions(avctx,avctx->width,avctx->height)) | |
860 return -1; | |
2091 | 861 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || pict){ |
862 int ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict); | |
863 avctx->frame_number++; | |
2764 | 864 emms_c(); //needed to avoid an emms_c() call before every return; |
2967 | 865 |
2091 | 866 return ret; |
867 }else | |
868 return 0; | |
0 | 869 } |
870 | |
2967 | 871 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
2756 | 872 const AVSubtitle *sub) |
873 { | |
874 int ret; | |
875 ret = avctx->codec->encode(avctx, buf, buf_size, (void *)sub); | |
876 avctx->frame_number++; | |
877 return ret; | |
878 } | |
879 | |
2967 | 880 /** |
881 * decode a frame. | |
1249 | 882 * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes |
883 * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end | |
884 * @param buf_size the size of the buffer in bytes | |
885 * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero | |
886 * @return -1 if error, otherwise return the number of | |
2967 | 887 * bytes used. |
1249 | 888 */ |
2967 | 889 int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, |
0 | 890 int *got_picture_ptr, |
1064 | 891 uint8_t *buf, int buf_size) |
0 | 892 { |
893 int ret; | |
2967 | 894 |
2028 | 895 *got_picture_ptr= 0; |
2422 | 896 if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)) |
897 return -1; | |
2453 | 898 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){ |
2967 | 899 ret = avctx->codec->decode(avctx, picture, got_picture_ptr, |
2453 | 900 buf, buf_size); |
814 | 901 |
2764 | 902 emms_c(); //needed to avoid an emms_c() call before every return; |
2967 | 903 |
904 if (*got_picture_ptr) | |
2453 | 905 avctx->frame_number++; |
906 }else | |
907 ret= 0; | |
908 | |
0 | 909 return ret; |
910 } | |
911 | |
912 /* decode an audio frame. return -1 if error, otherwise return the | |
913 *number of bytes used. If no frame could be decompressed, | |
914 *frame_size_ptr is zero. Otherwise, it is the decompressed frame | |
915 *size in BYTES. */ | |
2967 | 916 int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, |
0 | 917 int *frame_size_ptr, |
1064 | 918 uint8_t *buf, int buf_size) |
0 | 919 { |
920 int ret; | |
921 | |
2028 | 922 *frame_size_ptr= 0; |
2791 | 923 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || buf_size){ |
2967 | 924 ret = avctx->codec->decode(avctx, samples, frame_size_ptr, |
2791 | 925 buf, buf_size); |
926 avctx->frame_number++; | |
927 }else | |
928 ret= 0; | |
0 | 929 return ret; |
930 } | |
931 | |
2756 | 932 /* decode a subtitle message. return -1 if error, otherwise return the |
933 *number of bytes used. If no subtitle could be decompressed, | |
934 *got_sub_ptr is zero. Otherwise, the subtitle is stored in *sub. */ | |
935 int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub, | |
936 int *got_sub_ptr, | |
937 const uint8_t *buf, int buf_size) | |
938 { | |
939 int ret; | |
940 | |
941 *got_sub_ptr = 0; | |
2967 | 942 ret = avctx->codec->decode(avctx, sub, got_sub_ptr, |
2756 | 943 (uint8_t *)buf, buf_size); |
944 if (*got_sub_ptr) | |
945 avctx->frame_number++; | |
946 return ret; | |
947 } | |
948 | |
0 | 949 int avcodec_close(AVCodecContext *avctx) |
950 { | |
2806 | 951 entangled_thread_counter++; |
952 if(entangled_thread_counter != 1){ | |
953 av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); | |
954 entangled_thread_counter--; | |
955 return -1; | |
956 } | |
957 | |
0 | 958 if (avctx->codec->close) |
959 avctx->codec->close(avctx); | |
1994 | 960 avcodec_default_free_buffers(avctx); |
394 | 961 av_freep(&avctx->priv_data); |
0 | 962 avctx->codec = NULL; |
2806 | 963 entangled_thread_counter--; |
0 | 964 return 0; |
965 } | |
966 | |
967 AVCodec *avcodec_find_encoder(enum CodecID id) | |
968 { | |
969 AVCodec *p; | |
970 p = first_avcodec; | |
971 while (p) { | |
972 if (p->encode != NULL && p->id == id) | |
973 return p; | |
974 p = p->next; | |
975 } | |
976 return NULL; | |
977 } | |
978 | |
177 | 979 AVCodec *avcodec_find_encoder_by_name(const char *name) |
980 { | |
981 AVCodec *p; | |
982 p = first_avcodec; | |
983 while (p) { | |
984 if (p->encode != NULL && strcmp(name,p->name) == 0) | |
985 return p; | |
986 p = p->next; | |
987 } | |
988 return NULL; | |
989 } | |
990 | |
0 | 991 AVCodec *avcodec_find_decoder(enum CodecID id) |
992 { | |
993 AVCodec *p; | |
994 p = first_avcodec; | |
995 while (p) { | |
996 if (p->decode != NULL && p->id == id) | |
997 return p; | |
998 p = p->next; | |
999 } | |
1000 return NULL; | |
1001 } | |
1002 | |
1003 AVCodec *avcodec_find_decoder_by_name(const char *name) | |
1004 { | |
1005 AVCodec *p; | |
1006 p = first_avcodec; | |
1007 while (p) { | |
1008 if (p->decode != NULL && strcmp(name,p->name) == 0) | |
1009 return p; | |
1010 p = p->next; | |
1011 } | |
1012 return NULL; | |
1013 } | |
1014 | |
1015 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) | |
1016 { | |
1017 const char *codec_name; | |
1018 AVCodec *p; | |
1019 char buf1[32]; | |
337 | 1020 char channels_str[100]; |
92 | 1021 int bitrate; |
0 | 1022 |
1023 if (encode) | |
1024 p = avcodec_find_encoder(enc->codec_id); | |
1025 else | |
1026 p = avcodec_find_decoder(enc->codec_id); | |
1027 | |
1028 if (p) { | |
1029 codec_name = p->name; | |
1449
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1030 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
|
1031 if (enc->sub_id == 2) |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1032 codec_name = "mp2"; |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1033 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
|
1034 codec_name = "mp1"; |
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
1035 } |
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
|
1036 } 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
|
1037 /* 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
|
1038 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
|
1039 codec_name = "mpeg2ts"; |
0 | 1040 } else if (enc->codec_name[0] != '\0') { |
1041 codec_name = enc->codec_name; | |
1042 } else { | |
1043 /* output avi tags */ | |
2967 | 1044 if( isprint(enc->codec_tag&0xFF) && isprint((enc->codec_tag>>8)&0xFF) |
2856 | 1045 && isprint((enc->codec_tag>>16)&0xFF) && isprint((enc->codec_tag>>24)&0xFF)){ |
2967 | 1046 snprintf(buf1, sizeof(buf1), "%c%c%c%c / 0x%04X", |
0 | 1047 enc->codec_tag & 0xff, |
1048 (enc->codec_tag >> 8) & 0xff, | |
1049 (enc->codec_tag >> 16) & 0xff, | |
2856 | 1050 (enc->codec_tag >> 24) & 0xff, |
1051 enc->codec_tag); | |
0 | 1052 } else { |
1053 snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag); | |
1054 } | |
1055 codec_name = buf1; | |
1056 } | |
1057 | |
1058 switch(enc->codec_type) { | |
1059 case CODEC_TYPE_VIDEO: | |
1060 snprintf(buf, buf_size, | |
1061 "Video: %s%s", | |
1389 | 1062 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
|
1063 if (enc->pix_fmt != PIX_FMT_NONE) { |
55 | 1064 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
1065 ", %s", | |
988
001b7d3045e5
moved avcodec_get_chroma_sub_sample() to imgconvert.c
bellard
parents:
963
diff
changeset
|
1066 avcodec_get_pix_fmt_name(enc->pix_fmt)); |
55 | 1067 } |
0 | 1068 if (enc->width) { |
1069 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
|
1070 ", %dx%d", |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1071 enc->width, enc->height); |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1072 if(av_log_get_level() >= AV_LOG_DEBUG){ |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1073 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
|
1074 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
|
1075 ", %d/%d", |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
1076 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
|
1077 } |
0 | 1078 } |
741 | 1079 if (encode) { |
1080 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1081 ", q=%d-%d", enc->qmin, enc->qmax); | |
1082 } | |
92 | 1083 bitrate = enc->bit_rate; |
0 | 1084 break; |
1085 case CODEC_TYPE_AUDIO: | |
1086 snprintf(buf, buf_size, | |
1087 "Audio: %s", | |
1088 codec_name); | |
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1089 switch (enc->channels) { |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1090 case 1: |
337 | 1091 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
|
1092 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1093 case 2: |
337 | 1094 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
|
1095 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1096 case 6: |
337 | 1097 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
|
1098 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1099 default: |
2423 | 1100 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
|
1101 break; |
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
1102 } |
0 | 1103 if (enc->sample_rate) { |
1104 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1105 ", %d Hz, %s", | |
1106 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
|
1107 channels_str); |
0 | 1108 } |
2967 | 1109 |
92 | 1110 /* for PCM codecs, compute bitrate directly */ |
1111 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
|
1112 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
|
1113 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
|
1114 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
|
1115 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
|
1116 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
|
1117 break; |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
1118 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
|
1119 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
|
1120 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
|
1121 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
|
1122 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
|
1123 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
|
1124 break; |
92 | 1125 case CODEC_ID_PCM_S16LE: |
1126 case CODEC_ID_PCM_S16BE: | |
1127 case CODEC_ID_PCM_U16LE: | |
1128 case CODEC_ID_PCM_U16BE: | |
94 | 1129 bitrate = enc->sample_rate * enc->channels * 16; |
92 | 1130 break; |
1131 case CODEC_ID_PCM_S8: | |
1132 case CODEC_ID_PCM_U8: | |
1133 case CODEC_ID_PCM_ALAW: | |
1134 case CODEC_ID_PCM_MULAW: | |
94 | 1135 bitrate = enc->sample_rate * enc->channels * 8; |
92 | 1136 break; |
1137 default: | |
1138 bitrate = enc->bit_rate; | |
1139 break; | |
1140 } | |
0 | 1141 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
|
1142 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
|
1143 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
|
1144 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
|
1145 break; |
2756 | 1146 case CODEC_TYPE_SUBTITLE: |
1147 snprintf(buf, buf_size, "Subtitle: %s", codec_name); | |
1148 bitrate = enc->bit_rate; | |
1149 break; | |
0 | 1150 default: |
2281 | 1151 snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type); |
1152 return; | |
0 | 1153 } |
741 | 1154 if (encode) { |
1155 if (enc->flags & CODEC_FLAG_PASS1) | |
1156 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1157 ", pass 1"); | |
1158 if (enc->flags & CODEC_FLAG_PASS2) | |
1159 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
1160 ", pass 2"); | |
1161 } | |
92 | 1162 if (bitrate != 0) { |
2967 | 1163 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
92 | 1164 ", %d kb/s", bitrate / 1000); |
0 | 1165 } |
1166 } | |
1167 | |
362 | 1168 unsigned avcodec_version( void ) |
1169 { | |
1170 return LIBAVCODEC_VERSION_INT; | |
1171 } | |
55 | 1172 |
379 | 1173 unsigned avcodec_build( void ) |
1174 { | |
1175 return LIBAVCODEC_BUILD; | |
1176 } | |
1177 | |
3169 | 1178 static void init_crcs(void){ |
1179 av_crc04C11DB7= av_mallocz_static(sizeof(AVCRC) * 257); | |
3170 | 1180 av_crc8005 = av_mallocz_static(sizeof(AVCRC) * 257); |
3171 | 1181 av_crc07 = av_mallocz_static(sizeof(AVCRC) * 257); |
3169 | 1182 av_crc_init(av_crc04C11DB7, 0, 32, 0x04c11db7, sizeof(AVCRC)*257); |
3170 | 1183 av_crc_init(av_crc8005 , 0, 16, 0x8005 , sizeof(AVCRC)*257); |
3171 | 1184 av_crc_init(av_crc07 , 0, 8, 0x07 , sizeof(AVCRC)*257); |
3169 | 1185 } |
1186 | |
0 | 1187 /* must be called before any other functions */ |
1188 void avcodec_init(void) | |
1189 { | |
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1190 static int inited = 0; |
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1191 |
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1192 if (inited != 0) |
2979 | 1193 return; |
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1194 inited = 1; |
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
1195 |
1201 | 1196 dsputil_static_init(); |
3169 | 1197 init_crcs(); |
0 | 1198 } |
1199 | |
1368 | 1200 /** |
1201 * Flush buffers, should be called when seeking or when swicthing to a different stream. | |
1202 */ | |
341 | 1203 void avcodec_flush_buffers(AVCodecContext *avctx) |
1204 { | |
1368 | 1205 if(avctx->codec->flush) |
1206 avctx->codec->flush(avctx); | |
341 | 1207 } |
1208 | |
2231 | 1209 void avcodec_default_free_buffers(AVCodecContext *s){ |
1214 | 1210 int i, j; |
1211 | |
1212 if(s->internal_buffer==NULL) return; | |
2967 | 1213 |
1214 | 1214 for(i=0; i<INTERNAL_BUFFER_SIZE; i++){ |
1215 InternalBuffer *buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
1216 for(j=0; j<4; j++){ | |
1217 av_freep(&buf->base[j]); | |
1218 buf->data[j]= NULL; | |
1219 } | |
1220 } | |
1221 av_freep(&s->internal_buffer); | |
2967 | 1222 |
1214 | 1223 s->internal_buffer_count=0; |
1224 } | |
1225 | |
1264 | 1226 char av_get_pict_type_char(int pict_type){ |
1227 switch(pict_type){ | |
2967 | 1228 case I_TYPE: return 'I'; |
1229 case P_TYPE: return 'P'; | |
1230 case B_TYPE: return 'B'; | |
1231 case S_TYPE: return 'S'; | |
1232 case SI_TYPE:return 'i'; | |
1233 case SP_TYPE:return 'p'; | |
1264 | 1234 default: return '?'; |
1235 } | |
1236 } | |
1237 | |
3433 | 1238 int av_get_bits_per_sample(enum CodecID codec_id){ |
1239 switch(codec_id){ | |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
1240 case CODEC_ID_ADPCM_SBPRO_2: |
3438 | 1241 return 2; |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
1242 case CODEC_ID_ADPCM_SBPRO_3: |
3438 | 1243 return 3; |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
1244 case CODEC_ID_ADPCM_SBPRO_4: |
3438 | 1245 case CODEC_ID_ADPCM_CT: |
1246 return 4; | |
3433 | 1247 case CODEC_ID_PCM_ALAW: |
1248 case CODEC_ID_PCM_MULAW: | |
1249 case CODEC_ID_PCM_S8: | |
1250 case CODEC_ID_PCM_U8: | |
1251 return 8; | |
1252 case CODEC_ID_PCM_S16BE: | |
1253 case CODEC_ID_PCM_S16LE: | |
1254 case CODEC_ID_PCM_U16BE: | |
1255 case CODEC_ID_PCM_U16LE: | |
1256 return 16; | |
1257 case CODEC_ID_PCM_S24DAUD: | |
1258 case CODEC_ID_PCM_S24BE: | |
1259 case CODEC_ID_PCM_S24LE: | |
1260 case CODEC_ID_PCM_U24BE: | |
1261 case CODEC_ID_PCM_U24LE: | |
1262 return 24; | |
1263 case CODEC_ID_PCM_S32BE: | |
1264 case CODEC_ID_PCM_S32LE: | |
1265 case CODEC_ID_PCM_U32BE: | |
1266 case CODEC_ID_PCM_U32LE: | |
1267 return 32; | |
1268 default: | |
1269 return 0; | |
1270 } | |
1271 } | |
1272 | |
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
|
1273 #if !defined(HAVE_THREADS) |
2013
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1274 int avcodec_thread_init(AVCodecContext *s, int thread_count){ |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1275 return -1; |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1276 } |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1277 #endif |
2676 | 1278 |
1279 unsigned int av_xiphlacing(unsigned char *s, unsigned int v) | |
1280 { | |
1281 unsigned int n = 0; | |
1282 | |
1283 while(v >= 0xff) { | |
1284 *s++ = 0xff; | |
1285 v -= 0xff; | |
1286 n++; | |
1287 } | |
1288 *s = v; | |
1289 n++; | |
1290 return n; | |
1291 } | |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1292 |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1293 /* 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
|
1294 * 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
|
1295 * *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
|
1296 * 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
|
1297 * and opened file name in **filename. */ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1298 int av_tempfile(char *prefix, char **filename) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1299 int fd=-1; |
3461
7581658de3d1
CONFIG_WIN32 implies MinGW and Cygwin and possibly more, so use just
diego
parents:
3442
diff
changeset
|
1300 #ifdef __MINGW32__ |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1301 *filename = tempnam(".", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1302 #else |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1303 size_t len = strlen(prefix) + 12; /* room for "/tmp/" and "XXXXXX\0" */ |
3372 | 1304 *filename = av_malloc(len); |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1305 #endif |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1306 /* -----common section-----*/ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1307 if (*filename == NULL) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1308 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
|
1309 return -1; |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1310 } |
3461
7581658de3d1
CONFIG_WIN32 implies MinGW and Cygwin and possibly more, so use just
diego
parents:
3442
diff
changeset
|
1311 #ifdef __MINGW32__ |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1312 fd = open(*filename, _O_RDWR | _O_BINARY | _O_CREAT, 0444); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1313 #else |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1314 snprintf(*filename, len, "/tmp/%sXXXXXX", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1315 fd = mkstemp(*filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1316 if (fd < 0) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1317 snprintf(*filename, len, "./%sXXXXXX", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1318 fd = mkstemp(*filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1319 } |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1320 #endif |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1321 /* -----common section-----*/ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1322 if (fd < 0) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1323 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
|
1324 return -1; |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1325 } |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1326 return fd; /* success */ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1327 } |