3 * Copyright (c) 2001 Fabrice Bellard.
4 * Copyright (c) 2003 Michel Bardiaux for the av_log API
5 * Copyright (c) 2002-2004 Michael Niedermayer <michaelni@gmx.at>
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.
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
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
29 #include "mpegvideo.h"
34 void avcodec_default_free_buffers(AVCodecContext
*s
);
36 void *av_mallocz(unsigned int size
)
40 ptr
= av_malloc(size
);
47 char *av_strdup(const char *s
)
60 * realloc which does nothing if the block is large enough
62 void *av_fast_realloc(void *ptr
, unsigned int *size
, unsigned int min_size
)
67 *size
= 17*min_size
/16 + 32;
69 return av_realloc(ptr
, *size
);
73 static unsigned int last_static
= 0;
74 static unsigned int allocated_static
= 0;
75 static void** array_static
= NULL
;
78 * allocation of static arrays - do not use for normal allocation.
80 void *av_mallocz_static(unsigned int size
)
82 void *ptr
= av_mallocz(size
);
85 array_static
=av_fast_realloc(array_static
, &allocated_static
, sizeof(void*)*(last_static
+1));
86 array_static
[last_static
++] = ptr
;
93 * free all static arrays and reset pointers to 0.
95 void av_free_static(void)
98 av_freep(&array_static
[--last_static
]);
100 av_freep(&array_static
);
104 * Frees memory and sets the pointer to NULL.
105 * @param arg pointer to the pointer which should be freed
107 void av_freep(void *arg
)
109 void **ptr
= (void**)arg
;
114 /* encoder management */
115 AVCodec
*first_avcodec
= NULL
;
117 void register_avcodec(AVCodec
*format
)
121 while (*p
!= NULL
) p
= &(*p
)->next
;
126 void avcodec_set_dimensions(AVCodecContext
*s
, int width
, int height
){
127 s
->coded_width
= width
;
128 s
->coded_height
= height
;
129 s
->width
= -((-width
)>>s
->lowres
);
130 s
->height
= -((-height
)>>s
->lowres
);
133 typedef struct InternalBuffer
{
140 #define INTERNAL_BUFFER_SIZE 32
142 #define ALIGN(x, a) (((x)+(a)-1)&~((a)-1))
144 void avcodec_align_dimensions(AVCodecContext
*s
, int *width
, int *height
){
149 case PIX_FMT_YUV420P
:
151 case PIX_FMT_UYVY422
:
152 case PIX_FMT_YUV422P
:
153 case PIX_FMT_YUV444P
:
155 case PIX_FMT_YUVJ420P
:
156 case PIX_FMT_YUVJ422P
:
157 case PIX_FMT_YUVJ444P
:
158 w_align
= 16; //FIXME check for non mpeg style codecs and use less alignment
161 case PIX_FMT_YUV411P
:
165 case PIX_FMT_YUV410P
:
166 if(s
->codec_id
== CODEC_ID_SVQ1
){
171 if(s
->codec_id
== CODEC_ID_RPZA
){
176 if(s
->codec_id
== CODEC_ID_SMC
){
187 *width
= ALIGN(*width
, w_align
);
188 *height
= ALIGN(*height
, h_align
);
191 int avcodec_default_get_buffer(AVCodecContext
*s
, AVFrame
*pic
){
198 assert(pic
->data
[0]==NULL
);
199 assert(INTERNAL_BUFFER_SIZE
> s
->internal_buffer_count
);
201 if(s
->internal_buffer
==NULL
){
202 s
->internal_buffer
= av_mallocz(INTERNAL_BUFFER_SIZE
*sizeof(InternalBuffer
));
205 s
->internal_buffer
= av_fast_realloc(
207 &s
->internal_buffer_size
,
208 sizeof(InternalBuffer
)*FFMAX(99, s
->internal_buffer_count
+1)/*FIXME*/
212 buf
= &((InternalBuffer
*)s
->internal_buffer
)[s
->internal_buffer_count
];
213 picture_number
= &(((InternalBuffer
*)s
->internal_buffer
)[INTERNAL_BUFFER_SIZE
-1]).last_pic_num
; //FIXME ugly hack
217 pic
->age
= *picture_number
- buf
->last_pic_num
;
218 buf
->last_pic_num
= *picture_number
;
220 int h_chroma_shift
, v_chroma_shift
;
221 int s_align
, pixel_size
;
223 avcodec_get_chroma_sub_sample(s
->pix_fmt
, &h_chroma_shift
, &v_chroma_shift
);
229 case PIX_FMT_UYVY422
:
243 avcodec_align_dimensions(s
, &w
, &h
);
244 #if defined(ARCH_POWERPC) || defined(HAVE_MMI) //FIXME some cleaner check
250 if(!(s
->flags
&CODEC_FLAG_EMU_EDGE
)){
255 buf
->last_pic_num
= -256*256*256*64;
258 const int h_shift
= i
==0 ?
0 : h_chroma_shift
;
259 const int v_shift
= i
==0 ?
0 : v_chroma_shift
;
261 //FIXME next ensures that linesize= 2^x uvlinesize, thats needed because some MC code assumes it
262 buf
->linesize
[i
]= ALIGN(pixel_size
*w
>>h_shift
, s_align
<<(h_chroma_shift
-h_shift
));
264 buf
->base
[i
]= av_mallocz((buf
->linesize
[i
]*h
>>v_shift
)+16); //FIXME 16
265 if(buf
->base
[i
]==NULL
) return -1;
266 memset(buf
->base
[i
], 128, buf
->linesize
[i
]*h
>>v_shift
);
268 if(s
->flags
&CODEC_FLAG_EMU_EDGE
)
269 buf
->data
[i
] = buf
->base
[i
];
271 buf
->data
[i
] = buf
->base
[i
] + ALIGN((buf
->linesize
[i
]*EDGE_WIDTH
>>v_shift
) + (EDGE_WIDTH
>>h_shift
), s_align
);
273 pic
->age
= 256*256*256*64;
275 pic
->type
= FF_BUFFER_TYPE_INTERNAL
;
278 pic
->base
[i
]= buf
->base
[i
];
279 pic
->data
[i
]= buf
->data
[i
];
280 pic
->linesize
[i
]= buf
->linesize
[i
];
282 s
->internal_buffer_count
++;
287 void avcodec_default_release_buffer(AVCodecContext
*s
, AVFrame
*pic
){
289 InternalBuffer
*buf
, *last
, temp
;
291 assert(pic
->type
==FF_BUFFER_TYPE_INTERNAL
);
292 assert(s
->internal_buffer_count
);
294 buf
= NULL
; /* avoids warning */
295 for(i
=0; i
<s
->internal_buffer_count
; i
++){ //just 3-5 checks so is not worth to optimize
296 buf
= &((InternalBuffer
*)s
->internal_buffer
)[i
];
297 if(buf
->data
[0] == pic
->data
[0])
300 assert(i
< s
->internal_buffer_count
);
301 s
->internal_buffer_count
--;
302 last
= &((InternalBuffer
*)s
->internal_buffer
)[s
->internal_buffer_count
];
310 // pic->base[i]=NULL;
312 //printf("R%X\n", pic->opaque);
315 int avcodec_default_reget_buffer(AVCodecContext
*s
, AVFrame
*pic
){
319 /* If no picture return a new buffer */
320 if(pic
->data
[0] == NULL
) {
321 /* We will copy from buffer, so must be readable */
322 pic
->buffer_hints
|= FF_BUFFER_HINTS_READABLE
;
323 return s
->get_buffer(s
, pic
);
326 /* If internal buffer type return the same buffer */
327 if(pic
->type
== FF_BUFFER_TYPE_INTERNAL
)
331 * Not internal type and reget_buffer not overridden, emulate cr buffer
334 for(i
= 0; i
< 4; i
++)
335 pic
->data
[i
] = pic
->base
[i
] = NULL
;
337 /* Allocate new frame */
338 if (s
->get_buffer(s
, pic
))
340 /* Copy image data from old buffer to new buffer */
341 img_copy((AVPicture
*)pic
, (AVPicture
*)&temp_pic
, s
->pix_fmt
, s
->width
,
343 s
->release_buffer(s
, &temp_pic
); // Release old frame
347 int avcodec_default_execute(AVCodecContext
*c
, int (*func
)(AVCodecContext
*c2
, void *arg2
),void **arg
, int *ret
, int count
){
350 for(i
=0; i
<count
; i
++){
351 int r
= func(c
, arg
[i
]);
357 enum PixelFormat
avcodec_default_get_format(struct AVCodecContext
*s
, const enum PixelFormat
* fmt
){
361 static const char* context_to_name(void* ptr
) {
362 AVCodecContext
*avc
= ptr
;
364 if(avc
&& avc
->codec
&& avc
->codec
->name
)
365 return avc
->codec
->name
;
370 static AVClass av_codec_context_class
= { "AVCodecContext", context_to_name
};
372 void avcodec_get_context_defaults(AVCodecContext
*s
){
373 memset(s
, 0, sizeof(AVCodecContext
));
375 s
->av_class
= &av_codec_context_class
;
376 s
->bit_rate
= 800*1000;
377 s
->bit_rate_tolerance
= s
->bit_rate
*10;
382 s
->rc_eq
= "tex^qComp";
385 s
->b_quant_factor
=1.25;
386 s
->b_quant_offset
=1.25;
387 s
->i_quant_factor
=-0.8;
388 s
->i_quant_offset
=0.0;
389 s
->error_concealment
= 3;
390 s
->error_resilience
= 1;
391 s
->workaround_bugs
= FF_BUG_AUTODETECT
;
392 s
->frame_rate_base
= 1;
395 s
->me_method
= ME_EPZS
;
396 s
->get_buffer
= avcodec_default_get_buffer
;
397 s
->release_buffer
= avcodec_default_release_buffer
;
398 s
->get_format
= avcodec_default_get_format
;
399 s
->execute
= avcodec_default_execute
;
401 s
->me_subpel_quality
=8;
402 s
->lmin
= FF_QP2LAMBDA
* s
->qmin
;
403 s
->lmax
= FF_QP2LAMBDA
* s
->qmax
;
404 s
->sample_aspect_ratio
= (AVRational
){0,1};
405 s
->ildct_cmp
= FF_CMP_VSAD
;
406 s
->profile
= FF_PROFILE_UNKNOWN
;
407 s
->level
= FF_LEVEL_UNKNOWN
;
409 s
->intra_quant_bias
= FF_DEFAULT_QUANT_BIAS
;
410 s
->inter_quant_bias
= FF_DEFAULT_QUANT_BIAS
;
412 s
->reget_buffer
= avcodec_default_reget_buffer
;
416 * allocates a AVCodecContext and set it to defaults.
417 * this can be deallocated by simply calling free()
419 AVCodecContext
*avcodec_alloc_context(void){
420 AVCodecContext
*avctx
= av_malloc(sizeof(AVCodecContext
));
422 if(avctx
==NULL
) return NULL
;
424 avcodec_get_context_defaults(avctx
);
429 void avcodec_get_frame_defaults(AVFrame
*pic
){
430 memset(pic
, 0, sizeof(AVFrame
));
432 pic
->pts
= AV_NOPTS_VALUE
;
436 * allocates a AVPFrame and set it to defaults.
437 * this can be deallocated by simply calling free()
439 AVFrame
*avcodec_alloc_frame(void){
440 AVFrame
*pic
= av_malloc(sizeof(AVFrame
));
442 if(pic
==NULL
) return NULL
;
444 avcodec_get_frame_defaults(pic
);
449 int avcodec_open(AVCodecContext
*avctx
, AVCodec
*codec
)
456 avctx
->codec
= codec
;
457 avctx
->codec_id
= codec
->id
;
458 avctx
->frame_number
= 0;
459 if (codec
->priv_data_size
> 0) {
460 avctx
->priv_data
= av_mallocz(codec
->priv_data_size
);
461 if (!avctx
->priv_data
)
464 avctx
->priv_data
= NULL
;
467 if(avctx
->coded_width
&& avctx
->coded_height
)
468 avcodec_set_dimensions(avctx
, avctx
->coded_width
, avctx
->coded_height
);
469 else if(avctx
->width
&& avctx
->height
)
470 avcodec_set_dimensions(avctx
, avctx
->width
, avctx
->height
);
472 ret
= avctx
->codec
->init(avctx
);
474 av_freep(&avctx
->priv_data
);
480 int avcodec_encode_audio(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
481 const short *samples
)
483 if((avctx
->codec
->capabilities
& CODEC_CAP_DELAY
) || samples
){
484 int ret
= avctx
->codec
->encode(avctx
, buf
, buf_size
, (void *)samples
);
485 avctx
->frame_number
++;
491 int avcodec_encode_video(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
494 if((avctx
->codec
->capabilities
& CODEC_CAP_DELAY
) || pict
){
495 int ret
= avctx
->codec
->encode(avctx
, buf
, buf_size
, (void *)pict
);
496 avctx
->frame_number
++;
497 emms_c(); //needed to avoid a emms_c() call before every return;
506 * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes
507 * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end
508 * @param buf_size the size of the buffer in bytes
509 * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero
510 * @return -1 if error, otherwise return the number of
513 int avcodec_decode_video(AVCodecContext
*avctx
, AVFrame
*picture
,
514 int *got_picture_ptr
,
515 uint8_t *buf
, int buf_size
)
520 ret
= avctx
->codec
->decode(avctx
, picture
, got_picture_ptr
,
523 emms_c(); //needed to avoid a emms_c() call before every return;
525 if (*got_picture_ptr
)
526 avctx
->frame_number
++;
530 /* decode an audio frame. return -1 if error, otherwise return the
531 *number of bytes used. If no frame could be decompressed,
532 *frame_size_ptr is zero. Otherwise, it is the decompressed frame
534 int avcodec_decode_audio(AVCodecContext
*avctx
, int16_t *samples
,
536 uint8_t *buf
, int buf_size
)
541 ret
= avctx
->codec
->decode(avctx
, samples
, frame_size_ptr
,
543 avctx
->frame_number
++;
547 int avcodec_close(AVCodecContext
*avctx
)
549 if (avctx
->codec
->close
)
550 avctx
->codec
->close(avctx
);
551 avcodec_default_free_buffers(avctx
);
552 av_freep(&avctx
->priv_data
);
557 AVCodec
*avcodec_find_encoder(enum CodecID id
)
562 if (p
->encode
!= NULL
&& p
->id
== id
)
569 AVCodec
*avcodec_find_encoder_by_name(const char *name
)
574 if (p
->encode
!= NULL
&& strcmp(name
,p
->name
) == 0)
581 AVCodec
*avcodec_find_decoder(enum CodecID id
)
586 if (p
->decode
!= NULL
&& p
->id
== id
)
593 AVCodec
*avcodec_find_decoder_by_name(const char *name
)
598 if (p
->decode
!= NULL
&& strcmp(name
,p
->name
) == 0)
605 static AVCodec
*avcodec_find(enum CodecID id
)
617 void avcodec_string(char *buf
, int buf_size
, AVCodecContext
*enc
, int encode
)
619 const char *codec_name
;
622 char channels_str
[100];
626 p
= avcodec_find_encoder(enc
->codec_id
);
628 p
= avcodec_find_decoder(enc
->codec_id
);
631 codec_name
= p
->name
;
632 if (!encode
&& enc
->codec_id
== CODEC_ID_MP3
) {
633 if (enc
->sub_id
== 2)
635 else if (enc
->sub_id
== 1)
638 } else if (enc
->codec_id
== CODEC_ID_MPEG2TS
) {
639 /* fake mpeg2 transport stream codec (currently not
641 codec_name
= "mpeg2ts";
642 } else if (enc
->codec_name
[0] != '\0') {
643 codec_name
= enc
->codec_name
;
645 /* output avi tags */
646 if (enc
->codec_type
== CODEC_TYPE_VIDEO
) {
647 snprintf(buf1
, sizeof(buf1
), "%c%c%c%c",
648 enc
->codec_tag
& 0xff,
649 (enc
->codec_tag
>> 8) & 0xff,
650 (enc
->codec_tag
>> 16) & 0xff,
651 (enc
->codec_tag
>> 24) & 0xff);
653 snprintf(buf1
, sizeof(buf1
), "0x%04x", enc
->codec_tag
);
658 switch(enc
->codec_type
) {
659 case CODEC_TYPE_VIDEO
:
660 snprintf(buf
, buf_size
,
662 codec_name
, enc
->mb_decision ?
" (hq)" : "");
663 if (enc
->codec_id
== CODEC_ID_RAWVIDEO
) {
664 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
666 avcodec_get_pix_fmt_name(enc
->pix_fmt
));
669 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
670 ", %dx%d, %0.2f fps",
671 enc
->width
, enc
->height
,
672 (float)enc
->frame_rate
/ enc
->frame_rate_base
);
675 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
676 ", q=%d-%d", enc
->qmin
, enc
->qmax
);
678 bitrate
= enc
->bit_rate
;
680 case CODEC_TYPE_AUDIO
:
681 snprintf(buf
, buf_size
,
684 switch (enc
->channels
) {
686 strcpy(channels_str
, "mono");
689 strcpy(channels_str
, "stereo");
692 strcpy(channels_str
, "5:1");
695 sprintf(channels_str
, "%d channels", enc
->channels
);
698 if (enc
->sample_rate
) {
699 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
705 /* for PCM codecs, compute bitrate directly */
706 switch(enc
->codec_id
) {
707 case CODEC_ID_PCM_S16LE
:
708 case CODEC_ID_PCM_S16BE
:
709 case CODEC_ID_PCM_U16LE
:
710 case CODEC_ID_PCM_U16BE
:
711 bitrate
= enc
->sample_rate
* enc
->channels
* 16;
713 case CODEC_ID_PCM_S8
:
714 case CODEC_ID_PCM_U8
:
715 case CODEC_ID_PCM_ALAW
:
716 case CODEC_ID_PCM_MULAW
:
717 bitrate
= enc
->sample_rate
* enc
->channels
* 8;
720 bitrate
= enc
->bit_rate
;
724 case CODEC_TYPE_DATA
:
725 snprintf(buf
, buf_size
, "Data: %s", codec_name
);
726 bitrate
= enc
->bit_rate
;
732 if (enc
->flags
& CODEC_FLAG_PASS1
)
733 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
735 if (enc
->flags
& CODEC_FLAG_PASS2
)
736 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
740 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
741 ", %d kb/s", bitrate
/ 1000);
745 unsigned avcodec_version( void )
747 return LIBAVCODEC_VERSION_INT
;
750 unsigned avcodec_build( void )
752 return LIBAVCODEC_BUILD
;
755 /* must be called before any other functions */
756 void avcodec_init(void)
758 static int inited
= 0;
764 dsputil_static_init();
768 * Flush buffers, should be called when seeking or when swicthing to a different stream.
770 void avcodec_flush_buffers(AVCodecContext
*avctx
)
772 if(avctx
->codec
->flush
)
773 avctx
->codec
->flush(avctx
);
776 void avcodec_default_free_buffers(AVCodecContext
*s
){
779 if(s
->internal_buffer
==NULL
) return;
781 for(i
=0; i
<INTERNAL_BUFFER_SIZE
; i
++){
782 InternalBuffer
*buf
= &((InternalBuffer
*)s
->internal_buffer
)[i
];
784 av_freep(&buf
->base
[j
]);
788 av_freep(&s
->internal_buffer
);
790 s
->internal_buffer_count
=0;
793 char av_get_pict_type_char(int pict_type
){
795 case I_TYPE
: return 'I';
796 case P_TYPE
: return 'P';
797 case B_TYPE
: return 'B';
798 case S_TYPE
: return 'S';
799 case SI_TYPE
:return 'i';
800 case SP_TYPE
:return 'p';
805 int av_reduce(int *dst_nom
, int *dst_den
, int64_t nom
, int64_t den
, int64_t max
){
806 AVRational a0
={0,1}, a1
={1,0};
807 int sign
= (nom
<0) ^ (den
<0);
808 int64_t gcd
= ff_gcd(ABS(nom
), ABS(den
));
812 if(nom
<=max
&& den
<=max
){
813 a1
= (AVRational
){nom
, den
};
818 int64_t x
= nom
/ den
;
819 int64_t next_den
= nom
- den
*x
;
820 int64_t a2n
= x
*a1
.num
+ a0
.num
;
821 int64_t a2d
= x
*a1
.den
+ a0
.den
;
823 if(a2n
> max
|| a2d
> max
) break;
826 a1
= (AVRational
){a2n
, a2d
};
830 assert(ff_gcd(a1
.num
, a1
.den
) == 1);
832 *dst_nom
= sign ?
-a1
.num
: a1
.num
;
838 int64_t av_rescale_rnd(int64_t a
, int64_t b
, int64_t c
, enum AVRounding rnd
){
843 assert(rnd
>=0 && rnd
<=5 && rnd
!=4);
845 if(a
<0) return -av_rescale_rnd(-a
, b
, c
, rnd
^ ((rnd
>>1)&1));
847 if(rnd
==AV_ROUND_NEAR_INF
) r
= c
/2;
848 else if(rnd
&1) r
= c
-1;
850 if(b
<=INT_MAX
&& c
<=INT_MAX
){
852 return (a
* b
+ r
)/c
;
854 return a
/c
*b
+ (a
%c
*b
+ r
)/c
;
857 ai
= av_mul_i(av_int2i(a
), av_int2i(b
));
858 ai
= av_add_i(ai
, av_int2i(r
));
860 return av_i2int(av_div_i(ai
, av_int2i(c
)));
863 int64_t av_rescale(int64_t a
, int64_t b
, int64_t c
){
864 return av_rescale_rnd(a
, b
, c
, AV_ROUND_NEAR_INF
);
869 static int av_log_level
= AV_LOG_DEBUG
;
871 static void av_log_default_callback(void* ptr
, int level
, const char* fmt
, va_list vl
)
873 static int print_prefix
=1;
874 AVClass
* avc
= ptr ?
*(AVClass
**)ptr
: NULL
;
875 if(level
>av_log_level
)
878 if(print_prefix
&& avc
) {
879 fprintf(stderr
, "[%s @ %p]", avc
->item_name(ptr
), avc
);
881 #define fprintf please_use_av_log
883 print_prefix
= strstr(fmt
, "\n") != NULL
;
885 vfprintf(stderr
, fmt
, vl
);
888 static void (*av_log_callback
)(void*, int, const char*, va_list) = av_log_default_callback
;
890 void av_log(void* avcl
, int level
, const char *fmt
, ...)
894 av_vlog(avcl
, level
, fmt
, vl
);
898 void av_vlog(void* avcl
, int level
, const char *fmt
, va_list vl
)
900 av_log_callback(avcl
, level
, fmt
, vl
);
903 int av_log_get_level(void)
908 void av_log_set_level(int level
)
910 av_log_level
= level
;
913 void av_log_set_callback(void (*callback
)(void*, int, const char*, va_list))
915 av_log_callback
= callback
;
918 #if !defined(HAVE_PTHREADS) && !defined(HAVE_W32THREADS)
919 int avcodec_thread_init(AVCodecContext
*s
, int thread_count
){