diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2001-08-11 19:04:31 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2001-08-11 19:04:31 +0000 |
commit | cf0875950d75da6b5cb4ffea6ff2f4220db7e229 (patch) | |
tree | 4f19195dec34f2f0b428a51394d6d41eb441a363 /libavcodec/utils.c | |
parent | 0ee50938f16af075a3d8dd04837d44c082d51cba (diff) | |
download | ffmpeg-cf0875950d75da6b5cb4ffea6ff2f4220db7e229.tar.gz |
picture utils
Originally committed as revision 72 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/utils.c')
-rw-r--r-- | libavcodec/utils.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 958f6d32db..b32bd18033 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) { |