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