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