Mercurial > libavcodec.hg
annotate utils.c @ 9830:bd0879f752e6 libavcodec
Express the H.264 parser dependency on the golomb code in configure instead of
in the Makefile as it is done for all other parts that depend on golomb.
author | diego |
---|---|
date | Tue, 09 Jun 2009 20:29:52 +0000 |
parents | f114b5f2ac47 |
children | 7ad7d4094d1f |
rev | line source |
---|---|
0 | 1 /* |
2 * utils for libavcodec | |
8629
04423b2f6e0b
cosmetics: Remove pointless period after copyright statement non-sentences.
diego
parents:
8611
diff
changeset
|
3 * Copyright (c) 2001 Fabrice Bellard |
1739
07a484280a82
copyright year update of the files i touched and remembered, things look annoyingly unmaintained otherwise
michael
parents:
1730
diff
changeset
|
4 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> |
0 | 5 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
6 * This file is part of FFmpeg. |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
7 * |
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
8 * FFmpeg is free software; you can redistribute it and/or |
429 | 9 * modify it under the terms of the GNU Lesser General Public |
10 * License as published by the Free Software Foundation; either | |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
11 * version 2.1 of the License, or (at your option) any later version. |
0 | 12 * |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
13 * FFmpeg is distributed in the hope that it will be useful, |
0 | 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
429 | 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
16 * Lesser General Public License for more details. | |
0 | 17 * |
429 | 18 * You should have received a copy of the GNU Lesser General Public |
3947
c8c591fe26f8
Change license headers to say 'FFmpeg' instead of 'this program/this library'
diego
parents:
3916
diff
changeset
|
19 * License along with FFmpeg; if not, write to the Free Software |
3036
0b546eab515d
Update licensing information: The FSF changed postal address.
diego
parents:
3031
diff
changeset
|
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
0 | 21 */ |
2967 | 22 |
1106 | 23 /** |
8718
e9d9d946f213
Use full internal pathname in doxygen @file directives.
diego
parents:
8629
diff
changeset
|
24 * @file libavcodec/utils.c |
1106 | 25 * utils. |
26 */ | |
2967 | 27 |
7576
e50e9def7428
ensure we get explicit definition of various _XOPEN_SOURCE functions we use
aurel
parents:
7530
diff
changeset
|
28 /* needed for mkstemp() */ |
7936 | 29 #define _XOPEN_SOURCE 600 |
7576
e50e9def7428
ensure we get explicit definition of various _XOPEN_SOURCE functions we use
aurel
parents:
7530
diff
changeset
|
30 |
8110 | 31 #include "libavutil/avstring.h" |
6763 | 32 #include "libavutil/integer.h" |
33 #include "libavutil/crc.h" | |
394 | 34 #include "avcodec.h" |
0 | 35 #include "dsputil.h" |
2880 | 36 #include "opt.h" |
6360 | 37 #include "imgconvert.h" |
7454
bb5e8cae1d71
Write sample format description within avcodec_string()
pross
parents:
7409
diff
changeset
|
38 #include "audioconvert.h" |
8603
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
39 #include "internal.h" |
7576
e50e9def7428
ensure we get explicit definition of various _XOPEN_SOURCE functions we use
aurel
parents:
7530
diff
changeset
|
40 #include <stdlib.h> |
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
41 #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
|
42 #include <limits.h> |
2862 | 43 #include <float.h> |
8590 | 44 #if !HAVE_MKSTEMP |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
45 #include <fcntl.h> |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
46 #endif |
0 | 47 |
2652
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
48 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
|
49 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
|
50 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
|
51 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
|
52 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
|
53 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
|
54 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
|
55 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
|
56 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
|
57 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
|
58 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
|
59 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
|
60 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
|
61 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
|
62 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
|
63 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
|
64 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
|
65 }; |
659b92488061
ff_reverse to utils.c patch by (Roine Gustafsson )roine users.sourceforge net)
michael
parents:
2637
diff
changeset
|
66 |
2806 | 67 static int volatile entangled_thread_counter=0; |
9742 | 68 int (*ff_lockmgr_cb)(void **mutex, enum AVLockOp op); |
69 static void *codec_mutex; | |
2806 | 70 |
1057 | 71 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
|
72 { |
2967 | 73 if(min_size < *size) |
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
74 return ptr; |
2967 | 75 |
2422 | 76 *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
|
77 |
6532
8aafb712389e
Fix possible heap overflow caused by av_fast_realloc()
michael
parents:
6488
diff
changeset
|
78 ptr= av_realloc(ptr, *size); |
8aafb712389e
Fix possible heap overflow caused by av_fast_realloc()
michael
parents:
6488
diff
changeset
|
79 if(!ptr) //we could set this to the unmodified min_size but this is safer if the user lost the ptr and uses NULL now |
8aafb712389e
Fix possible heap overflow caused by av_fast_realloc()
michael
parents:
6488
diff
changeset
|
80 *size= 0; |
8aafb712389e
Fix possible heap overflow caused by av_fast_realloc()
michael
parents:
6488
diff
changeset
|
81 |
8aafb712389e
Fix possible heap overflow caused by av_fast_realloc()
michael
parents:
6488
diff
changeset
|
82 return ptr; |
1031
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 |
9415
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
85 void av_fast_malloc(void *ptr, unsigned int *size, unsigned int min_size) |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
86 { |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
87 void **p = ptr; |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
88 if (min_size < *size) |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
89 return; |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
90 *size= FFMAX(17*min_size/16 + 32, min_size); |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
91 av_free(*p); |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
92 *p = av_malloc(*size); |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
93 if (!*p) *size = 0; |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
94 } |
141badec76fc
Add a av_fast_malloc function and replace several uses of av_fast_realloc,
reimar
parents:
9379
diff
changeset
|
95 |
0 | 96 /* encoder management */ |
7992 | 97 static AVCodec *first_avcodec = NULL; |
0 | 98 |
6011 | 99 AVCodec *av_codec_next(AVCodec *c){ |
100 if(c) return c->next; | |
101 else return first_avcodec; | |
102 } | |
103 | |
8750
2528b6a2b5d3
Rename register_avcodec() as avcodec_register() and deprecate the old
stefano
parents:
8748
diff
changeset
|
104 void avcodec_register(AVCodec *codec) |
0 | 105 { |
106 AVCodec **p; | |
8325 | 107 avcodec_init(); |
0 | 108 p = &first_avcodec; |
109 while (*p != NULL) p = &(*p)->next; | |
8324
343f0476fd1d
Use a more explicit "codec" rather than "format" as the parameter of
stefano
parents:
8281
diff
changeset
|
110 *p = codec; |
343f0476fd1d
Use a more explicit "codec" rather than "format" as the parameter of
stefano
parents:
8281
diff
changeset
|
111 codec->next = NULL; |
0 | 112 } |
113 | |
8752
7fd1422a8703
Drop the deprecated function register_avcodec() at the next major
stefano
parents:
8750
diff
changeset
|
114 #if LIBAVCODEC_VERSION_MAJOR < 53 |
8750
2528b6a2b5d3
Rename register_avcodec() as avcodec_register() and deprecate the old
stefano
parents:
8748
diff
changeset
|
115 void register_avcodec(AVCodec *codec) |
2528b6a2b5d3
Rename register_avcodec() as avcodec_register() and deprecate the old
stefano
parents:
8748
diff
changeset
|
116 { |
2528b6a2b5d3
Rename register_avcodec() as avcodec_register() and deprecate the old
stefano
parents:
8748
diff
changeset
|
117 avcodec_register(codec); |
2528b6a2b5d3
Rename register_avcodec() as avcodec_register() and deprecate the old
stefano
parents:
8748
diff
changeset
|
118 } |
8752
7fd1422a8703
Drop the deprecated function register_avcodec() at the next major
stefano
parents:
8750
diff
changeset
|
119 #endif |
8750
2528b6a2b5d3
Rename register_avcodec() as avcodec_register() and deprecate the old
stefano
parents:
8748
diff
changeset
|
120 |
2270 | 121 void avcodec_set_dimensions(AVCodecContext *s, int width, int height){ |
122 s->coded_width = width; | |
123 s->coded_height= height; | |
124 s->width = -((-width )>>s->lowres); | |
125 s->height= -((-height)>>s->lowres); | |
126 } | |
127 | |
1214 | 128 typedef struct InternalBuffer{ |
903 | 129 int last_pic_num; |
1214 | 130 uint8_t *base[4]; |
903 | 131 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
|
132 int linesize[4]; |
5522
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
133 int width, height; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
134 enum PixelFormat pix_fmt; |
1214 | 135 }InternalBuffer; |
136 | |
137 #define INTERNAL_BUFFER_SIZE 32 | |
903 | 138 |
1538 | 139 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){ |
2967 | 140 int w_align= 1; |
141 int h_align= 1; | |
142 | |
1538 | 143 switch(s->pix_fmt){ |
144 case PIX_FMT_YUV420P: | |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4453
diff
changeset
|
145 case PIX_FMT_YUYV422: |
2137
ef47c0b1ff28
UYVY support patch by ("Todd.Kirby" <doubleshot at pacbell dot net>)
michael
parents:
2125
diff
changeset
|
146 case PIX_FMT_UYVY422: |
1538 | 147 case PIX_FMT_YUV422P: |
148 case PIX_FMT_YUV444P: | |
149 case PIX_FMT_GRAY8: | |
4066 | 150 case PIX_FMT_GRAY16BE: |
151 case PIX_FMT_GRAY16LE: | |
1538 | 152 case PIX_FMT_YUVJ420P: |
153 case PIX_FMT_YUVJ422P: | |
154 case PIX_FMT_YUVJ444P: | |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5576
diff
changeset
|
155 case PIX_FMT_YUVA420P: |
1538 | 156 w_align= 16; //FIXME check for non mpeg style codecs and use less alignment |
157 h_align= 16; | |
9379
d31c367da415
Make sure mpeg2 has its height rounded up to 32 as that is needed
michael
parents:
9355
diff
changeset
|
158 if(s->codec_id == CODEC_ID_MPEG2VIDEO) |
d31c367da415
Make sure mpeg2 has its height rounded up to 32 as that is needed
michael
parents:
9355
diff
changeset
|
159 h_align= 32; // interlaced is rounded up to 2 MBs |
1538 | 160 break; |
161 case PIX_FMT_YUV411P: | |
4494
ce643a22f049
Replace deprecated PIX_FMT names by the newer variants.
diego
parents:
4453
diff
changeset
|
162 case PIX_FMT_UYYVYY411: |
1538 | 163 w_align=32; |
164 h_align=8; | |
165 break; | |
166 case PIX_FMT_YUV410P: | |
167 if(s->codec_id == CODEC_ID_SVQ1){ | |
168 w_align=64; | |
169 h_align=64; | |
170 } | |
2104 | 171 case PIX_FMT_RGB555: |
172 if(s->codec_id == CODEC_ID_RPZA){ | |
173 w_align=4; | |
174 h_align=4; | |
175 } | |
176 case PIX_FMT_PAL8: | |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
177 case PIX_FMT_BGR8: |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
178 case PIX_FMT_RGB8: |
2104 | 179 if(s->codec_id == CODEC_ID_SMC){ |
180 w_align=4; | |
181 h_align=4; | |
182 } | |
1538 | 183 break; |
2418
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
184 case PIX_FMT_BGR24: |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
185 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
|
186 w_align=4; |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
187 h_align=4; |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
188 } |
82af834636c2
Check pointers before writing to memory, fix possible integer overflows
rtognimp
parents:
2398
diff
changeset
|
189 break; |
1538 | 190 default: |
191 w_align= 1; | |
192 h_align= 1; | |
193 break; | |
194 } | |
195 | |
9686
bc32976d6d9d
Move ALIGN macro to libavutil/common.h and use it in various places
conrad
parents:
9545
diff
changeset
|
196 *width = FFALIGN(*width , w_align); |
bc32976d6d9d
Move ALIGN macro to libavutil/common.h and use it in various places
conrad
parents:
9545
diff
changeset
|
197 *height= FFALIGN(*height, h_align); |
7942
64f35acc2407
Allocate 1 line more in the chroma plane for H.264, this avoids some
michael
parents:
7941
diff
changeset
|
198 if(s->codec_id == CODEC_ID_H264) |
64f35acc2407
Allocate 1 line more in the chroma plane for H.264, this avoids some
michael
parents:
7941
diff
changeset
|
199 *height+=2; // some of the optimized chroma MC reads one line too much |
1538 | 200 } |
201 | |
2422 | 202 int avcodec_check_dimensions(void *av_log_ctx, unsigned int w, unsigned int h){ |
9536
f522c8e05a29
Update safety check as the maximum pixel size is no longer 4.
michael
parents:
9415
diff
changeset
|
203 if((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8) |
2422 | 204 return 0; |
2967 | 205 |
2422 | 206 av_log(av_log_ctx, AV_LOG_ERROR, "picture size invalid (%ux%u)\n", w, h); |
207 return -1; | |
208 } | |
209 | |
925 | 210 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ |
903 | 211 int i; |
1538 | 212 int w= s->width; |
213 int h= s->height; | |
1214 | 214 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
|
215 int *picture_number; |
2422 | 216 |
4453
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
217 if(pic->data[0]!=NULL) { |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
218 av_log(s, AV_LOG_ERROR, "pic->data[0]!=NULL in avcodec_default_get_buffer\n"); |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
219 return -1; |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
220 } |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
221 if(s->internal_buffer_count >= INTERNAL_BUFFER_SIZE) { |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
222 av_log(s, AV_LOG_ERROR, "internal_buffer_count overflow (missing release_buffer?)\n"); |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
223 return -1; |
22827cd6b228
Activate guards in avcodec_default_get_buffer. Patch by Michel Bardiaux,
takis
parents:
4351
diff
changeset
|
224 } |
903 | 225 |
2422 | 226 if(avcodec_check_dimensions(s,w,h)) |
227 return -1; | |
228 | |
1214 | 229 if(s->internal_buffer==NULL){ |
7307
52764a3665d8
Make the ugly hack which uses an unused entry in the internal buffer
michael
parents:
7293
diff
changeset
|
230 s->internal_buffer= av_mallocz((INTERNAL_BUFFER_SIZE+1)*sizeof(InternalBuffer)); |
1214 | 231 } |
232 #if 0 | |
233 s->internal_buffer= av_fast_realloc( | |
2967 | 234 s->internal_buffer, |
235 &s->internal_buffer_size, | |
1214 | 236 sizeof(InternalBuffer)*FFMAX(99, s->internal_buffer_count+1)/*FIXME*/ |
237 ); | |
238 #endif | |
2967 | 239 |
1214 | 240 buf= &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; |
7307
52764a3665d8
Make the ugly hack which uses an unused entry in the internal buffer
michael
parents:
7293
diff
changeset
|
241 picture_number= &(((InternalBuffer*)s->internal_buffer)[INTERNAL_BUFFER_SIZE]).last_pic_num; //FIXME ugly hack |
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
|
242 (*picture_number)++; |
2967 | 243 |
5522
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
244 if(buf->base[0] && (buf->width != w || buf->height != h || buf->pix_fmt != s->pix_fmt)){ |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
245 for(i=0; i<4; i++){ |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
246 av_freep(&buf->base[i]); |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
247 buf->data[i]= NULL; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
248 } |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
249 } |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
250 |
1214 | 251 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
|
252 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
|
253 buf->last_pic_num= *picture_number; |
903 | 254 }else{ |
1538 | 255 int h_chroma_shift, v_chroma_shift; |
6360 | 256 int size[4] = {0}; |
257 int tmpsize; | |
9192
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
258 int unaligned; |
2950 | 259 AVPicture picture; |
7941
8a3f24796fa9
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
michael
parents:
7936
diff
changeset
|
260 int stride_align[4]; |
2950 | 261 |
903 | 262 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); |
1538 | 263 |
264 avcodec_align_dimensions(s, &w, &h); | |
2967 | 265 |
903 | 266 if(!(s->flags&CODEC_FLAG_EMU_EDGE)){ |
267 w+= EDGE_WIDTH*2; | |
268 h+= EDGE_WIDTH*2; | |
269 } | |
4986 | 270 |
9192
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
271 do { |
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
272 // NOTE: do not align linesizes individually, this breaks e.g. assumptions |
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
273 // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 |
9193 | 274 ff_fill_linesize(&picture, s->pix_fmt, w); |
9192
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
275 // increase alignment of w for next try (rhs gives the lowest bit set in w) |
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
276 w += w & ~(w-1); |
6360 | 277 |
9192
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
278 unaligned = 0; |
9193 | 279 for (i=0; i<4; i++){ |
7941
8a3f24796fa9
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
michael
parents:
7936
diff
changeset
|
280 //STRIDE_ALIGN is 8 for SSE* but this does not work for SVQ1 chroma planes |
8a3f24796fa9
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
michael
parents:
7936
diff
changeset
|
281 //we could change STRIDE_ALIGN to 16 for x86/sse but it would increase the |
8a3f24796fa9
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
michael
parents:
7936
diff
changeset
|
282 //picture size unneccessarily in some cases. The solution here is not |
8a3f24796fa9
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
michael
parents:
7936
diff
changeset
|
283 //pretty and better ideas are welcome! |
8590 | 284 #if HAVE_MMX |
9193 | 285 if(s->codec_id == CODEC_ID_SVQ1) |
286 stride_align[i]= 16; | |
287 else | |
7941
8a3f24796fa9
Replace second (and wrong) call to avcodec_align_dimensions() by adjusting
michael
parents:
7936
diff
changeset
|
288 #endif |
9193 | 289 stride_align[i] = STRIDE_ALIGN; |
9192
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
290 unaligned |= picture.linesize[i] % stride_align[i]; |
9193 | 291 } |
9192
6faca73d75cc
Change linesize alignment method to ensure that linesize[0] == 2*linesize[1]
reimar
parents:
9032
diff
changeset
|
292 } while (unaligned); |
6360 | 293 |
294 tmpsize = ff_fill_pointer(&picture, NULL, s->pix_fmt, h); | |
9014
1de11a984fc6
Check return value of ff_fill_pointer in avcodec_default_get_buffer,
reimar
parents:
9011
diff
changeset
|
295 if (tmpsize < 0) |
1de11a984fc6
Check return value of ff_fill_pointer in avcodec_default_get_buffer,
reimar
parents:
9011
diff
changeset
|
296 return -1; |
6360 | 297 |
298 for (i=0; i<3 && picture.data[i+1]; i++) | |
299 size[i] = picture.data[i+1] - picture.data[i]; | |
6390 | 300 size[i] = tmpsize - (picture.data[i] - picture.data[0]); |
2950 | 301 |
1214 | 302 buf->last_pic_num= -256*256*256*64; |
2950 | 303 memset(buf->base, 0, sizeof(buf->base)); |
304 memset(buf->data, 0, sizeof(buf->data)); | |
903 | 305 |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5576
diff
changeset
|
306 for(i=0; i<4 && size[i]; i++){ |
1165 | 307 const int h_shift= i==0 ? 0 : h_chroma_shift; |
308 const int v_shift= i==0 ? 0 : v_chroma_shift; | |
903 | 309 |
2950 | 310 buf->linesize[i]= picture.linesize[i]; |
903 | 311 |
2950 | 312 buf->base[i]= av_malloc(size[i]+16); //FIXME 16 |
1214 | 313 if(buf->base[i]==NULL) return -1; |
2950 | 314 memset(buf->base[i], 128, size[i]); |
315 | |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
316 // no edge if EDEG EMU or not planar YUV |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
317 if((s->flags&CODEC_FLAG_EMU_EDGE) || !size[2]) |
1214 | 318 buf->data[i] = buf->base[i]; |
903 | 319 else |
9686
bc32976d6d9d
Move ALIGN macro to libavutil/common.h and use it in various places
conrad
parents:
9545
diff
changeset
|
320 buf->data[i] = buf->base[i] + FFALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), stride_align[i]); |
903 | 321 } |
8748
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
322 if(size[1] && !size[2]) |
eaa08ce79f9a
Ensure that the palette is set in data[1] for all 8bit formats.
michael
parents:
8718
diff
changeset
|
323 ff_set_systematic_pal((uint32_t*)buf->data[1], s->pix_fmt); |
5522
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
324 buf->width = s->width; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
325 buf->height = s->height; |
acaaff7b6fb8
ensure that default_get_buffer() doesnt reuse images if the dimension or
michael
parents:
5383
diff
changeset
|
326 buf->pix_fmt= s->pix_fmt; |
903 | 327 pic->age= 256*256*256*64; |
328 } | |
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
|
329 pic->type= FF_BUFFER_TYPE_INTERNAL; |
903 | 330 |
1214 | 331 for(i=0; i<4; i++){ |
332 pic->base[i]= buf->base[i]; | |
333 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
|
334 pic->linesize[i]= buf->linesize[i]; |
1214 | 335 } |
336 s->internal_buffer_count++; | |
337 | |
7631
b5b4bf0944b8
Provide a simpler way for the user to reorder her timestamps.
michael
parents:
7613
diff
changeset
|
338 pic->reordered_opaque= s->reordered_opaque; |
b5b4bf0944b8
Provide a simpler way for the user to reorder her timestamps.
michael
parents:
7613
diff
changeset
|
339 |
7406
7b2819083061
Add a new -debug option for tracing calls to the default get/release_buffer functions.
astrange
parents:
7331
diff
changeset
|
340 if(s->debug&FF_DEBUG_BUFFERS) |
7b2819083061
Add a new -debug option for tracing calls to the default get/release_buffer functions.
astrange
parents:
7331
diff
changeset
|
341 av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p, %d buffers used\n", pic, s->internal_buffer_count); |
7b2819083061
Add a new -debug option for tracing calls to the default get/release_buffer functions.
astrange
parents:
7331
diff
changeset
|
342 |
903 | 343 return 0; |
344 } | |
345 | |
925 | 346 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ |
903 | 347 int i; |
4558 | 348 InternalBuffer *buf, *last; |
1214 | 349 |
924 | 350 assert(pic->type==FF_BUFFER_TYPE_INTERNAL); |
1396 | 351 assert(s->internal_buffer_count); |
1214 | 352 |
1455 | 353 buf = NULL; /* avoids warning */ |
1214 | 354 for(i=0; i<s->internal_buffer_count; i++){ //just 3-5 checks so is not worth to optimize |
355 buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
356 if(buf->data[0] == pic->data[0]) | |
357 break; | |
358 } | |
359 assert(i < s->internal_buffer_count); | |
360 s->internal_buffer_count--; | |
361 last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; | |
362 | |
4558 | 363 FFSWAP(InternalBuffer, *buf, *last); |
1214 | 364 |
5706
3e8764a25c53
add support for yuva420p colorspace (yuv420p + alpha)
aurel
parents:
5576
diff
changeset
|
365 for(i=0; i<4; i++){ |
903 | 366 pic->data[i]=NULL; |
1214 | 367 // pic->base[i]=NULL; |
368 } | |
903 | 369 //printf("R%X\n", pic->opaque); |
7406
7b2819083061
Add a new -debug option for tracing calls to the default get/release_buffer functions.
astrange
parents:
7331
diff
changeset
|
370 |
7b2819083061
Add a new -debug option for tracing calls to the default get/release_buffer functions.
astrange
parents:
7331
diff
changeset
|
371 if(s->debug&FF_DEBUG_BUFFERS) |
7b2819083061
Add a new -debug option for tracing calls to the default get/release_buffer functions.
astrange
parents:
7331
diff
changeset
|
372 av_log(s, AV_LOG_DEBUG, "default_release_buffer called on pic %p, %d buffers used\n", pic, s->internal_buffer_count); |
903 | 373 } |
374 | |
1630 | 375 int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic){ |
376 AVFrame temp_pic; | |
377 int i; | |
378 | |
379 /* If no picture return a new buffer */ | |
380 if(pic->data[0] == NULL) { | |
381 /* We will copy from buffer, so must be readable */ | |
382 pic->buffer_hints |= FF_BUFFER_HINTS_READABLE; | |
383 return s->get_buffer(s, pic); | |
384 } | |
385 | |
386 /* If internal buffer type return the same buffer */ | |
387 if(pic->type == FF_BUFFER_TYPE_INTERNAL) | |
388 return 0; | |
389 | |
390 /* | |
391 * Not internal type and reget_buffer not overridden, emulate cr buffer | |
392 */ | |
393 temp_pic = *pic; | |
394 for(i = 0; i < 4; i++) | |
395 pic->data[i] = pic->base[i] = NULL; | |
396 pic->opaque = NULL; | |
397 /* Allocate new frame */ | |
398 if (s->get_buffer(s, pic)) | |
399 return -1; | |
400 /* Copy image data from old buffer to new buffer */ | |
4624
6a900f539e2c
Add the prefix "av_" to img_crop(), img_copy() and img_pad(), and rename "img"
takis
parents:
4621
diff
changeset
|
401 av_picture_copy((AVPicture*)pic, (AVPicture*)&temp_pic, s->pix_fmt, s->width, |
1630 | 402 s->height); |
403 s->release_buffer(s, &temp_pic); // Release old frame | |
404 return 0; | |
405 } | |
406 | |
8129
a9734fe0811e
Making it easier to send arbitrary structures as work orders to MT workers
romansh
parents:
8110
diff
changeset
|
407 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size){ |
1799 | 408 int i; |
409 | |
410 for(i=0; i<count; i++){ | |
8129
a9734fe0811e
Making it easier to send arbitrary structures as work orders to MT workers
romansh
parents:
8110
diff
changeset
|
411 int r= func(c, (char*)arg + i*size); |
1799 | 412 if(ret) ret[i]= r; |
413 } | |
414 return 0; | |
415 } | |
416 | |
9011
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
8772
diff
changeset
|
417 enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat *fmt){ |
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
8772
diff
changeset
|
418 while (*fmt != PIX_FMT_NONE && ff_is_hwaccel_pix_fmt(*fmt)) |
90c99bda19f5
Approved hunks for VAAPI / our new shiny hwaccel API
michael
parents:
8772
diff
changeset
|
419 ++fmt; |
998 | 420 return fmt[0]; |
421 } | |
422 | |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
423 void avcodec_get_frame_defaults(AVFrame *pic){ |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
424 memset(pic, 0, sizeof(AVFrame)); |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
425 |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
426 pic->pts= AV_NOPTS_VALUE; |
2488 | 427 pic->key_frame= 1; |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
428 } |
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
429 |
925 | 430 AVFrame *avcodec_alloc_frame(void){ |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
431 AVFrame *pic= av_malloc(sizeof(AVFrame)); |
2967 | 432 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
433 if(pic==NULL) return NULL; |
2967 | 434 |
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
435 avcodec_get_frame_defaults(pic); |
2967 | 436 |
903 | 437 return pic; |
438 } | |
439 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
440 int attribute_align_arg avcodec_open(AVCodecContext *avctx, AVCodec *codec) |
0 | 441 { |
2806 | 442 int ret= -1; |
2967 | 443 |
9742 | 444 /* If there is a user-supplied mutex locking routine, call it. */ |
445 if (ff_lockmgr_cb) { | |
446 if ((*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN)) | |
447 return -1; | |
448 } | |
449 | |
2806 | 450 entangled_thread_counter++; |
451 if(entangled_thread_counter != 1){ | |
452 av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); | |
453 goto end; | |
454 } | |
0 | 455 |
6069
3670c9e7ff4d
Check for avcodec_open codec parameter == NULL and return error in that case
reimar
parents:
6047
diff
changeset
|
456 if(avctx->codec || !codec) |
2806 | 457 goto end; |
1456
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
458 |
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
459 if (codec->priv_data_size > 0) { |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
460 avctx->priv_data = av_mallocz(codec->priv_data_size); |
5382
7f96f6e16f81
Return AVERROR(ENOMEM) on memory allocation failure of avcodec_open.
takis
parents:
5356
diff
changeset
|
461 if (!avctx->priv_data) { |
7f96f6e16f81
Return AVERROR(ENOMEM) on memory allocation failure of avcodec_open.
takis
parents:
5356
diff
changeset
|
462 ret = AVERROR(ENOMEM); |
2806 | 463 goto end; |
5382
7f96f6e16f81
Return AVERROR(ENOMEM) on memory allocation failure of avcodec_open.
takis
parents:
5356
diff
changeset
|
464 } |
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
465 } else { |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
466 avctx->priv_data = NULL; |
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
467 } |
2270 | 468 |
469 if(avctx->coded_width && avctx->coded_height) | |
470 avcodec_set_dimensions(avctx, avctx->coded_width, avctx->coded_height); | |
471 else if(avctx->width && avctx->height) | |
472 avcodec_set_dimensions(avctx, avctx->width, avctx->height); | |
473 | |
2422 | 474 if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)){ |
475 av_freep(&avctx->priv_data); | |
5383
8a28860d54ba
Return AVERROR(EINVAL) when invalid width and/or height are specified to
takis
parents:
5382
diff
changeset
|
476 ret = AVERROR(EINVAL); |
2806 | 477 goto end; |
2422 | 478 } |
479 | |
3159 | 480 avctx->codec = codec; |
481 avctx->codec_id = codec->id; | |
482 avctx->frame_number = 0; | |
4762 | 483 if(avctx->codec->init){ |
4763 | 484 ret = avctx->codec->init(avctx); |
485 if (ret < 0) { | |
486 av_freep(&avctx->priv_data); | |
487 avctx->codec= NULL; | |
488 goto end; | |
489 } | |
4762 | 490 } |
2806 | 491 ret=0; |
492 end: | |
493 entangled_thread_counter--; | |
9742 | 494 |
495 /* Release any user-supplied mutex. */ | |
496 if (ff_lockmgr_cb) { | |
497 (*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE); | |
498 } | |
2806 | 499 return ret; |
0 | 500 } |
501 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
502 int attribute_align_arg avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
0 | 503 const short *samples) |
504 { | |
2422 | 505 if(buf_size < FF_MIN_BUFFER_SIZE && 0){ |
4526 | 506 av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n"); |
2422 | 507 return -1; |
508 } | |
2091 | 509 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || samples){ |
8756
153d7e5d5a5b
remove useless cast, it does not remove warning, encode prototype must be changed
bcoudurier
parents:
8752
diff
changeset
|
510 int ret = avctx->codec->encode(avctx, buf, buf_size, samples); |
2091 | 511 avctx->frame_number++; |
512 return ret; | |
513 }else | |
514 return 0; | |
0 | 515 } |
516 | |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
517 int attribute_align_arg avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
925 | 518 const AVFrame *pict) |
0 | 519 { |
2422 | 520 if(buf_size < FF_MIN_BUFFER_SIZE){ |
4526 | 521 av_log(avctx, AV_LOG_ERROR, "buffer smaller than minimum size\n"); |
2422 | 522 return -1; |
523 } | |
524 if(avcodec_check_dimensions(avctx,avctx->width,avctx->height)) | |
525 return -1; | |
2091 | 526 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || pict){ |
8756
153d7e5d5a5b
remove useless cast, it does not remove warning, encode prototype must be changed
bcoudurier
parents:
8752
diff
changeset
|
527 int ret = avctx->codec->encode(avctx, buf, buf_size, pict); |
2091 | 528 avctx->frame_number++; |
2764 | 529 emms_c(); //needed to avoid an emms_c() call before every return; |
2967 | 530 |
2091 | 531 return ret; |
532 }else | |
533 return 0; | |
0 | 534 } |
535 | |
2967 | 536 int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
2756 | 537 const AVSubtitle *sub) |
538 { | |
539 int ret; | |
8771
f7442819cacf
Check that start_display_time is 0 in avcodec_encode_subtitle()
superdump
parents:
8757
diff
changeset
|
540 if(sub->start_display_time) { |
f7442819cacf
Check that start_display_time is 0 in avcodec_encode_subtitle()
superdump
parents:
8757
diff
changeset
|
541 av_log(avctx, AV_LOG_ERROR, "start_display_time must be 0.\n"); |
f7442819cacf
Check that start_display_time is 0 in avcodec_encode_subtitle()
superdump
parents:
8757
diff
changeset
|
542 return -1; |
f7442819cacf
Check that start_display_time is 0 in avcodec_encode_subtitle()
superdump
parents:
8757
diff
changeset
|
543 } |
8772
5a9485bd4421
Check that there are subtitle rects to encode in avcodec_encode_subtitle()
superdump
parents:
8771
diff
changeset
|
544 if(sub->num_rects == 0 || !sub->rects) |
5a9485bd4421
Check that there are subtitle rects to encode in avcodec_encode_subtitle()
superdump
parents:
8771
diff
changeset
|
545 return -1; |
8756
153d7e5d5a5b
remove useless cast, it does not remove warning, encode prototype must be changed
bcoudurier
parents:
8752
diff
changeset
|
546 ret = avctx->codec->encode(avctx, buf, buf_size, sub); |
2756 | 547 avctx->frame_number++; |
548 return ret; | |
549 } | |
550 | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
551 #if LIBAVCODEC_VERSION_MAJOR < 53 |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
552 int attribute_align_arg avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, |
0 | 553 int *got_picture_ptr, |
6318
73c09e922744
Make avcodec_decode_* functions take const input buffers.
michael
parents:
6219
diff
changeset
|
554 const uint8_t *buf, int buf_size) |
0 | 555 { |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
556 AVPacket avpkt; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
557 av_init_packet(&avpkt); |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
558 avpkt.data = buf; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
559 avpkt.size = buf_size; |
9787 | 560 // HACK for CorePNG to decode as normal PNG by default |
561 avpkt.flags = AV_PKT_FLAG_KEY; | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
562 |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
563 return avcodec_decode_video2(avctx, picture, got_picture_ptr, &avpkt); |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
564 } |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
565 #endif |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
566 |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
567 int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
568 int *got_picture_ptr, |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
569 AVPacket *avpkt) |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
570 { |
0 | 571 int ret; |
2967 | 572 |
2028 | 573 *got_picture_ptr= 0; |
2422 | 574 if((avctx->coded_width||avctx->coded_height) && avcodec_check_dimensions(avctx,avctx->coded_width,avctx->coded_height)) |
575 return -1; | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
576 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size){ |
2967 | 577 ret = avctx->codec->decode(avctx, picture, got_picture_ptr, |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
578 avpkt); |
814 | 579 |
2764 | 580 emms_c(); //needed to avoid an emms_c() call before every return; |
2967 | 581 |
582 if (*got_picture_ptr) | |
2453 | 583 avctx->frame_number++; |
584 }else | |
585 ret= 0; | |
586 | |
0 | 587 return ret; |
588 } | |
589 | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
590 #if LIBAVCODEC_VERSION_MAJOR < 53 |
5542
b0a566346fb1
Add attribute that forces alignment of stack to functions that need it.
ramiro
parents:
5537
diff
changeset
|
591 int attribute_align_arg avcodec_decode_audio2(AVCodecContext *avctx, int16_t *samples, |
0 | 592 int *frame_size_ptr, |
6318
73c09e922744
Make avcodec_decode_* functions take const input buffers.
michael
parents:
6219
diff
changeset
|
593 const uint8_t *buf, int buf_size) |
0 | 594 { |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
595 AVPacket avpkt; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
596 av_init_packet(&avpkt); |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
597 avpkt.data = buf; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
598 avpkt.size = buf_size; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
599 |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
600 return avcodec_decode_audio3(avctx, samples, frame_size_ptr, &avpkt); |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
601 } |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
602 #endif |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
603 |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
604 int attribute_align_arg avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples, |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
605 int *frame_size_ptr, |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
606 AVPacket *avpkt) |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
607 { |
0 | 608 int ret; |
609 | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
610 if((avctx->codec->capabilities & CODEC_CAP_DELAY) || avpkt->size){ |
4578
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
611 //FIXME remove the check below _after_ ensuring that all audio check that the available space is enough |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
612 if(*frame_size_ptr < AVCODEC_MAX_AUDIO_FRAME_SIZE){ |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
613 av_log(avctx, AV_LOG_ERROR, "buffer smaller than AVCODEC_MAX_AUDIO_FRAME_SIZE\n"); |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
614 return -1; |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
615 } |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
616 if(*frame_size_ptr < FF_MIN_BUFFER_SIZE || |
5707
c46509aca422
Remove check for input buffer size as it does not guarantee that
kostya
parents:
5706
diff
changeset
|
617 *frame_size_ptr < avctx->channels * avctx->frame_size * sizeof(int16_t)){ |
4578
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
618 av_log(avctx, AV_LOG_ERROR, "buffer %d too small\n", *frame_size_ptr); |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
619 return -1; |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
620 } |
006563b9ab27
dont check buffer size if the decode function wont be called at all
michael
parents:
4577
diff
changeset
|
621 |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
622 ret = avctx->codec->decode(avctx, samples, frame_size_ptr, avpkt); |
2791 | 623 avctx->frame_number++; |
4351 | 624 }else{ |
2791 | 625 ret= 0; |
4351 | 626 *frame_size_ptr=0; |
627 } | |
0 | 628 return ret; |
629 } | |
630 | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
631 #if LIBAVCODEC_VERSION_MAJOR < 53 |
2756 | 632 int avcodec_decode_subtitle(AVCodecContext *avctx, AVSubtitle *sub, |
633 int *got_sub_ptr, | |
634 const uint8_t *buf, int buf_size) | |
635 { | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
636 AVPacket avpkt; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
637 av_init_packet(&avpkt); |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
638 avpkt.data = buf; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
639 avpkt.size = buf_size; |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
640 |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
641 return avcodec_decode_subtitle2(avctx, sub, got_sub_ptr, &avpkt); |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
642 } |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
643 #endif |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
644 |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
645 int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
646 int *got_sub_ptr, |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
647 AVPacket *avpkt) |
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
648 { |
2756 | 649 int ret; |
650 | |
651 *got_sub_ptr = 0; | |
9355
54bc8a2727b0
Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents:
9328
diff
changeset
|
652 ret = avctx->codec->decode(avctx, sub, got_sub_ptr, avpkt); |
2756 | 653 if (*got_sub_ptr) |
654 avctx->frame_number++; | |
655 return ret; | |
656 } | |
657 | |
0 | 658 int avcodec_close(AVCodecContext *avctx) |
659 { | |
9742 | 660 /* If there is a user-supplied mutex locking routine, call it. */ |
661 if (ff_lockmgr_cb) { | |
662 if ((*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN)) | |
663 return -1; | |
664 } | |
665 | |
2806 | 666 entangled_thread_counter++; |
667 if(entangled_thread_counter != 1){ | |
668 av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n"); | |
669 entangled_thread_counter--; | |
670 return -1; | |
671 } | |
672 | |
8596
68e959302527
replace all occurrence of ENABLE_ by the corresponding CONFIG_, HAVE_ or ARCH_
aurel
parents:
8590
diff
changeset
|
673 if (HAVE_THREADS && avctx->thread_opaque) |
5234 | 674 avcodec_thread_free(avctx); |
0 | 675 if (avctx->codec->close) |
676 avctx->codec->close(avctx); | |
1994 | 677 avcodec_default_free_buffers(avctx); |
394 | 678 av_freep(&avctx->priv_data); |
0 | 679 avctx->codec = NULL; |
2806 | 680 entangled_thread_counter--; |
9742 | 681 |
682 /* Release any user-supplied mutex. */ | |
683 if (ff_lockmgr_cb) { | |
684 (*ff_lockmgr_cb)(&codec_mutex, AV_LOCK_RELEASE); | |
685 } | |
0 | 686 return 0; |
687 } | |
688 | |
689 AVCodec *avcodec_find_encoder(enum CodecID id) | |
690 { | |
691 AVCodec *p; | |
692 p = first_avcodec; | |
693 while (p) { | |
694 if (p->encode != NULL && p->id == id) | |
695 return p; | |
696 p = p->next; | |
697 } | |
698 return NULL; | |
699 } | |
700 | |
177 | 701 AVCodec *avcodec_find_encoder_by_name(const char *name) |
702 { | |
703 AVCodec *p; | |
8016
81dba4c59fd6
allows calling avcodec_find_(en|de)coder_by_name with NULL parameter
aurel
parents:
7992
diff
changeset
|
704 if (!name) |
81dba4c59fd6
allows calling avcodec_find_(en|de)coder_by_name with NULL parameter
aurel
parents:
7992
diff
changeset
|
705 return NULL; |
177 | 706 p = first_avcodec; |
707 while (p) { | |
708 if (p->encode != NULL && strcmp(name,p->name) == 0) | |
709 return p; | |
710 p = p->next; | |
711 } | |
712 return NULL; | |
713 } | |
714 | |
0 | 715 AVCodec *avcodec_find_decoder(enum CodecID id) |
716 { | |
717 AVCodec *p; | |
718 p = first_avcodec; | |
719 while (p) { | |
720 if (p->decode != NULL && p->id == id) | |
721 return p; | |
722 p = p->next; | |
723 } | |
724 return NULL; | |
725 } | |
726 | |
727 AVCodec *avcodec_find_decoder_by_name(const char *name) | |
728 { | |
729 AVCodec *p; | |
8016
81dba4c59fd6
allows calling avcodec_find_(en|de)coder_by_name with NULL parameter
aurel
parents:
7992
diff
changeset
|
730 if (!name) |
81dba4c59fd6
allows calling avcodec_find_(en|de)coder_by_name with NULL parameter
aurel
parents:
7992
diff
changeset
|
731 return NULL; |
0 | 732 p = first_avcodec; |
733 while (p) { | |
734 if (p->decode != NULL && strcmp(name,p->name) == 0) | |
735 return p; | |
736 p = p->next; | |
737 } | |
738 return NULL; | |
739 } | |
740 | |
741 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) | |
742 { | |
743 const char *codec_name; | |
744 AVCodec *p; | |
745 char buf1[32]; | |
92 | 746 int bitrate; |
5837 | 747 AVRational display_aspect_ratio; |
0 | 748 |
749 if (encode) | |
750 p = avcodec_find_encoder(enc->codec_id); | |
751 else | |
752 p = avcodec_find_decoder(enc->codec_id); | |
753 | |
754 if (p) { | |
755 codec_name = p->name; | |
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
|
756 } 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
|
757 /* 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
|
758 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
|
759 codec_name = "mpeg2ts"; |
0 | 760 } else if (enc->codec_name[0] != '\0') { |
761 codec_name = enc->codec_name; | |
762 } else { | |
763 /* output avi tags */ | |
2967 | 764 if( isprint(enc->codec_tag&0xFF) && isprint((enc->codec_tag>>8)&0xFF) |
2856 | 765 && isprint((enc->codec_tag>>16)&0xFF) && isprint((enc->codec_tag>>24)&0xFF)){ |
2967 | 766 snprintf(buf1, sizeof(buf1), "%c%c%c%c / 0x%04X", |
0 | 767 enc->codec_tag & 0xff, |
768 (enc->codec_tag >> 8) & 0xff, | |
769 (enc->codec_tag >> 16) & 0xff, | |
2856 | 770 (enc->codec_tag >> 24) & 0xff, |
771 enc->codec_tag); | |
0 | 772 } else { |
773 snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag); | |
774 } | |
775 codec_name = buf1; | |
776 } | |
777 | |
778 switch(enc->codec_type) { | |
779 case CODEC_TYPE_VIDEO: | |
780 snprintf(buf, buf_size, | |
781 "Video: %s%s", | |
1389 | 782 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
|
783 if (enc->pix_fmt != PIX_FMT_NONE) { |
55 | 784 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
785 ", %s", | |
988
001b7d3045e5
moved avcodec_get_chroma_sub_sample() to imgconvert.c
bellard
parents:
963
diff
changeset
|
786 avcodec_get_pix_fmt_name(enc->pix_fmt)); |
55 | 787 } |
0 | 788 if (enc->width) { |
789 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
|
790 ", %dx%d", |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
791 enc->width, enc->height); |
6466 | 792 if (enc->sample_aspect_ratio.num) { |
6467 | 793 av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den, |
794 enc->width*enc->sample_aspect_ratio.num, | |
795 enc->height*enc->sample_aspect_ratio.den, | |
796 1024*1024); | |
797 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
798 " [PAR %d:%d DAR %d:%d]", | |
799 enc->sample_aspect_ratio.num, enc->sample_aspect_ratio.den, | |
800 display_aspect_ratio.num, display_aspect_ratio.den); | |
6466 | 801 } |
6012 | 802 if(av_log_get_level() >= AV_LOG_DEBUG){ |
8611 | 803 int g= av_gcd(enc->time_base.num, enc->time_base.den); |
2884
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
804 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
|
805 ", %d/%d", |
a332778dfa06
print more time_base fps stuff if av_log level is at debug or above
michael
parents:
2881
diff
changeset
|
806 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
|
807 } |
0 | 808 } |
741 | 809 if (encode) { |
810 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
811 ", q=%d-%d", enc->qmin, enc->qmax); | |
812 } | |
92 | 813 bitrate = enc->bit_rate; |
0 | 814 break; |
815 case CODEC_TYPE_AUDIO: | |
816 snprintf(buf, buf_size, | |
817 "Audio: %s", | |
818 codec_name); | |
819 if (enc->sample_rate) { | |
820 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
8098 | 821 ", %d Hz", enc->sample_rate); |
0 | 822 } |
8098 | 823 av_strlcat(buf, ", ", buf_size); |
824 avcodec_get_channel_layout_string(buf + strlen(buf), buf_size - strlen(buf), enc->channels, enc->channel_layout); | |
7454
bb5e8cae1d71
Write sample format description within avcodec_string()
pross
parents:
7409
diff
changeset
|
825 if (enc->sample_fmt != SAMPLE_FMT_NONE) { |
bb5e8cae1d71
Write sample format description within avcodec_string()
pross
parents:
7409
diff
changeset
|
826 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
bb5e8cae1d71
Write sample format description within avcodec_string()
pross
parents:
7409
diff
changeset
|
827 ", %s", avcodec_get_sample_fmt_name(enc->sample_fmt)); |
bb5e8cae1d71
Write sample format description within avcodec_string()
pross
parents:
7409
diff
changeset
|
828 } |
2967 | 829 |
92 | 830 /* for PCM codecs, compute bitrate directly */ |
831 switch(enc->codec_id) { | |
7613 | 832 case CODEC_ID_PCM_F64BE: |
833 case CODEC_ID_PCM_F64LE: | |
834 bitrate = enc->sample_rate * enc->channels * 64; | |
835 break; | |
2852
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
836 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
|
837 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
|
838 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
|
839 case CODEC_ID_PCM_U32BE: |
7409
21770337ff2d
add CODEC_ID_PCM_F32BE (32-bit floating point PCM big endian decoder)
pross
parents:
7406
diff
changeset
|
840 case CODEC_ID_PCM_F32BE: |
7613 | 841 case CODEC_ID_PCM_F32LE: |
2852
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
842 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
|
843 break; |
6f7428adc6ad
Support de-/encoding of 24 and 32 bit PCM (from and to internal 16 bit).
reimar
parents:
2840
diff
changeset
|
844 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
|
845 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
|
846 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
|
847 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
|
848 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
|
849 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
|
850 break; |
92 | 851 case CODEC_ID_PCM_S16LE: |
852 case CODEC_ID_PCM_S16BE: | |
5940
d63186919b60
add pcm_s16le_planar support for electronicarts files
aurel
parents:
5837
diff
changeset
|
853 case CODEC_ID_PCM_S16LE_PLANAR: |
92 | 854 case CODEC_ID_PCM_U16LE: |
855 case CODEC_ID_PCM_U16BE: | |
94 | 856 bitrate = enc->sample_rate * enc->channels * 16; |
92 | 857 break; |
858 case CODEC_ID_PCM_S8: | |
859 case CODEC_ID_PCM_U8: | |
860 case CODEC_ID_PCM_ALAW: | |
861 case CODEC_ID_PCM_MULAW: | |
7475
eaf0ebba81d7
Make avcodec_string() and av_get_bits_per_sample() report the sample size for CODEC_ID_PCM_ZORK
pross
parents:
7454
diff
changeset
|
862 case CODEC_ID_PCM_ZORK: |
94 | 863 bitrate = enc->sample_rate * enc->channels * 8; |
92 | 864 break; |
865 default: | |
866 bitrate = enc->bit_rate; | |
867 break; | |
868 } | |
0 | 869 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
|
870 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
|
871 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
|
872 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
|
873 break; |
2756 | 874 case CODEC_TYPE_SUBTITLE: |
875 snprintf(buf, buf_size, "Subtitle: %s", codec_name); | |
876 bitrate = enc->bit_rate; | |
877 break; | |
6184 | 878 case CODEC_TYPE_ATTACHMENT: |
879 snprintf(buf, buf_size, "Attachment: %s", codec_name); | |
880 bitrate = enc->bit_rate; | |
881 break; | |
0 | 882 default: |
2281 | 883 snprintf(buf, buf_size, "Invalid Codec type %d", enc->codec_type); |
884 return; | |
0 | 885 } |
741 | 886 if (encode) { |
887 if (enc->flags & CODEC_FLAG_PASS1) | |
888 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
889 ", pass 1"); | |
890 if (enc->flags & CODEC_FLAG_PASS2) | |
891 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
892 ", pass 2"); | |
893 } | |
92 | 894 if (bitrate != 0) { |
2967 | 895 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
92 | 896 ", %d kb/s", bitrate / 1000); |
0 | 897 } |
898 } | |
899 | |
362 | 900 unsigned avcodec_version( void ) |
901 { | |
902 return LIBAVCODEC_VERSION_INT; | |
903 } | |
55 | 904 |
0 | 905 void avcodec_init(void) |
906 { | |
6350 | 907 static int initialized = 0; |
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
908 |
6350 | 909 if (initialized != 0) |
2979 | 910 return; |
6350 | 911 initialized = 1; |
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
912 |
4197 | 913 dsputil_static_init(); |
0 | 914 } |
915 | |
341 | 916 void avcodec_flush_buffers(AVCodecContext *avctx) |
917 { | |
1368 | 918 if(avctx->codec->flush) |
919 avctx->codec->flush(avctx); | |
341 | 920 } |
921 | |
2231 | 922 void avcodec_default_free_buffers(AVCodecContext *s){ |
1214 | 923 int i, j; |
924 | |
925 if(s->internal_buffer==NULL) return; | |
2967 | 926 |
1214 | 927 for(i=0; i<INTERNAL_BUFFER_SIZE; i++){ |
928 InternalBuffer *buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
929 for(j=0; j<4; j++){ | |
930 av_freep(&buf->base[j]); | |
931 buf->data[j]= NULL; | |
932 } | |
933 } | |
934 av_freep(&s->internal_buffer); | |
2967 | 935 |
1214 | 936 s->internal_buffer_count=0; |
937 } | |
938 | |
1264 | 939 char av_get_pict_type_char(int pict_type){ |
940 switch(pict_type){ | |
6450 | 941 case FF_I_TYPE: return 'I'; |
942 case FF_P_TYPE: return 'P'; | |
943 case FF_B_TYPE: return 'B'; | |
944 case FF_S_TYPE: return 'S'; | |
945 case FF_SI_TYPE:return 'i'; | |
946 case FF_SP_TYPE:return 'p'; | |
6456 | 947 case FF_BI_TYPE:return 'b'; |
6455 | 948 default: return '?'; |
1264 | 949 } |
950 } | |
951 | |
3433 | 952 int av_get_bits_per_sample(enum CodecID codec_id){ |
953 switch(codec_id){ | |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
954 case CODEC_ID_ADPCM_SBPRO_2: |
3438 | 955 return 2; |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
956 case CODEC_ID_ADPCM_SBPRO_3: |
3438 | 957 return 3; |
3435
ffa9e863f3be
simplify the voc demuxer using av_get_bits_per_sample()
aurel
parents:
3433
diff
changeset
|
958 case CODEC_ID_ADPCM_SBPRO_4: |
3438 | 959 case CODEC_ID_ADPCM_CT: |
960 return 4; | |
3433 | 961 case CODEC_ID_PCM_ALAW: |
962 case CODEC_ID_PCM_MULAW: | |
963 case CODEC_ID_PCM_S8: | |
964 case CODEC_ID_PCM_U8: | |
7475
eaf0ebba81d7
Make avcodec_string() and av_get_bits_per_sample() report the sample size for CODEC_ID_PCM_ZORK
pross
parents:
7454
diff
changeset
|
965 case CODEC_ID_PCM_ZORK: |
3433 | 966 return 8; |
967 case CODEC_ID_PCM_S16BE: | |
968 case CODEC_ID_PCM_S16LE: | |
5940
d63186919b60
add pcm_s16le_planar support for electronicarts files
aurel
parents:
5837
diff
changeset
|
969 case CODEC_ID_PCM_S16LE_PLANAR: |
3433 | 970 case CODEC_ID_PCM_U16BE: |
971 case CODEC_ID_PCM_U16LE: | |
972 return 16; | |
973 case CODEC_ID_PCM_S24DAUD: | |
974 case CODEC_ID_PCM_S24BE: | |
975 case CODEC_ID_PCM_S24LE: | |
976 case CODEC_ID_PCM_U24BE: | |
977 case CODEC_ID_PCM_U24LE: | |
978 return 24; | |
979 case CODEC_ID_PCM_S32BE: | |
980 case CODEC_ID_PCM_S32LE: | |
981 case CODEC_ID_PCM_U32BE: | |
982 case CODEC_ID_PCM_U32LE: | |
7409
21770337ff2d
add CODEC_ID_PCM_F32BE (32-bit floating point PCM big endian decoder)
pross
parents:
7406
diff
changeset
|
983 case CODEC_ID_PCM_F32BE: |
7613 | 984 case CODEC_ID_PCM_F32LE: |
3433 | 985 return 32; |
7613 | 986 case CODEC_ID_PCM_F64BE: |
987 case CODEC_ID_PCM_F64LE: | |
988 return 64; | |
3433 | 989 default: |
990 return 0; | |
991 } | |
992 } | |
993 | |
5537 | 994 int av_get_bits_per_sample_format(enum SampleFormat sample_fmt) { |
995 switch (sample_fmt) { | |
996 case SAMPLE_FMT_U8: | |
997 return 8; | |
998 case SAMPLE_FMT_S16: | |
999 return 16; | |
1000 case SAMPLE_FMT_S32: | |
1001 case SAMPLE_FMT_FLT: | |
1002 return 32; | |
7612 | 1003 case SAMPLE_FMT_DBL: |
1004 return 64; | |
5537 | 1005 default: |
1006 return 0; | |
1007 } | |
1008 } | |
1009 | |
8590 | 1010 #if !HAVE_THREADS |
2013
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1011 int avcodec_thread_init(AVCodecContext *s, int thread_count){ |
9545
59073f92f0e2
Make avcodec_thread_init() set the thread count, even in the case when
stefano
parents:
9536
diff
changeset
|
1012 s->thread_count = thread_count; |
2013
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1013 return -1; |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1014 } |
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
1015 #endif |
2676 | 1016 |
1017 unsigned int av_xiphlacing(unsigned char *s, unsigned int v) | |
1018 { | |
1019 unsigned int n = 0; | |
1020 | |
1021 while(v >= 0xff) { | |
1022 *s++ = 0xff; | |
1023 v -= 0xff; | |
1024 n++; | |
1025 } | |
1026 *s = v; | |
1027 n++; | |
1028 return n; | |
1029 } | |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1030 |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1031 /* 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
|
1032 * 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
|
1033 * *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
|
1034 * 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
|
1035 * and opened file name in **filename. */ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1036 int av_tempfile(char *prefix, char **filename) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1037 int fd=-1; |
8590 | 1038 #if !HAVE_MKSTEMP |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1039 *filename = tempnam(".", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1040 #else |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1041 size_t len = strlen(prefix) + 12; /* room for "/tmp/" and "XXXXXX\0" */ |
3372 | 1042 *filename = av_malloc(len); |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1043 #endif |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1044 /* -----common section-----*/ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1045 if (*filename == NULL) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1046 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
|
1047 return -1; |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1048 } |
8590 | 1049 #if !HAVE_MKSTEMP |
5285 | 1050 fd = open(*filename, O_RDWR | O_BINARY | O_CREAT, 0444); |
3233
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1051 #else |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1052 snprintf(*filename, len, "/tmp/%sXXXXXX", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1053 fd = mkstemp(*filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1054 if (fd < 0) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1055 snprintf(*filename, len, "./%sXXXXXX", prefix); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1056 fd = mkstemp(*filename); |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1057 } |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1058 #endif |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1059 /* -----common section-----*/ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1060 if (fd < 0) { |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1061 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
|
1062 return -1; |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1063 } |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1064 return fd; /* success */ |
18af2f7788c6
- Add new file internal.h for common internal-use-only functions.
corey
parents:
3171
diff
changeset
|
1065 } |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1066 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1067 typedef struct { |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1068 const char *abbr; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1069 int width, height; |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1070 } VideoFrameSizeAbbr; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1071 |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1072 typedef struct { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1073 const char *abbr; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1074 int rate_num, rate_den; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1075 } VideoFrameRateAbbr; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1076 |
7129 | 1077 static const VideoFrameSizeAbbr video_frame_size_abbrs[] = { |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1078 { "ntsc", 720, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1079 { "pal", 720, 576 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1080 { "qntsc", 352, 240 }, /* VCD compliant NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1081 { "qpal", 352, 288 }, /* VCD compliant PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1082 { "sntsc", 640, 480 }, /* square pixel NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1083 { "spal", 768, 576 }, /* square pixel PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1084 { "film", 352, 240 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1085 { "ntsc-film", 352, 240 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1086 { "sqcif", 128, 96 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1087 { "qcif", 176, 144 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1088 { "cif", 352, 288 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1089 { "4cif", 704, 576 }, |
9328
6a1ad1d933cd
Add 16cif video frame size abbreviation. i.e. -s alias for 1408x1152.
gb
parents:
9193
diff
changeset
|
1090 { "16cif", 1408,1152 }, |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1091 { "qqvga", 160, 120 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1092 { "qvga", 320, 240 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1093 { "vga", 640, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1094 { "svga", 800, 600 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1095 { "xga", 1024, 768 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1096 { "uxga", 1600,1200 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1097 { "qxga", 2048,1536 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1098 { "sxga", 1280,1024 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1099 { "qsxga", 2560,2048 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1100 { "hsxga", 5120,4096 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1101 { "wvga", 852, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1102 { "wxga", 1366, 768 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1103 { "wsxga", 1600,1024 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1104 { "wuxga", 1920,1200 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1105 { "woxga", 2560,1600 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1106 { "wqsxga", 3200,2048 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1107 { "wquxga", 3840,2400 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1108 { "whsxga", 6400,4096 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1109 { "whuxga", 7680,4800 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1110 { "cga", 320, 200 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1111 { "ega", 640, 350 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1112 { "hd480", 852, 480 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1113 { "hd720", 1280, 720 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1114 { "hd1080", 1920,1080 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1115 }; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1116 |
7129 | 1117 static const VideoFrameRateAbbr video_frame_rate_abbrs[]= { |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1118 { "ntsc", 30000, 1001 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1119 { "pal", 25, 1 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1120 { "qntsc", 30000, 1001 }, /* VCD compliant NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1121 { "qpal", 25, 1 }, /* VCD compliant PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1122 { "sntsc", 30000, 1001 }, /* square pixel NTSC */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1123 { "spal", 25, 1 }, /* square pixel PAL */ |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1124 { "film", 24, 1 }, |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1125 { "ntsc-film", 24000, 1001 }, |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1126 }; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1127 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1128 int av_parse_video_frame_size(int *width_ptr, int *height_ptr, const char *str) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1129 { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1130 int i; |
8042 | 1131 int n = FF_ARRAY_ELEMS(video_frame_size_abbrs); |
8757
d529e239a510
Remove 'const' qualifier from variable in av_parse_video_frame_size().
bcoudurier
parents:
8756
diff
changeset
|
1132 char *p; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1133 int frame_width = 0, frame_height = 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1134 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1135 for(i=0;i<n;i++) { |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1136 if (!strcmp(video_frame_size_abbrs[i].abbr, str)) { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1137 frame_width = video_frame_size_abbrs[i].width; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1138 frame_height = video_frame_size_abbrs[i].height; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1139 break; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1140 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1141 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1142 if (i == n) { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1143 p = str; |
8757
d529e239a510
Remove 'const' qualifier from variable in av_parse_video_frame_size().
bcoudurier
parents:
8756
diff
changeset
|
1144 frame_width = strtol(p, &p, 10); |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1145 if (*p) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1146 p++; |
8757
d529e239a510
Remove 'const' qualifier from variable in av_parse_video_frame_size().
bcoudurier
parents:
8756
diff
changeset
|
1147 frame_height = strtol(p, &p, 10); |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1148 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1149 if (frame_width <= 0 || frame_height <= 0) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1150 return -1; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1151 *width_ptr = frame_width; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1152 *height_ptr = frame_height; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1153 return 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1154 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1155 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1156 int av_parse_video_frame_rate(AVRational *frame_rate, const char *arg) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1157 { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1158 int i; |
8042 | 1159 int n = FF_ARRAY_ELEMS(video_frame_rate_abbrs); |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1160 char* cp; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1161 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1162 /* First, we check our abbreviation table */ |
5176
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1163 for (i = 0; i < n; ++i) |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1164 if (!strcmp(video_frame_rate_abbrs[i].abbr, arg)) { |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1165 frame_rate->num = video_frame_rate_abbrs[i].rate_num; |
82f7eaa32f46
split frame rate and frame size abbreviation into two structures
benoit
parents:
5127
diff
changeset
|
1166 frame_rate->den = video_frame_rate_abbrs[i].rate_den; |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1167 return 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1168 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1169 |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1170 /* Then, we try to parse it as fraction */ |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1171 cp = strchr(arg, '/'); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1172 if (!cp) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1173 cp = strchr(arg, ':'); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1174 if (cp) { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1175 char* cpp; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1176 frame_rate->num = strtol(arg, &cpp, 10); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1177 if (cpp != arg || cpp == cp) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1178 frame_rate->den = strtol(cp+1, &cpp, 10); |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1179 else |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1180 frame_rate->num = 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1181 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1182 else { |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1183 /* Finally we give up and parse it as double */ |
7826 | 1184 AVRational time_base = av_d2q(strtod(arg, 0), 1001000); |
5126
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1185 frame_rate->den = time_base.den; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1186 frame_rate->num = time_base.num; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1187 } |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1188 if (!frame_rate->num || !frame_rate->den) |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1189 return -1; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1190 else |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1191 return 0; |
7982b376b58a
Move the video size and rate abbreviations system from libavformat to libavcodec
benoit
parents:
4986
diff
changeset
|
1192 } |
7530
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1193 |
8281
f93efc084e41
Make av_log_missing_feature an internal function, and change its name
stefano
parents:
8227
diff
changeset
|
1194 void ff_log_missing_feature(void *avc, const char *feature, int want_sample) |
7530
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1195 { |
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1196 av_log(avc, AV_LOG_WARNING, "%s not implemented. Update your FFmpeg " |
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1197 "version to the newest one from SVN. If the problem still " |
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1198 "occurs, it means that your file has a feature which has not " |
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1199 "been implemented.", feature); |
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1200 if(want_sample) |
8603
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1201 ff_log_ask_for_sample(avc, NULL); |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1202 else |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1203 av_log(avc, AV_LOG_WARNING, "\n"); |
7530
398636f16e7e
Add a generic function to lavc to log messages about missing features.
superdump
parents:
7475
diff
changeset
|
1204 } |
8603
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1205 |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1206 void ff_log_ask_for_sample(void *avc, const char *msg) |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1207 { |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1208 if (msg) |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1209 av_log(avc, AV_LOG_WARNING, "%s ", msg); |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1210 av_log(avc, AV_LOG_WARNING, "If you want to help, upload a sample " |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1211 "of this file to ftp://upload.ffmpeg.org/MPlayer/incoming/ " |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1212 "and contact the ffmpeg-devel mailing list.\n"); |
555c2ab21d84
Split ff_log_missing_feature into ff_log_missing_feature
benoit
parents:
8596
diff
changeset
|
1213 } |
9030 | 1214 |
1215 static AVHWAccel *first_hwaccel = NULL; | |
1216 | |
1217 void av_register_hwaccel(AVHWAccel *hwaccel) | |
1218 { | |
1219 AVHWAccel **p = &first_hwaccel; | |
1220 while (*p) | |
1221 p = &(*p)->next; | |
1222 *p = hwaccel; | |
1223 hwaccel->next = NULL; | |
1224 } | |
9031 | 1225 |
1226 AVHWAccel *av_hwaccel_next(AVHWAccel *hwaccel) | |
1227 { | |
1228 return hwaccel ? hwaccel->next : first_hwaccel; | |
1229 } | |
9032 | 1230 |
1231 AVHWAccel *ff_find_hwaccel(enum CodecID codec_id, enum PixelFormat pix_fmt) | |
1232 { | |
1233 AVHWAccel *hwaccel=NULL; | |
1234 | |
1235 while((hwaccel= av_hwaccel_next(hwaccel))){ | |
1236 if ( hwaccel->id == codec_id | |
1237 && hwaccel->pix_fmt == pix_fmt) | |
1238 return hwaccel; | |
1239 } | |
1240 return NULL; | |
1241 } | |
9742 | 1242 |
1243 int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op)) | |
1244 { | |
1245 if (ff_lockmgr_cb) { | |
1246 if (ff_lockmgr_cb(&codec_mutex, AV_LOCK_DESTROY)) | |
1247 return -1; | |
1248 } | |
1249 | |
1250 ff_lockmgr_cb = cb; | |
1251 | |
1252 if (ff_lockmgr_cb) { | |
1253 if (ff_lockmgr_cb(&codec_mutex, AV_LOCK_CREATE)) | |
1254 return -1; | |
1255 } | |
1256 return 0; | |
1257 } |