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
;
317 s
->sample_aspect_ratio
= (AVRational
){0,1};
319 s
->intra_quant_bias
= FF_DEFAULT_QUANT_BIAS
;
320 s
->inter_quant_bias
= FF_DEFAULT_QUANT_BIAS
;
324 * allocates a AVCodecContext and set it to defaults.
325 * this can be deallocated by simply calling free()
327 AVCodecContext
*avcodec_alloc_context(void){
328 AVCodecContext
*avctx
= av_mallocz(sizeof(AVCodecContext
));
330 if(avctx
==NULL
) return NULL
;
332 avcodec_get_context_defaults(avctx
);
338 * allocates a AVPFrame and set it to defaults.
339 * this can be deallocated by simply calling free()
341 AVFrame
*avcodec_alloc_frame(void){
342 AVFrame
*pic
= av_mallocz(sizeof(AVFrame
));
347 int avcodec_open(AVCodecContext
*avctx
, AVCodec
*codec
)
354 avctx
->codec
= codec
;
355 avctx
->codec_id
= codec
->id
;
356 avctx
->frame_number
= 0;
357 if (codec
->priv_data_size
> 0) {
358 avctx
->priv_data
= av_mallocz(codec
->priv_data_size
);
359 if (!avctx
->priv_data
)
362 avctx
->priv_data
= NULL
;
364 ret
= avctx
->codec
->init(avctx
);
366 av_freep(&avctx
->priv_data
);
372 int avcodec_encode_audio(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
373 const short *samples
)
377 ret
= avctx
->codec
->encode(avctx
, buf
, buf_size
, (void *)samples
);
378 avctx
->frame_number
++;
382 int avcodec_encode_video(AVCodecContext
*avctx
, uint8_t *buf
, int buf_size
,
387 ret
= avctx
->codec
->encode(avctx
, buf
, buf_size
, (void *)pict
);
389 emms_c(); //needed to avoid a emms_c() call before every return;
391 avctx
->frame_number
++;
397 * @param buf bitstream buffer, must be FF_INPUT_BUFFER_PADDING_SIZE larger then the actual read bytes
398 * because some optimized bitstream readers read 32 or 64 bit at once and could read over the end
399 * @param buf_size the size of the buffer in bytes
400 * @param got_picture_ptr zero if no frame could be decompressed, Otherwise, it is non zero
401 * @return -1 if error, otherwise return the number of
404 int avcodec_decode_video(AVCodecContext
*avctx
, AVFrame
*picture
,
405 int *got_picture_ptr
,
406 uint8_t *buf
, int buf_size
)
410 ret
= avctx
->codec
->decode(avctx
, picture
, got_picture_ptr
,
413 emms_c(); //needed to avoid a emms_c() call before every return;
415 if (*got_picture_ptr
)
416 avctx
->frame_number
++;
420 /* decode an audio frame. return -1 if error, otherwise return the
421 *number of bytes used. If no frame could be decompressed,
422 *frame_size_ptr is zero. Otherwise, it is the decompressed frame
424 int avcodec_decode_audio(AVCodecContext
*avctx
, int16_t *samples
,
426 uint8_t *buf
, int buf_size
)
430 ret
= avctx
->codec
->decode(avctx
, samples
, frame_size_ptr
,
432 avctx
->frame_number
++;
436 int avcodec_close(AVCodecContext
*avctx
)
438 if (avctx
->codec
->close
)
439 avctx
->codec
->close(avctx
);
440 av_freep(&avctx
->priv_data
);
445 AVCodec
*avcodec_find_encoder(enum CodecID id
)
450 if (p
->encode
!= NULL
&& p
->id
== id
)
457 AVCodec
*avcodec_find_encoder_by_name(const char *name
)
462 if (p
->encode
!= NULL
&& strcmp(name
,p
->name
) == 0)
469 AVCodec
*avcodec_find_decoder(enum CodecID id
)
474 if (p
->decode
!= NULL
&& p
->id
== id
)
481 AVCodec
*avcodec_find_decoder_by_name(const char *name
)
486 if (p
->decode
!= NULL
&& strcmp(name
,p
->name
) == 0)
493 AVCodec
*avcodec_find(enum CodecID id
)
505 void avcodec_string(char *buf
, int buf_size
, AVCodecContext
*enc
, int encode
)
507 const char *codec_name
;
510 char channels_str
[100];
514 p
= avcodec_find_encoder(enc
->codec_id
);
516 p
= avcodec_find_decoder(enc
->codec_id
);
519 codec_name
= p
->name
;
520 if (!encode
&& enc
->codec_id
== CODEC_ID_MP3
) {
521 if (enc
->sub_id
== 2)
523 else if (enc
->sub_id
== 1)
526 } else if (enc
->codec_name
[0] != '\0') {
527 codec_name
= enc
->codec_name
;
529 /* output avi tags */
530 if (enc
->codec_type
== CODEC_TYPE_VIDEO
) {
531 snprintf(buf1
, sizeof(buf1
), "%c%c%c%c",
532 enc
->codec_tag
& 0xff,
533 (enc
->codec_tag
>> 8) & 0xff,
534 (enc
->codec_tag
>> 16) & 0xff,
535 (enc
->codec_tag
>> 24) & 0xff);
537 snprintf(buf1
, sizeof(buf1
), "0x%04x", enc
->codec_tag
);
542 switch(enc
->codec_type
) {
543 case CODEC_TYPE_VIDEO
:
544 snprintf(buf
, buf_size
,
546 codec_name
, enc
->mb_decision ?
" (hq)" : "");
547 if (enc
->codec_id
== CODEC_ID_RAWVIDEO
) {
548 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
550 avcodec_get_pix_fmt_name(enc
->pix_fmt
));
553 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
554 ", %dx%d, %0.2f fps",
555 enc
->width
, enc
->height
,
556 (float)enc
->frame_rate
/ enc
->frame_rate_base
);
559 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
560 ", q=%d-%d", enc
->qmin
, enc
->qmax
);
562 bitrate
= enc
->bit_rate
;
564 case CODEC_TYPE_AUDIO
:
565 snprintf(buf
, buf_size
,
568 switch (enc
->channels
) {
570 strcpy(channels_str
, "mono");
573 strcpy(channels_str
, "stereo");
576 strcpy(channels_str
, "5:1");
579 sprintf(channels_str
, "%d channels", enc
->channels
);
582 if (enc
->sample_rate
) {
583 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
589 /* for PCM codecs, compute bitrate directly */
590 switch(enc
->codec_id
) {
591 case CODEC_ID_PCM_S16LE
:
592 case CODEC_ID_PCM_S16BE
:
593 case CODEC_ID_PCM_U16LE
:
594 case CODEC_ID_PCM_U16BE
:
595 bitrate
= enc
->sample_rate
* enc
->channels
* 16;
597 case CODEC_ID_PCM_S8
:
598 case CODEC_ID_PCM_U8
:
599 case CODEC_ID_PCM_ALAW
:
600 case CODEC_ID_PCM_MULAW
:
601 bitrate
= enc
->sample_rate
* enc
->channels
* 8;
604 bitrate
= enc
->bit_rate
;
612 if (enc
->flags
& CODEC_FLAG_PASS1
)
613 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
615 if (enc
->flags
& CODEC_FLAG_PASS2
)
616 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
620 snprintf(buf
+ strlen(buf
), buf_size
- strlen(buf
),
621 ", %d kb/s", bitrate
/ 1000);
625 unsigned avcodec_version( void )
627 return LIBAVCODEC_VERSION_INT
;
630 unsigned avcodec_build( void )
632 return LIBAVCODEC_BUILD
;
635 /* must be called before any other functions */
636 void avcodec_init(void)
638 static int inited
= 0;
644 dsputil_static_init();
648 * Flush buffers, should be called when seeking or when swicthing to a different stream.
650 void avcodec_flush_buffers(AVCodecContext
*avctx
)
652 if(avctx
->codec
->flush
)
653 avctx
->codec
->flush(avctx
);
656 void avcodec_default_free_buffers(AVCodecContext
*s
){
659 if(s
->internal_buffer
==NULL
) return;
661 for(i
=0; i
<INTERNAL_BUFFER_SIZE
; i
++){
662 InternalBuffer
*buf
= &((InternalBuffer
*)s
->internal_buffer
)[i
];
664 av_freep(&buf
->base
[j
]);
668 av_freep(&s
->internal_buffer
);
670 s
->internal_buffer_count
=0;
673 char av_get_pict_type_char(int pict_type
){
675 case I_TYPE
: return 'I';
676 case P_TYPE
: return 'P';
677 case B_TYPE
: return 'B';
678 case S_TYPE
: return 'S';
679 case SI_TYPE
:return 'i';
680 case SP_TYPE
:return 'p';
685 int av_reduce(int *dst_nom
, int *dst_den
, int64_t nom
, int64_t den
, int64_t max
){
701 for(;;){ //note is executed 1 or 2 times
702 gcd
= ff_gcd(nom
, den
);
706 larger
= FFMAX(nom
, den
);
709 int64_t div
= (larger
+ max
- 1) / max
;
710 nom
= (nom
+ div
/2)/div
;
711 den
= (den
+ div
/2)/div
;
725 int64_t av_rescale(int64_t a
, int b
, int c
){
730 if(a
<0) return -av_rescale(-a
, b
, c
);
733 if(h
==0) return a
*b
/c
;
741 return ((h
/c
)<<32) + l
/c
;