3 * Copyright (c) 2001 Fabrice Bellard.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 #include "mpegvideo.h"
29 void *av_mallocz(unsigned int size
)
33 ptr
= av_malloc(size
);
40 char *av_strdup(const char *s
)
53 * realloc which does nothing if the block is large enough
55 void *av_fast_realloc(void *ptr
, unsigned int *size
, unsigned int min_size
)
60 *size
= min_size
+ 10*1024;
62 return av_realloc(ptr
, *size
);
66 /* allocation of static arrays - do not use for normal allocation */
67 static unsigned int last_static
= 0;
68 static char*** array_static
= NULL
;
69 static const unsigned int grow_static
= 64; // ^2
70 void *__av_mallocz_static(void** location
, unsigned int size
)
72 unsigned int l
= (last_static
+ grow_static
) & ~(grow_static
- 1);
73 void *ptr
= av_mallocz(size
);
80 array_static
= av_realloc(array_static
, l
);
81 array_static
[last_static
++] = (char**) location
;
86 /* free all static arrays and reset pointers to 0 */
87 void av_free_static(void)
92 for (i
= 0; i
< last_static
; i
++)
94 av_free(*array_static
[i
]);
95 *array_static
[i
] = NULL
;
97 av_free(array_static
);
103 /* cannot call it directly because of 'void **' casting is not automatic */
104 void __av_freep(void **ptr
)
110 /* encoder management */
111 AVCodec
*first_avcodec
;
113 void register_avcodec(AVCodec
*format
)
117 while (*p
!= NULL
) p
= &(*p
)->next
;
122 typedef struct InternalBuffer
{
128 #define INTERNAL_BUFFER_SIZE 32
130 #define ALIGN(x, a) (((x)+(a)-1)&~((a)-1))
132 void avcodec_align_dimensions(AVCodecContext
*s
, int *width
, int *height
){
137 case PIX_FMT_YUV420P
:
139 case PIX_FMT_YUV422P
:
140 case PIX_FMT_YUV444P
:
142 case PIX_FMT_YUVJ420P
:
143 case PIX_FMT_YUVJ422P
:
144 case PIX_FMT_YUVJ444P
:
145 w_align
= 16; //FIXME check for non mpeg style codecs and use less alignment
148 case PIX_FMT_YUV411P
:
152 case PIX_FMT_YUV410P
:
153 if(s
->codec_id
== CODEC_ID_SVQ1
){
164 *width
= ALIGN(*width
, w_align
);
165 *height
= ALIGN(*height
, h_align
);
168 int avcodec_default_get_buffer(AVCodecContext
*s
, AVFrame
*pic
){
174 assert(pic
->data
[0]==NULL
);
175 assert(INTERNAL_BUFFER_SIZE
> s
->internal_buffer_count
);
177 if(s
->internal_buffer
==NULL
){
178 s
->internal_buffer
= av_mallocz(INTERNAL_BUFFER_SIZE
*sizeof(InternalBuffer
));
181 s
->internal_buffer
= av_fast_realloc(
183 &s
->internal_buffer_size
,
184 sizeof(InternalBuffer
)*FFMAX(99, s
->internal_buffer_count
+1)/*FIXME*/
188 buf
= &((InternalBuffer
*)s
->internal_buffer
)[s
->internal_buffer_count
];
191 pic
->age
= pic
->coded_picture_number
- buf
->last_pic_num
;
192 buf
->last_pic_num
= pic
->coded_picture_number
;
194 int h_chroma_shift
, v_chroma_shift
;
195 int s_align
, pixel_size
;
197 avcodec_get_chroma_sub_sample(s
->pix_fmt
, &h_chroma_shift
, &v_chroma_shift
);
216 avcodec_align_dimensions(s
, &w
, &h
);
217 #if defined(ARCH_POWERPC) || defined(HAVE_MMI) //FIXME some cleaner check
223 if(!(s
->flags
&CODEC_FLAG_EMU_EDGE
)){
228 buf
->last_pic_num
= -256*256*256*64;
231 const int h_shift
= i
==0 ?
0 : h_chroma_shift
;
232 const int v_shift
= i
==0 ?
0 : v_chroma_shift
;
234 pic
->linesize
[i
]= ALIGN(pixel_size
*w
>>h_shift
, s_align
);
236 buf
->base
[i
]= av_mallocz((pic
->linesize
[i
]*h
>>v_shift
)+16); //FIXME 16
237 if(buf
->base
[i
]==NULL
) return -1;
238 memset(buf
->base
[i
], 128, pic
->linesize
[i
]*h
>>v_shift
);
240 if(s
->flags
&CODEC_FLAG_EMU_EDGE
)
241 buf
->data
[i
] = buf
->base
[i
];
243 buf
->data
[i
] = buf
->base
[i
] + ALIGN((pic
->linesize
[i
]*EDGE_WIDTH
>>v_shift
) + (EDGE_WIDTH
>>h_shift
), s_align
);
245 pic
->age
= 256*256*256*64;
246 pic
->type
= FF_BUFFER_TYPE_INTERNAL
;
250 pic
->base
[i
]= buf
->base
[i
];
251 pic
->data
[i
]= buf
->data
[i
];
253 s
->internal_buffer_count
++;
258 void avcodec_default_release_buffer(AVCodecContext
*s
, AVFrame
*pic
){
260 InternalBuffer
*buf
, *last
, temp
;
262 assert(pic
->type
==FF_BUFFER_TYPE_INTERNAL
);
263 assert(s
->internal_buffer_count
);
265 buf
= NULL
; /* avoids warning */
266 for(i
=0; i
<s
->internal_buffer_count
; i
++){ //just 3-5 checks so is not worth to optimize
267 buf
= &((InternalBuffer
*)s
->internal_buffer
)[i
];
268 if(buf
->data
[0] == pic
->data
[0])
271 assert(i
< s
->internal_buffer_count
);
272 s
->internal_buffer_count
--;
273 last
= &((InternalBuffer
*)s
->internal_buffer
)[s
->internal_buffer_count
];
281 // pic->base[i]=NULL;
283 //printf("R%X\n", pic->opaque);
286 enum PixelFormat
avcodec_default_get_format(struct AVCodecContext
*s
, enum PixelFormat
* fmt
){
290 void avcodec_get_context_defaults(AVCodecContext
*s
){
291 s
->bit_rate
= 800*1000;
292 s
->bit_rate_tolerance
= s
->bit_rate
*10;
297 s
->rc_eq
= "tex^qComp";
300 s
->b_quant_factor
=1.25;
301 s
->b_quant_offset
=1.25;
302 s
->i_quant_factor
=-0.8;
303 s
->i_quant_offset
=0.0;
304 s
->error_concealment
= 3;
305 s
->error_resilience
= 1;
306 s
->workaround_bugs
= FF_BUG_AUTODETECT
;
307 s
->frame_rate_base
= 1;
310 s
->me_method
= ME_EPZS
;
311 s
->get_buffer
= avcodec_default_get_buffer
;
312 s
->release_buffer
= avcodec_default_release_buffer
;
313 s
->get_format
= avcodec_default_get_format
;
314 s
->me_subpel_quality
=8;
315 s
->lmin
= FF_QP2LAMBDA
* s
->qmin
;
316 s
->lmax
= FF_QP2LAMBDA
* s
->qmax
;
318 s
->intra_quant_bias
= FF_DEFAULT_QUANT_BIAS
;
319 s
->inter_quant_bias
= FF_DEFAULT_QUANT_BIAS
;
323 * allocates a AVCodecContext and set it to defaults.
324 * this can be deallocated by simply calling free()
326 AVCodecContext
*avcodec_alloc_context(void){
327 AVCodecContext
*avctx
= av_mallocz(sizeof(AVCodecContext
));
329 if(avctx
==NULL
) return NULL
;
331 avcodec_get_context_defaults(avctx
);
337 * allocates a AVPFrame and set it to defaults.
338 * this can be deallocated by simply calling free()
340 AVFrame
*avcodec_alloc_frame(void){
341 AVFrame
*pic
= av_mallocz(sizeof(AVFrame
));
346 int avcodec_open(AVCodecContext
*avctx
, AVCodec
*codec
)
353 avctx
->codec
= codec
;
354 avctx
->codec_id
= codec
->id
;
355 avctx
->frame_number
= 0;
356 if (codec
->priv_data_size
> 0) {
357 avctx
->priv_data
= av_mallocz(codec
->priv_data_size
);
358 if (!avctx
->priv_data
)
361 avctx
->priv_data
= NULL
;
363 ret
= avctx
->codec
->init(avctx
);
365 av_freep(&avctx
->priv_data
);
371 int avcodec_encode_audio(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
372 const short *samples
)
376 ret
= avctx
->codec
->encode(avctx
, buf
, buf_size
, (void *)samples
);
377 avctx
->frame_number
++;
381 int avcodec_encode_video(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
386 ret
= avctx
->codec
->encode(avctx
, buf
, buf_size
, (void *)pict
);
388 emms_c(); //needed to avoid a emms_c() call before every return;
390 avctx
->frame_number
++;
396 * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes
397 * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end
398 * @param buf_size the size of the buffer in bytes
399 * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero
400 * @return -1 if error, otherwise return the number of
403 int avcodec_decode_video(AVCodecContext
*avctx
, AVFrame
*picture
,
404 int *got_picture_ptr
,
405 uint8_t *buf
, int buf_size
)
409 ret
= avctx
->codec
->decode(avctx
, picture
, got_picture_ptr
,
412 emms_c(); //needed to avoid a emms_c() call before every return;
414 if (*got_picture_ptr
)
415 avctx
->frame_number
++;
419 /* decode an audio frame. return -1 if error, otherwise return the
420 *number of bytes used. If no frame could be decompressed,
421 *frame_size_ptr is zero. Otherwise, it is the decompressed frame
423 int avcodec_decode_audio(AVCodecContext
*avctx
, int16_t *samples
,
425 uint8_t *buf
, int buf_size
)
429 ret
= avctx
->codec
->decode(avctx
, samples
, frame_size_ptr
,
431 avctx
->frame_number
++;
435 int avcodec_close(AVCodecContext
*avctx
)
437 if (avctx
->codec
->close
)
438 avctx
->codec
->close(avctx
);
439 av_freep(&avctx
->priv_data
);
444 AVCodec
*avcodec_find_encoder(enum CodecID id
)
449 if (p
->encode
!= NULL
&& p
->id
== id
)
456 AVCodec
*avcodec_find_encoder_by_name(const char *name
)
461 if (p
->encode
!= NULL
&& strcmp(name
,p
->name
) == 0)
468 AVCodec
*avcodec_find_decoder(enum CodecID id
)
473 if (p
->decode
!= NULL
&& p
->id
== id
)
480 AVCodec
*avcodec_find_decoder_by_name(const char *name
)
485 if (p
->decode
!= NULL
&& strcmp(name
,p
->name
) == 0)
492 AVCodec
*avcodec_find(enum CodecID id
)
504 void avcodec_string(char *buf
, int buf_size
, AVCodecContext
*enc
, int encode
)
506 const char *codec_name
;
509 char channels_str
[100];
513 p
= avcodec_find_encoder(enc
->codec_id
);
515 p
= avcodec_find_decoder(enc
->codec_id
);
518 codec_name
= p
->name
;
519 if (!encode
&& enc
->codec_id
== CODEC_ID_MP3
) {
520 if (enc
->sub_id
== 2)
522 else if (enc
->sub_id
== 1)
525 } else if (enc
->codec_name
[0] != '\0') {
526 codec_name
= enc
->codec_name
;
528 /* output avi tags */
529 if (enc
->codec_type
== CODEC_TYPE_VIDEO
) {
530 snprintf(buf1
, sizeof(buf1
), "%c%c%c%c",
531 enc
->codec_tag
& 0xff,
532 (enc
->codec_tag
>> 8) & 0xff,
533 (enc
->codec_tag
>> 16) & 0xff,
534 (enc
->codec_tag
>> 24) & 0xff);
536 snprintf(buf1
, sizeof(buf1
), "0x%04x", enc
->codec_tag
);
541 switch(enc
->codec_type
) {
542 case CODEC_TYPE_VIDEO
:
543 snprintf(buf
, buf_size
,
545 codec_name
, enc
->mb_decision ?
" (hq)" : "");
546 if (enc
->codec_id
== CODEC_ID_RAWVIDEO
) {
547 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
549 avcodec_get_pix_fmt_name(enc
->pix_fmt
));
552 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
553 ", %dx%d, %0.2f fps",
554 enc
->width
, enc
->height
,
555 (float)enc
->frame_rate
/ enc
->frame_rate_base
);
558 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
559 ", q=%d-%d", enc
->qmin
, enc
->qmax
);
561 bitrate
= enc
->bit_rate
;
563 case CODEC_TYPE_AUDIO
:
564 snprintf(buf
, buf_size
,
567 switch (enc
->channels
) {
569 strcpy(channels_str
, "mono");
572 strcpy(channels_str
, "stereo");
575 strcpy(channels_str
, "5:1");
578 sprintf(channels_str
, "%d channels", enc
->channels
);
581 if (enc
->sample_rate
) {
582 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
588 /* for PCM codecs, compute bitrate directly */
589 switch(enc
->codec_id
) {
590 case CODEC_ID_PCM_S16LE
:
591 case CODEC_ID_PCM_S16BE
:
592 case CODEC_ID_PCM_U16LE
:
593 case CODEC_ID_PCM_U16BE
:
594 bitrate
= enc
->sample_rate
* enc
->channels
* 16;
596 case CODEC_ID_PCM_S8
:
597 case CODEC_ID_PCM_U8
:
598 case CODEC_ID_PCM_ALAW
:
599 case CODEC_ID_PCM_MULAW
:
600 bitrate
= enc
->sample_rate
* enc
->channels
* 8;
603 bitrate
= enc
->bit_rate
;
611 if (enc
->flags
& CODEC_FLAG_PASS1
)
612 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
614 if (enc
->flags
& CODEC_FLAG_PASS2
)
615 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
619 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
620 ", %d kb/s", bitrate
/ 1000);
624 unsigned avcodec_version( void )
626 return LIBAVCODEC_VERSION_INT
;
629 unsigned avcodec_build( void )
631 return LIBAVCODEC_BUILD
;
634 /* must be called before any other functions */
635 void avcodec_init(void)
637 static int inited
= 0;
643 dsputil_static_init();
647 * Flush buffers, should be called when seeking or when swicthing to a different stream.
649 void avcodec_flush_buffers(AVCodecContext
*avctx
)
651 if(avctx
->codec
->flush
)
652 avctx
->codec
->flush(avctx
);
655 void avcodec_default_free_buffers(AVCodecContext
*s
){
658 if(s
->internal_buffer
==NULL
) return;
660 for(i
=0; i
<INTERNAL_BUFFER_SIZE
; i
++){
661 InternalBuffer
*buf
= &((InternalBuffer
*)s
->internal_buffer
)[i
];
663 av_freep(&buf
->base
[j
]);
667 av_freep(&s
->internal_buffer
);
669 s
->internal_buffer_count
=0;
672 char av_get_pict_type_char(int pict_type
){
674 case I_TYPE
: return 'I';
675 case P_TYPE
: return 'P';
676 case B_TYPE
: return 'B';
677 case S_TYPE
: return 'S';
678 case SI_TYPE
:return 'i';
679 case SP_TYPE
:return 'p';
684 int av_reduce(int *dst_nom
, int *dst_den
, int64_t nom
, int64_t den
, int64_t max
){
700 for(;;){ //note is executed 1 or 2 times
701 gcd
= ff_gcd(nom
, den
);
705 larger
= FFMAX(nom
, den
);
708 int64_t div
= (larger
+ max
- 1) / max
;
709 nom
= (nom
+ div
/2)/div
;
710 den
= (den
+ div
/2)/div
;
724 int64_t av_rescale(int64_t a
, int b
, int c
){
729 if(a
<0) return -av_rescale(-a
, b
, c
);
732 if(h
==0) return a
*b
/c
;
740 return ((h
/c
)<<32) + l
/c
;