From: Fabrice Bellard Date: Sat, 11 Aug 2001 19:04:31 +0000 (+0000) Subject: picture utils X-Git-Tag: v0.5~18383 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=cf0875950d75da6b5cb4ffea6ff2f4220db7e229;p=platform%2Fupstream%2Flibav.git picture utils Originally committed as revision 72 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 958f6d3..b32bd18 100644 --- a/libavcodec/utils.c +++ b/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) {