diff options
Diffstat (limited to 'src/libffmpeg/libavcodec/utils.c')
-rw-r--r-- | src/libffmpeg/libavcodec/utils.c | 101 |
1 files changed, 99 insertions, 2 deletions
diff --git a/src/libffmpeg/libavcodec/utils.c b/src/libffmpeg/libavcodec/utils.c index 958f6d32d..26510d87c 100644 --- a/src/libffmpeg/libavcodec/utils.c +++ b/src/libffmpeg/libavcodec/utils.c @@ -174,6 +174,15 @@ AVCodec *avcodec_find(enum CodecID id) return NULL; } +const char *pix_fmt_str[] = { + "yuv420p", + "yuv422", + "rgb24", + "bgr24", + "yuv422p", + "yuv444p", +}; + void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) { const char *codec_name; @@ -208,6 +217,11 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) snprintf(buf, buf_size, "Video: %s%s", codec_name, enc->flags & CODEC_FLAG_HQ ? " (hq)" : ""); + if (enc->codec_id == CODEC_ID_RAWVIDEO) { + snprintf(buf + strlen(buf), buf_size - strlen(buf), + ", %s", + pix_fmt_str[enc->pix_fmt]); + } if (enc->width) { snprintf(buf + strlen(buf), buf_size - strlen(buf), ", %dx%d, %0.2f fps", @@ -235,6 +249,89 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) } } +/* Picture field are filled with 'ptr' addresses */ +void avpicture_fill(AVPicture *picture, UINT8 *ptr, + int pix_fmt, int width, int height) +{ + int size; + + size = width * height; + switch(pix_fmt) { + case PIX_FMT_YUV420P: + picture->data[0] = ptr; + picture->data[1] = picture->data[0] + size; + picture->data[2] = picture->data[1] + size / 4; + picture->linesize[0] = width; + picture->linesize[1] = width / 2; + picture->linesize[2] = width / 2; + break; + case PIX_FMT_YUV422P: + picture->data[0] = ptr; + picture->data[1] = picture->data[0] + size; + picture->data[2] = picture->data[1] + size / 2; + picture->linesize[0] = width; + picture->linesize[1] = width / 2; + picture->linesize[2] = width / 2; + break; + case PIX_FMT_YUV444P: + picture->data[0] = ptr; + picture->data[1] = picture->data[0] + size; + picture->data[2] = picture->data[1] + size; + picture->linesize[0] = width; + picture->linesize[1] = width; + picture->linesize[2] = width; + break; + case PIX_FMT_RGB24: + case PIX_FMT_BGR24: + picture->data[0] = ptr; + picture->data[1] = NULL; + picture->data[2] = NULL; + picture->linesize[0] = width * 3; + break; + case PIX_FMT_YUV422: + picture->data[0] = ptr; + picture->data[1] = NULL; + picture->data[2] = NULL; + picture->linesize[0] = width * 2; + break; + default: + picture->data[0] = NULL; + picture->data[1] = NULL; + picture->data[2] = NULL; + break; + } +} + +int avpicture_get_size(int pix_fmt, int width, int height) +{ + int size; + + size = width * height; + switch(pix_fmt) { + case PIX_FMT_YUV420P: + size = (size * 3) / 2; + break; + case PIX_FMT_YUV422P: + size = (size * 2); + break; + case PIX_FMT_YUV444P: + size = (size * 3); + break; + case PIX_FMT_RGB24: + case PIX_FMT_BGR24: + size = (size * 3); + break; + case PIX_FMT_YUV422: + size = (size * 2); + break; + default: + size = -1; + break; + } + return size; +} + + /* must be called before any other functions */ void avcodec_init(void) { @@ -253,7 +350,7 @@ void avcodec_register_all(void) register_avcodec(&h263p_encoder); register_avcodec(&rv10_encoder); register_avcodec(&mjpeg_encoder); - register_avcodec(&opendivx_encoder); + register_avcodec(&mpeg4_encoder); register_avcodec(&msmpeg4_encoder); #endif /* CONFIG_ENCODERS */ register_avcodec(&pcm_codec); @@ -262,7 +359,7 @@ void avcodec_register_all(void) /* decoders */ #ifdef CONFIG_DECODERS register_avcodec(&h263_decoder); - register_avcodec(&opendivx_decoder); + register_avcodec(&mpeg4_decoder); register_avcodec(&msmpeg4_decoder); register_avcodec(&mpeg_decoder); register_avcodec(&h263i_decoder); |