Mercurial > libavcodec.hg
annotate utils.c @ 2071:41d30bae5019 libavcodec
attempt to create some separation in the FLAC system with respect to
demuxer and decoder layers by enabling the FLAC decoder to decode data
without needing the entire file, from start to finish
| author | melanson |
|---|---|
| date | Thu, 10 Jun 2004 04:13:43 +0000 |
| parents | 0817ee1f07e5 |
| children | 02a4fd7c606c |
| rev | line source |
|---|---|
| 0 | 1 /* |
| 2 * utils for libavcodec | |
| 429 | 3 * Copyright (c) 2001 Fabrice Bellard. |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
4 * Copyright (c) 2003 Michel Bardiaux for the av_log API |
|
1739
07a484280a82
copyright year update of the files i touched and remembered, things look annoyingly unmaintained otherwise
michael
parents:
1730
diff
changeset
|
5 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at> |
| 0 | 6 * |
| 429 | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Lesser General Public | |
| 9 * License as published by the Free Software Foundation; either | |
| 10 * version 2 of the License, or (at your option) any later version. | |
| 0 | 11 * |
| 429 | 12 * This library is distributed in the hope that it will be useful, |
| 0 | 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 429 | 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 15 * Lesser General Public License for more details. | |
| 0 | 16 * |
| 429 | 17 * You should have received a copy of the GNU Lesser General Public |
| 18 * License along with this library; if not, write to the Free Software | |
| 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 0 | 20 */ |
| 1106 | 21 |
| 22 /** | |
| 23 * @file utils.c | |
| 24 * utils. | |
| 25 */ | |
| 26 | |
| 394 | 27 #include "avcodec.h" |
| 0 | 28 #include "dsputil.h" |
| 341 | 29 #include "mpegvideo.h" |
|
2002
b737b5e96ee0
use AVInteger in av_rescale() so it can finally do 64*64/64 instead of just 64*32/32
michael
parents:
1996
diff
changeset
|
30 #include "integer.h" |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
31 #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
|
32 #include <limits.h> |
| 0 | 33 |
| 1994 | 34 static void avcodec_default_free_buffers(AVCodecContext *s); |
| 35 | |
| 862 | 36 void *av_mallocz(unsigned int size) |
| 394 | 37 { |
| 38 void *ptr; | |
| 908 | 39 |
| 394 | 40 ptr = av_malloc(size); |
| 41 if (!ptr) | |
| 42 return NULL; | |
| 43 memset(ptr, 0, size); | |
| 44 return ptr; | |
| 45 } | |
| 46 | |
|
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
47 char *av_strdup(const char *s) |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
48 { |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
49 char *ptr; |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
50 int len; |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
51 len = strlen(s) + 1; |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
52 ptr = av_malloc(len); |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
53 if (!ptr) |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
54 return NULL; |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
55 memcpy(ptr, s, len); |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
56 return ptr; |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
57 } |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
58 |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
59 /** |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
60 * realloc which does nothing if the block is large enough |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
61 */ |
| 1057 | 62 void *av_fast_realloc(void *ptr, unsigned int *size, unsigned int min_size) |
|
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
63 { |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
64 if(min_size < *size) |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
65 return ptr; |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
66 |
| 1901 | 67 *size= 17*min_size/16 + 32; |
|
1031
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
68 |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
69 return av_realloc(ptr, *size); |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
70 } |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
71 |
|
19de1445beb2
use av_malloc() functions - added av_strdup and av_realloc()
bellard
parents:
998
diff
changeset
|
72 |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
73 static unsigned int last_static = 0; |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
74 static unsigned int allocated_static = 0; |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
75 static void** array_static = NULL; |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
76 |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
77 /** |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
78 * allocation of static arrays - do not use for normal allocation. |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
79 */ |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
80 void *av_mallocz_static(unsigned int size) |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
81 { |
|
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
82 void *ptr = av_mallocz(size); |
|
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
83 |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
84 if(ptr){ |
| 1901 | 85 array_static =av_fast_realloc(array_static, &allocated_static, sizeof(void*)*(last_static+1)); |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
86 array_static[last_static++] = ptr; |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
87 } |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
88 |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
89 return ptr; |
|
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
90 } |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
91 |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
92 /** |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
93 * free all static arrays and reset pointers to 0. |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
94 */ |
| 1282 | 95 void av_free_static(void) |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
96 { |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
97 while(last_static){ |
|
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
98 av_freep(&array_static[--last_static]); |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
99 } |
|
1900
5cde80c5d929
static allocation rewrite (old code was plain a broken mess)
michael
parents:
1858
diff
changeset
|
100 av_freep(&array_static); |
|
902
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
101 } |
|
6acc8394960d
* two functions to handle allocation of static data more simple
kabi
parents:
862
diff
changeset
|
102 |
| 1854 | 103 /** |
| 104 * Frees memory and sets the pointer to NULL. | |
| 105 * @param arg pointer to the pointer which should be freed | |
| 106 */ | |
| 107 void av_freep(void *arg) | |
| 400 | 108 { |
| 1854 | 109 void **ptr= (void**)arg; |
| 400 | 110 av_free(*ptr); |
| 111 *ptr = NULL; | |
| 112 } | |
| 113 | |
| 0 | 114 /* encoder management */ |
| 115 AVCodec *first_avcodec; | |
| 116 | |
| 117 void register_avcodec(AVCodec *format) | |
| 118 { | |
| 119 AVCodec **p; | |
| 120 p = &first_avcodec; | |
| 121 while (*p != NULL) p = &(*p)->next; | |
| 122 *p = format; | |
| 123 format->next = NULL; | |
| 124 } | |
| 125 | |
| 1214 | 126 typedef struct InternalBuffer{ |
| 903 | 127 int last_pic_num; |
| 1214 | 128 uint8_t *base[4]; |
| 903 | 129 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
|
130 int linesize[4]; |
| 1214 | 131 }InternalBuffer; |
| 132 | |
| 133 #define INTERNAL_BUFFER_SIZE 32 | |
| 903 | 134 |
| 1538 | 135 #define ALIGN(x, a) (((x)+(a)-1)&~((a)-1)) |
| 136 | |
| 137 void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height){ | |
| 138 int w_align= 1; | |
| 139 int h_align= 1; | |
| 140 | |
| 141 switch(s->pix_fmt){ | |
| 142 case PIX_FMT_YUV420P: | |
| 143 case PIX_FMT_YUV422: | |
| 144 case PIX_FMT_YUV422P: | |
| 145 case PIX_FMT_YUV444P: | |
| 146 case PIX_FMT_GRAY8: | |
| 147 case PIX_FMT_YUVJ420P: | |
| 148 case PIX_FMT_YUVJ422P: | |
| 149 case PIX_FMT_YUVJ444P: | |
| 150 w_align= 16; //FIXME check for non mpeg style codecs and use less alignment | |
| 151 h_align= 16; | |
| 152 break; | |
| 153 case PIX_FMT_YUV411P: | |
| 154 w_align=32; | |
| 155 h_align=8; | |
| 156 break; | |
| 157 case PIX_FMT_YUV410P: | |
| 158 if(s->codec_id == CODEC_ID_SVQ1){ | |
| 159 w_align=64; | |
| 160 h_align=64; | |
| 161 } | |
| 162 break; | |
| 163 default: | |
| 164 w_align= 1; | |
| 165 h_align= 1; | |
| 166 break; | |
| 167 } | |
| 168 | |
| 169 *width = ALIGN(*width , w_align); | |
| 170 *height= ALIGN(*height, h_align); | |
| 171 } | |
| 172 | |
| 925 | 173 int avcodec_default_get_buffer(AVCodecContext *s, AVFrame *pic){ |
| 903 | 174 int i; |
| 1538 | 175 int w= s->width; |
| 176 int h= s->height; | |
| 1214 | 177 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
|
178 int *picture_number; |
| 924 | 179 |
| 180 assert(pic->data[0]==NULL); | |
| 1214 | 181 assert(INTERNAL_BUFFER_SIZE > s->internal_buffer_count); |
| 903 | 182 |
| 1214 | 183 if(s->internal_buffer==NULL){ |
| 184 s->internal_buffer= av_mallocz(INTERNAL_BUFFER_SIZE*sizeof(InternalBuffer)); | |
| 185 } | |
| 186 #if 0 | |
| 187 s->internal_buffer= av_fast_realloc( | |
| 188 s->internal_buffer, | |
| 189 &s->internal_buffer_size, | |
| 190 sizeof(InternalBuffer)*FFMAX(99, s->internal_buffer_count+1)/*FIXME*/ | |
| 191 ); | |
| 192 #endif | |
| 193 | |
| 194 buf= &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; | |
|
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
195 picture_number= &(((InternalBuffer*)s->internal_buffer)[INTERNAL_BUFFER_SIZE-1]).last_pic_num; //FIXME ugly hack |
|
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
196 (*picture_number)++; |
|
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
|
197 |
| 1214 | 198 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
|
199 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
|
200 buf->last_pic_num= *picture_number; |
| 903 | 201 }else{ |
| 1538 | 202 int h_chroma_shift, v_chroma_shift; |
| 203 int s_align, pixel_size; | |
| 903 | 204 |
| 205 avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift); | |
| 1538 | 206 |
| 903 | 207 switch(s->pix_fmt){ |
| 1291 | 208 case PIX_FMT_RGB555: |
| 209 case PIX_FMT_RGB565: | |
| 903 | 210 case PIX_FMT_YUV422: |
| 211 pixel_size=2; | |
| 212 break; | |
| 213 case PIX_FMT_RGB24: | |
| 214 case PIX_FMT_BGR24: | |
| 215 pixel_size=3; | |
| 216 break; | |
| 217 case PIX_FMT_RGBA32: | |
| 218 pixel_size=4; | |
| 219 break; | |
| 220 default: | |
| 221 pixel_size=1; | |
| 222 } | |
| 1538 | 223 |
| 224 avcodec_align_dimensions(s, &w, &h); | |
| 225 #if defined(ARCH_POWERPC) || defined(HAVE_MMI) //FIXME some cleaner check | |
| 226 s_align= 16; | |
| 227 #else | |
| 228 s_align= 8; | |
| 229 #endif | |
| 230 | |
| 903 | 231 if(!(s->flags&CODEC_FLAG_EMU_EDGE)){ |
| 232 w+= EDGE_WIDTH*2; | |
| 233 h+= EDGE_WIDTH*2; | |
| 234 } | |
| 235 | |
| 1214 | 236 buf->last_pic_num= -256*256*256*64; |
| 903 | 237 |
| 238 for(i=0; i<3; i++){ | |
| 1165 | 239 const int h_shift= i==0 ? 0 : h_chroma_shift; |
| 240 const int v_shift= i==0 ? 0 : v_chroma_shift; | |
| 903 | 241 |
|
1798
a3da4b429984
ppc chroma mess workaround (real bug is that the motion compensation code assumes that 2*uvlinesize == linesize and fixing this would mean a slowdown)
michael
parents:
1776
diff
changeset
|
242 //FIXME next ensures that linesize= 2^x uvlinesize, thats needed because some MC code assumes it |
|
a3da4b429984
ppc chroma mess workaround (real bug is that the motion compensation code assumes that 2*uvlinesize == linesize and fixing this would mean a slowdown)
michael
parents:
1776
diff
changeset
|
243 buf->linesize[i]= ALIGN(pixel_size*w>>h_shift, s_align<<(h_chroma_shift-h_shift)); |
| 903 | 244 |
|
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
|
245 buf->base[i]= av_mallocz((buf->linesize[i]*h>>v_shift)+16); //FIXME 16 |
| 1214 | 246 if(buf->base[i]==NULL) return -1; |
|
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
|
247 memset(buf->base[i], 128, buf->linesize[i]*h>>v_shift); |
| 903 | 248 |
| 249 if(s->flags&CODEC_FLAG_EMU_EDGE) | |
| 1214 | 250 buf->data[i] = buf->base[i]; |
| 903 | 251 else |
|
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 buf->data[i] = buf->base[i] + ALIGN((buf->linesize[i]*EDGE_WIDTH>>v_shift) + (EDGE_WIDTH>>h_shift), s_align); |
| 903 | 253 } |
| 254 pic->age= 256*256*256*64; | |
| 255 } | |
|
1588
de5e2acd0f80
initalize various uninitalized variables and avoid coded_picture_number as its not always correct (later should be reversed after fixing the picture_number mess)
michael
parents:
1585
diff
changeset
|
256 pic->type= FF_BUFFER_TYPE_INTERNAL; |
| 903 | 257 |
| 1214 | 258 for(i=0; i<4; i++){ |
| 259 pic->base[i]= buf->base[i]; | |
| 260 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
|
261 pic->linesize[i]= buf->linesize[i]; |
| 1214 | 262 } |
| 263 s->internal_buffer_count++; | |
| 264 | |
| 903 | 265 return 0; |
| 266 } | |
| 267 | |
| 925 | 268 void avcodec_default_release_buffer(AVCodecContext *s, AVFrame *pic){ |
| 903 | 269 int i; |
| 1214 | 270 InternalBuffer *buf, *last, temp; |
| 271 | |
| 924 | 272 assert(pic->type==FF_BUFFER_TYPE_INTERNAL); |
| 1396 | 273 assert(s->internal_buffer_count); |
| 1214 | 274 |
| 1455 | 275 buf = NULL; /* avoids warning */ |
| 1214 | 276 for(i=0; i<s->internal_buffer_count; i++){ //just 3-5 checks so is not worth to optimize |
| 277 buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
| 278 if(buf->data[0] == pic->data[0]) | |
| 279 break; | |
| 280 } | |
| 281 assert(i < s->internal_buffer_count); | |
| 282 s->internal_buffer_count--; | |
| 283 last = &((InternalBuffer*)s->internal_buffer)[s->internal_buffer_count]; | |
| 284 | |
| 285 temp= *buf; | |
| 286 *buf= *last; | |
| 287 *last= temp; | |
| 288 | |
| 289 for(i=0; i<3; i++){ | |
| 903 | 290 pic->data[i]=NULL; |
| 1214 | 291 // pic->base[i]=NULL; |
| 292 } | |
| 903 | 293 //printf("R%X\n", pic->opaque); |
| 294 } | |
| 295 | |
| 1630 | 296 int avcodec_default_reget_buffer(AVCodecContext *s, AVFrame *pic){ |
| 297 AVFrame temp_pic; | |
| 298 int i; | |
| 299 | |
| 300 /* If no picture return a new buffer */ | |
| 301 if(pic->data[0] == NULL) { | |
| 302 /* We will copy from buffer, so must be readable */ | |
| 303 pic->buffer_hints |= FF_BUFFER_HINTS_READABLE; | |
| 304 return s->get_buffer(s, pic); | |
| 305 } | |
| 306 | |
| 307 /* If internal buffer type return the same buffer */ | |
| 308 if(pic->type == FF_BUFFER_TYPE_INTERNAL) | |
| 309 return 0; | |
| 310 | |
| 311 /* | |
| 312 * Not internal type and reget_buffer not overridden, emulate cr buffer | |
| 313 */ | |
| 314 temp_pic = *pic; | |
| 315 for(i = 0; i < 4; i++) | |
| 316 pic->data[i] = pic->base[i] = NULL; | |
| 317 pic->opaque = NULL; | |
| 318 /* Allocate new frame */ | |
| 319 if (s->get_buffer(s, pic)) | |
| 320 return -1; | |
| 321 /* Copy image data from old buffer to new buffer */ | |
| 322 img_copy((AVPicture*)pic, (AVPicture*)&temp_pic, s->pix_fmt, s->width, | |
| 323 s->height); | |
| 324 s->release_buffer(s, &temp_pic); // Release old frame | |
| 325 return 0; | |
| 326 } | |
| 327 | |
| 1799 | 328 int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void **arg, int *ret, int count){ |
| 329 int i; | |
| 330 | |
| 331 for(i=0; i<count; i++){ | |
| 332 int r= func(c, arg[i]); | |
| 333 if(ret) ret[i]= r; | |
| 334 } | |
| 335 return 0; | |
| 336 } | |
| 337 | |
| 1858 | 338 enum PixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum PixelFormat * fmt){ |
| 998 | 339 return fmt[0]; |
| 340 } | |
| 341 | |
| 1856 | 342 static const char* context_to_name(void* ptr) { |
| 343 AVCodecContext *avc= ptr; | |
| 344 | |
| 345 if(avc && avc->codec && avc->codec->name) | |
| 346 return avc->codec->name; | |
| 347 else | |
| 348 return "NULL"; | |
| 349 } | |
| 350 | |
| 351 static AVClass av_codec_context_class = { "AVCodecContext", context_to_name }; | |
| 352 | |
| 681 | 353 void avcodec_get_context_defaults(AVCodecContext *s){ |
|
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
354 memset(s, 0, sizeof(AVCodecContext)); |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
355 |
| 1856 | 356 s->av_class= &av_codec_context_class; |
| 685 | 357 s->bit_rate= 800*1000; |
| 358 s->bit_rate_tolerance= s->bit_rate*10; | |
| 681 | 359 s->qmin= 2; |
| 360 s->qmax= 31; | |
| 932 | 361 s->mb_qmin= 2; |
| 362 s->mb_qmax= 31; | |
| 681 | 363 s->rc_eq= "tex^qComp"; |
| 364 s->qcompress= 0.5; | |
| 685 | 365 s->max_qdiff= 3; |
| 366 s->b_quant_factor=1.25; | |
| 367 s->b_quant_offset=1.25; | |
|
686
83d2c9d50d7d
fixing i_quant_factor, this should finally fix the bitrate bug with ffserver hopefully
michaelni
parents:
685
diff
changeset
|
368 s->i_quant_factor=-0.8; |
| 685 | 369 s->i_quant_offset=0.0; |
|
745
25d7fb7c89be
better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents:
742
diff
changeset
|
370 s->error_concealment= 3; |
| 762 | 371 s->error_resilience= 1; |
|
745
25d7fb7c89be
better/cleaner error resilience (done in a 2nd pass after decoding)
michaelni
parents:
742
diff
changeset
|
372 s->workaround_bugs= FF_BUG_AUTODETECT; |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
373 s->frame_rate_base= 1; |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
374 s->frame_rate = 25; |
| 762 | 375 s->gop_size= 50; |
| 376 s->me_method= ME_EPZS; | |
| 903 | 377 s->get_buffer= avcodec_default_get_buffer; |
| 378 s->release_buffer= avcodec_default_release_buffer; | |
| 998 | 379 s->get_format= avcodec_default_get_format; |
| 1799 | 380 s->execute= avcodec_default_execute; |
| 381 s->thread_count=1; | |
| 954 | 382 s->me_subpel_quality=8; |
|
1505
010f76d07a27
use lagrange multipler instead of qp for ratecontrol, this may break some things, tell me ASAP if u notice anything broken
michaelni
parents:
1456
diff
changeset
|
383 s->lmin= FF_QP2LAMBDA * s->qmin; |
|
010f76d07a27
use lagrange multipler instead of qp for ratecontrol, this may break some things, tell me ASAP if u notice anything broken
michaelni
parents:
1456
diff
changeset
|
384 s->lmax= FF_QP2LAMBDA * s->qmax; |
| 1548 | 385 s->sample_aspect_ratio= (AVRational){0,1}; |
| 1730 | 386 s->ildct_cmp= FF_CMP_VSAD; |
| 1150 | 387 |
| 388 s->intra_quant_bias= FF_DEFAULT_QUANT_BIAS; | |
| 389 s->inter_quant_bias= FF_DEFAULT_QUANT_BIAS; | |
|
1585
6b224ca24033
revised palette API, courtesy of Roberto Togni (rtogni at freemail.it)
melanson
parents:
1582
diff
changeset
|
390 s->palctrl = NULL; |
| 1630 | 391 s->reget_buffer= avcodec_default_reget_buffer; |
| 681 | 392 } |
| 393 | |
| 394 /** | |
| 395 * allocates a AVCodecContext and set it to defaults. | |
| 396 * this can be deallocated by simply calling free() | |
| 397 */ | |
| 703 | 398 AVCodecContext *avcodec_alloc_context(void){ |
|
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
399 AVCodecContext *avctx= av_malloc(sizeof(AVCodecContext)); |
| 681 | 400 |
| 401 if(avctx==NULL) return NULL; | |
| 402 | |
| 403 avcodec_get_context_defaults(avctx); | |
| 404 | |
| 405 return avctx; | |
| 406 } | |
| 407 | |
|
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
408 void avcodec_get_frame_defaults(AVFrame *pic){ |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
409 memset(pic, 0, sizeof(AVFrame)); |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
410 |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
411 pic->pts= AV_NOPTS_VALUE; |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
412 } |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
413 |
| 903 | 414 /** |
| 925 | 415 * allocates a AVPFrame and set it to defaults. |
| 903 | 416 * this can be deallocated by simply calling free() |
| 417 */ | |
| 925 | 418 AVFrame *avcodec_alloc_frame(void){ |
|
1831
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
419 AVFrame *pic= av_malloc(sizeof(AVFrame)); |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
420 |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
421 if(pic==NULL) return NULL; |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
422 |
|
cd2d7fcfab7a
use AVFrame.pts=AV_NOPTS_VALUE instead of AVFrame.pts=0
michael
parents:
1823
diff
changeset
|
423 avcodec_get_frame_defaults(pic); |
| 903 | 424 |
| 425 return pic; | |
| 426 } | |
| 427 | |
| 0 | 428 int avcodec_open(AVCodecContext *avctx, AVCodec *codec) |
| 429 { | |
| 430 int ret; | |
| 431 | |
|
1456
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
432 if(avctx->codec) |
|
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
433 return -1; |
|
670fca257a69
detect avcodec_open() on an already opened AVCodecContext
michaelni
parents:
1455
diff
changeset
|
434 |
| 0 | 435 avctx->codec = codec; |
| 927 | 436 avctx->codec_id = codec->id; |
| 0 | 437 avctx->frame_number = 0; |
|
374
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
438 if (codec->priv_data_size > 0) { |
|
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
439 avctx->priv_data = av_mallocz(codec->priv_data_size); |
|
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
440 if (!avctx->priv_data) |
|
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
441 return -ENOMEM; |
|
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
442 } else { |
|
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
443 avctx->priv_data = NULL; |
|
02147e22f8c8
* Don't allocate 0 bytes of memory. It upsets electricFence!
philipjsg
parents:
362
diff
changeset
|
444 } |
| 0 | 445 ret = avctx->codec->init(avctx); |
| 446 if (ret < 0) { | |
| 394 | 447 av_freep(&avctx->priv_data); |
| 0 | 448 return ret; |
| 449 } | |
| 450 return 0; | |
| 451 } | |
| 452 | |
| 1064 | 453 int avcodec_encode_audio(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
| 0 | 454 const short *samples) |
| 455 { | |
| 456 int ret; | |
| 457 | |
| 458 ret = avctx->codec->encode(avctx, buf, buf_size, (void *)samples); | |
| 459 avctx->frame_number++; | |
| 460 return ret; | |
| 461 } | |
| 462 | |
| 1064 | 463 int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
| 925 | 464 const AVFrame *pict) |
| 0 | 465 { |
| 466 int ret; | |
| 467 | |
| 468 ret = avctx->codec->encode(avctx, buf, buf_size, (void *)pict); | |
| 814 | 469 |
| 470 emms_c(); //needed to avoid a emms_c() call before every return; | |
| 471 | |
| 0 | 472 avctx->frame_number++; |
| 473 return ret; | |
| 474 } | |
| 475 | |
| 1249 | 476 /** |
| 477 * decode a frame. | |
| 478 * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes | |
| 479 * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end | |
| 480 * @param buf_size the size of the buffer in bytes | |
| 481 * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero | |
| 482 * @return -1 if error, otherwise return the number of | |
| 483 * bytes used. | |
| 484 */ | |
| 925 | 485 int avcodec_decode_video(AVCodecContext *avctx, AVFrame *picture, |
| 0 | 486 int *got_picture_ptr, |
| 1064 | 487 uint8_t *buf, int buf_size) |
| 0 | 488 { |
| 489 int ret; | |
| 903 | 490 |
| 2028 | 491 *got_picture_ptr= 0; |
| 0 | 492 ret = avctx->codec->decode(avctx, picture, got_picture_ptr, |
| 493 buf, buf_size); | |
| 814 | 494 |
| 495 emms_c(); //needed to avoid a emms_c() call before every return; | |
| 903 | 496 |
|
267
e10840e4f773
- Bug fix MPEG-2 decoder to handle "repeat_first_field" (Telecine)
pulento
parents:
260
diff
changeset
|
497 if (*got_picture_ptr) |
|
e10840e4f773
- Bug fix MPEG-2 decoder to handle "repeat_first_field" (Telecine)
pulento
parents:
260
diff
changeset
|
498 avctx->frame_number++; |
| 0 | 499 return ret; |
| 500 } | |
| 501 | |
| 502 /* decode an audio frame. return -1 if error, otherwise return the | |
| 503 *number of bytes used. If no frame could be decompressed, | |
| 504 *frame_size_ptr is zero. Otherwise, it is the decompressed frame | |
| 505 *size in BYTES. */ | |
| 1064 | 506 int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples, |
| 0 | 507 int *frame_size_ptr, |
| 1064 | 508 uint8_t *buf, int buf_size) |
| 0 | 509 { |
| 510 int ret; | |
| 511 | |
| 2028 | 512 *frame_size_ptr= 0; |
| 0 | 513 ret = avctx->codec->decode(avctx, samples, frame_size_ptr, |
| 514 buf, buf_size); | |
| 515 avctx->frame_number++; | |
| 516 return ret; | |
| 517 } | |
| 518 | |
| 519 int avcodec_close(AVCodecContext *avctx) | |
| 520 { | |
| 521 if (avctx->codec->close) | |
| 522 avctx->codec->close(avctx); | |
| 1994 | 523 avcodec_default_free_buffers(avctx); |
| 394 | 524 av_freep(&avctx->priv_data); |
| 0 | 525 avctx->codec = NULL; |
| 526 return 0; | |
| 527 } | |
| 528 | |
| 529 AVCodec *avcodec_find_encoder(enum CodecID id) | |
| 530 { | |
| 531 AVCodec *p; | |
| 532 p = first_avcodec; | |
| 533 while (p) { | |
| 534 if (p->encode != NULL && p->id == id) | |
| 535 return p; | |
| 536 p = p->next; | |
| 537 } | |
| 538 return NULL; | |
| 539 } | |
| 540 | |
| 177 | 541 AVCodec *avcodec_find_encoder_by_name(const char *name) |
| 542 { | |
| 543 AVCodec *p; | |
| 544 p = first_avcodec; | |
| 545 while (p) { | |
| 546 if (p->encode != NULL && strcmp(name,p->name) == 0) | |
| 547 return p; | |
| 548 p = p->next; | |
| 549 } | |
| 550 return NULL; | |
| 551 } | |
| 552 | |
| 0 | 553 AVCodec *avcodec_find_decoder(enum CodecID id) |
| 554 { | |
| 555 AVCodec *p; | |
| 556 p = first_avcodec; | |
| 557 while (p) { | |
| 558 if (p->decode != NULL && p->id == id) | |
| 559 return p; | |
| 560 p = p->next; | |
| 561 } | |
| 562 return NULL; | |
| 563 } | |
| 564 | |
| 565 AVCodec *avcodec_find_decoder_by_name(const char *name) | |
| 566 { | |
| 567 AVCodec *p; | |
| 568 p = first_avcodec; | |
| 569 while (p) { | |
| 570 if (p->decode != NULL && strcmp(name,p->name) == 0) | |
| 571 return p; | |
| 572 p = p->next; | |
| 573 } | |
| 574 return NULL; | |
| 575 } | |
| 576 | |
|
2032
0817ee1f07e5
avcodec_find is in no header file, and appearently not used or very usefull so lets make it static ...
michael
parents:
2028
diff
changeset
|
577 static AVCodec *avcodec_find(enum CodecID id) |
| 0 | 578 { |
| 579 AVCodec *p; | |
| 580 p = first_avcodec; | |
| 581 while (p) { | |
| 582 if (p->id == id) | |
| 583 return p; | |
| 584 p = p->next; | |
| 585 } | |
| 586 return NULL; | |
| 587 } | |
| 588 | |
| 589 void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) | |
| 590 { | |
| 591 const char *codec_name; | |
| 592 AVCodec *p; | |
| 593 char buf1[32]; | |
| 337 | 594 char channels_str[100]; |
| 92 | 595 int bitrate; |
| 0 | 596 |
| 597 if (encode) | |
| 598 p = avcodec_find_encoder(enc->codec_id); | |
| 599 else | |
| 600 p = avcodec_find_decoder(enc->codec_id); | |
| 601 | |
| 602 if (p) { | |
| 603 codec_name = p->name; | |
|
1449
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
604 if (!encode && enc->codec_id == CODEC_ID_MP3) { |
|
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
605 if (enc->sub_id == 2) |
|
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
606 codec_name = "mp2"; |
|
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
607 else if (enc->sub_id == 1) |
|
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
608 codec_name = "mp1"; |
|
7fbe89a76b73
update sub_id in mpegaudio decoding (might need same method as MPEG2VIDEO too ?)
bellard
parents:
1396
diff
changeset
|
609 } |
|
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
|
610 } 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
|
611 /* 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
|
612 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
|
613 codec_name = "mpeg2ts"; |
| 0 | 614 } else if (enc->codec_name[0] != '\0') { |
| 615 codec_name = enc->codec_name; | |
| 616 } else { | |
| 617 /* output avi tags */ | |
| 618 if (enc->codec_type == CODEC_TYPE_VIDEO) { | |
| 619 snprintf(buf1, sizeof(buf1), "%c%c%c%c", | |
| 620 enc->codec_tag & 0xff, | |
| 621 (enc->codec_tag >> 8) & 0xff, | |
| 622 (enc->codec_tag >> 16) & 0xff, | |
| 623 (enc->codec_tag >> 24) & 0xff); | |
| 624 } else { | |
| 625 snprintf(buf1, sizeof(buf1), "0x%04x", enc->codec_tag); | |
| 626 } | |
| 627 codec_name = buf1; | |
| 628 } | |
| 629 | |
| 630 switch(enc->codec_type) { | |
| 631 case CODEC_TYPE_VIDEO: | |
| 632 snprintf(buf, buf_size, | |
| 633 "Video: %s%s", | |
| 1389 | 634 codec_name, enc->mb_decision ? " (hq)" : ""); |
| 55 | 635 if (enc->codec_id == CODEC_ID_RAWVIDEO) { |
| 636 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
| 637 ", %s", | |
|
988
001b7d3045e5
moved avcodec_get_chroma_sub_sample() to imgconvert.c
bellard
parents:
963
diff
changeset
|
638 avcodec_get_pix_fmt_name(enc->pix_fmt)); |
| 55 | 639 } |
| 0 | 640 if (enc->width) { |
| 641 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
| 642 ", %dx%d, %0.2f fps", | |
| 643 enc->width, enc->height, | |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
644 (float)enc->frame_rate / enc->frame_rate_base); |
| 0 | 645 } |
| 741 | 646 if (encode) { |
| 647 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
| 648 ", q=%d-%d", enc->qmin, enc->qmax); | |
| 649 } | |
| 92 | 650 bitrate = enc->bit_rate; |
| 0 | 651 break; |
| 652 case CODEC_TYPE_AUDIO: | |
| 653 snprintf(buf, buf_size, | |
| 654 "Audio: %s", | |
| 655 codec_name); | |
|
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
656 switch (enc->channels) { |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
657 case 1: |
| 337 | 658 strcpy(channels_str, "mono"); |
|
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
659 break; |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
660 case 2: |
| 337 | 661 strcpy(channels_str, "stereo"); |
|
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
662 break; |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
663 case 6: |
| 337 | 664 strcpy(channels_str, "5:1"); |
|
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
665 break; |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
666 default: |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
667 sprintf(channels_str, "%d channels", enc->channels); |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
668 break; |
|
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
669 } |
| 0 | 670 if (enc->sample_rate) { |
| 671 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
| 672 ", %d Hz, %s", | |
| 673 enc->sample_rate, | |
|
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
674 channels_str); |
| 0 | 675 } |
|
318
21697f35a9ca
- Fixed AC3 decoding for 5:1 AC3 streams. Now when calling av_audio_decode for
pulento
parents:
315
diff
changeset
|
676 |
| 92 | 677 /* for PCM codecs, compute bitrate directly */ |
| 678 switch(enc->codec_id) { | |
| 679 case CODEC_ID_PCM_S16LE: | |
| 680 case CODEC_ID_PCM_S16BE: | |
| 681 case CODEC_ID_PCM_U16LE: | |
| 682 case CODEC_ID_PCM_U16BE: | |
| 94 | 683 bitrate = enc->sample_rate * enc->channels * 16; |
| 92 | 684 break; |
| 685 case CODEC_ID_PCM_S8: | |
| 686 case CODEC_ID_PCM_U8: | |
| 687 case CODEC_ID_PCM_ALAW: | |
| 688 case CODEC_ID_PCM_MULAW: | |
| 94 | 689 bitrate = enc->sample_rate * enc->channels * 8; |
| 92 | 690 break; |
| 691 default: | |
| 692 bitrate = enc->bit_rate; | |
| 693 break; | |
| 694 } | |
| 0 | 695 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
|
696 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
|
697 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
|
698 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
|
699 break; |
| 0 | 700 default: |
| 583 | 701 av_abort(); |
| 0 | 702 } |
| 741 | 703 if (encode) { |
| 704 if (enc->flags & CODEC_FLAG_PASS1) | |
| 705 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
| 706 ", pass 1"); | |
| 707 if (enc->flags & CODEC_FLAG_PASS2) | |
| 708 snprintf(buf + strlen(buf), buf_size - strlen(buf), | |
| 709 ", pass 2"); | |
| 710 } | |
| 92 | 711 if (bitrate != 0) { |
| 0 | 712 snprintf(buf + strlen(buf), buf_size - strlen(buf), |
| 92 | 713 ", %d kb/s", bitrate / 1000); |
| 0 | 714 } |
| 715 } | |
| 716 | |
| 362 | 717 unsigned avcodec_version( void ) |
| 718 { | |
| 719 return LIBAVCODEC_VERSION_INT; | |
| 720 } | |
| 55 | 721 |
| 379 | 722 unsigned avcodec_build( void ) |
| 723 { | |
| 724 return LIBAVCODEC_BUILD; | |
| 725 } | |
| 726 | |
| 0 | 727 /* must be called before any other functions */ |
| 728 void avcodec_init(void) | |
| 729 { | |
|
303
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
730 static int inited = 0; |
|
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
731 |
|
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
732 if (inited != 0) |
|
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
733 return; |
|
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
734 inited = 1; |
|
9a931fd8d06c
multiple init bugfix (patch by Alex Beregszaszi <alex@naxine.org>)
michaelni
parents:
267
diff
changeset
|
735 |
| 1201 | 736 dsputil_static_init(); |
| 0 | 737 } |
| 738 | |
| 1368 | 739 /** |
| 740 * Flush buffers, should be called when seeking or when swicthing to a different stream. | |
| 741 */ | |
| 341 | 742 void avcodec_flush_buffers(AVCodecContext *avctx) |
| 743 { | |
| 1368 | 744 if(avctx->codec->flush) |
| 745 avctx->codec->flush(avctx); | |
| 341 | 746 } |
| 747 | |
| 1994 | 748 static void avcodec_default_free_buffers(AVCodecContext *s){ |
| 1214 | 749 int i, j; |
| 750 | |
| 751 if(s->internal_buffer==NULL) return; | |
| 752 | |
| 753 for(i=0; i<INTERNAL_BUFFER_SIZE; i++){ | |
| 754 InternalBuffer *buf= &((InternalBuffer*)s->internal_buffer)[i]; | |
| 755 for(j=0; j<4; j++){ | |
| 756 av_freep(&buf->base[j]); | |
| 757 buf->data[j]= NULL; | |
| 758 } | |
| 759 } | |
| 760 av_freep(&s->internal_buffer); | |
| 761 | |
| 762 s->internal_buffer_count=0; | |
| 763 } | |
| 764 | |
| 1264 | 765 char av_get_pict_type_char(int pict_type){ |
| 766 switch(pict_type){ | |
| 767 case I_TYPE: return 'I'; | |
| 768 case P_TYPE: return 'P'; | |
| 769 case B_TYPE: return 'B'; | |
| 770 case S_TYPE: return 'S'; | |
| 771 case SI_TYPE:return 'i'; | |
| 772 case SP_TYPE:return 'p'; | |
| 773 default: return '?'; | |
| 774 } | |
| 775 } | |
| 776 | |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
777 int av_reduce(int *dst_nom, int *dst_den, int64_t nom, int64_t den, int64_t max){ |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
778 int exact=1, sign=0; |
|
1549
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
779 int64_t gcd; |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
780 |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
781 assert(den != 0); |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
782 |
| 1996 | 783 if(den < 0) |
| 784 return av_reduce(dst_nom, dst_den, -nom, -den, max); | |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
785 |
| 1996 | 786 sign= nom < 0; |
| 787 nom= ABS(nom); | |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
788 |
|
1549
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
789 gcd = ff_gcd(nom, den); |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
790 nom /= gcd; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
791 den /= gcd; |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
792 |
|
1549
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
793 if(nom > max || den > max){ |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
794 AVRational a0={0,1}, a1={1,0}; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
795 exact=0; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
796 |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
797 for(;;){ |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
798 int64_t x= nom / den; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
799 int64_t a2n= x*a1.num + a0.num; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
800 int64_t a2d= x*a1.den + a0.den; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
801 |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
802 if(a2n > max || a2d > max) break; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
803 |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
804 nom %= den; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
805 |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
806 a0= a1; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
807 a1= (AVRational){a2n, a2d}; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
808 if(nom==0) break; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
809 x= nom; nom=den; den=x; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
810 } |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
811 nom= a1.num; |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
812 den= a1.den; |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
813 } |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
814 |
|
1549
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
815 assert(ff_gcd(nom, den) == 1); |
|
5e643dd7e889
use continued fractions to approximate a fraction if its numerator or denominator is too large
michael
parents:
1548
diff
changeset
|
816 |
| 1996 | 817 *dst_nom = sign ? -nom : nom; |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
818 *dst_den = den; |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
819 |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
820 return exact; |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
821 } |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
822 |
|
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
|
823 int64_t av_rescale(int64_t a, int64_t b, int64_t c){ |
|
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
|
824 AVInteger ai, ci; |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
825 assert(c > 0); |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
826 assert(b >=0); |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
827 |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
828 if(a<0) return -av_rescale(-a, b, c); |
|
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
829 |
|
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
|
830 if(b<=INT_MAX && c<=INT_MAX){ |
|
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
|
831 if(a<=INT_MAX) |
|
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
|
832 return (a * b + c/2)/c; |
|
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
|
833 else |
|
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
|
834 return a/c*b + (a%c*b + c/2)/c; |
|
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
|
835 } |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
836 |
|
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
|
837 ai= av_mul_i(av_int2i(a), av_int2i(b)); |
|
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
|
838 ci= av_int2i(c); |
|
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
|
839 ai= av_add_i(ai, av_shr_i(ci,1)); |
|
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
|
840 |
|
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
|
841 return av_i2int(av_div_i(ai, ci)); |
|
1126
77ccf7fe3bd0
per context frame_rate_base, this should finally fix frame_rate related av sync issues
michaelni
parents:
1106
diff
changeset
|
842 } |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
843 |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
844 /* av_log API */ |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
845 |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
846 static int av_log_level = AV_LOG_DEBUG; |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
847 |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
848 static void av_log_default_callback(void* ptr, int level, const char* fmt, va_list vl) |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
849 { |
| 1600 | 850 static int print_prefix=1; |
| 1856 | 851 AVClass* avc= ptr ? *(AVClass**)ptr : NULL; |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
852 if(level>av_log_level) |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
853 return; |
|
1823
a660ef952580
(f)printf() is disallowed in libavcodec, compilation will fail now if its used, except that codecs which where added after the printf->av_log change which did ignore av_log() and used prinf are now silent and wont print anything, they should be changed to use av_log, i could do that, but its better if the orginal developer decides which AV_LOG level each message should get
michael
parents:
1799
diff
changeset
|
854 #undef fprintf |
| 1856 | 855 if(print_prefix && avc) { |
| 856 fprintf(stderr, "[%s @ %p]", avc->item_name(ptr), avc); | |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
857 } |
|
1823
a660ef952580
(f)printf() is disallowed in libavcodec, compilation will fail now if its used, except that codecs which where added after the printf->av_log change which did ignore av_log() and used prinf are now silent and wont print anything, they should be changed to use av_log, i could do that, but its better if the orginal developer decides which AV_LOG level each message should get
michael
parents:
1799
diff
changeset
|
858 #define fprintf please_use_av_log |
| 1600 | 859 |
| 1776 | 860 print_prefix= strstr(fmt, "\n") != NULL; |
| 1600 | 861 |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
862 vfprintf(stderr, fmt, vl); |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
863 } |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
864 |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
865 static void (*av_log_callback)(void*, int, const char*, va_list) = av_log_default_callback; |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
866 |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
867 void av_log(void* avcl, int level, const char *fmt, ...) |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
868 { |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
869 va_list vl; |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
870 va_start(vl, fmt); |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
871 av_vlog(avcl, level, fmt, vl); |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
872 va_end(vl); |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
873 } |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
874 |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
875 void av_vlog(void* avcl, int level, const char *fmt, va_list vl) |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
876 { |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
877 av_log_callback(avcl, level, fmt, vl); |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
878 } |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
879 |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
880 int av_log_get_level(void) |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
881 { |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
882 return av_log_level; |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
883 } |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
884 |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
885 void av_log_set_level(int level) |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
886 { |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
887 av_log_level = level; |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
888 } |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
889 |
|
1855
bafde44145f9
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1854
diff
changeset
|
890 void av_log_set_callback(void (*callback)(void*, int, const char*, va_list)) |
|
1598
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
891 { |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
892 av_log_callback = callback; |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
893 } |
|
932d306bf1dc
av_log() patch by (Michel Bardiaux <mbardiaux at peaktime dot be>)
michael
parents:
1588
diff
changeset
|
894 |
|
2013
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
895 #if !defined(HAVE_PTHREADS) && !defined(HAVE_W32THREADS) |
|
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
896 int avcodec_thread_init(AVCodecContext *s, int thread_count){ |
|
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
897 return -1; |
|
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
898 } |
|
85e547a18d87
dummy avcodec_thread_init() to avoid linking issues
michael
parents:
2002
diff
changeset
|
899 #endif |
