Mercurial > libavcodec.hg
changeset 5363:1a25f2f6316e libavcodec
add YUV440P and YUVJ440P support
patch by Andreas ªÓman: \andreas olebyn nu/
original thread: [FFmpeg-devel] half vertical chroma resolution from JPEGs..
date: 07/03/2007 01:29 PM
author | benoit |
---|---|
date | Wed, 18 Jul 2007 08:11:16 +0000 |
parents | e0b7c248c33e |
children | 50454f3b0e88 |
files | imgconvert.c mjpegdec.c |
diffstat | 2 files changed, 38 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/imgconvert.c Wed Jul 18 06:45:47 2007 +0000 +++ b/imgconvert.c Wed Jul 18 08:11:16 2007 +0000 @@ -120,6 +120,14 @@ .depth = 8, .x_chroma_shift = 2, .y_chroma_shift = 0, }, + [PIX_FMT_YUV440P] = { + .name = "yuv440p", + .nb_channels = 3, + .color_type = FF_COLOR_YUV, + .pixel_type = FF_PIXEL_PLANAR, + .depth = 8, + .x_chroma_shift = 0, .y_chroma_shift = 1, + }, /* JPEG YUV */ [PIX_FMT_YUVJ420P] = { @@ -146,6 +154,14 @@ .depth = 8, .x_chroma_shift = 0, .y_chroma_shift = 0, }, + [PIX_FMT_YUVJ440P] = { + .name = "yuvj440p", + .nb_channels = 3, + .color_type = FF_COLOR_YUV_JPEG, + .pixel_type = FF_PIXEL_PLANAR, + .depth = 8, + .x_chroma_shift = 0, .y_chroma_shift = 1, + }, /* RGB formats */ [PIX_FMT_RGB24] = { @@ -417,9 +433,11 @@ case PIX_FMT_YUV444P: case PIX_FMT_YUV410P: case PIX_FMT_YUV411P: + case PIX_FMT_YUV440P: case PIX_FMT_YUVJ420P: case PIX_FMT_YUVJ422P: case PIX_FMT_YUVJ444P: + case PIX_FMT_YUVJ440P: w2 = (width + (1 << pinfo->x_chroma_shift) - 1) >> pinfo->x_chroma_shift; h2 = (height + (1 << pinfo->y_chroma_shift) - 1) >> pinfo->y_chroma_shift; size2 = w2 * h2; @@ -1438,6 +1456,20 @@ } } +/* 1x1 -> 1x2 */ +static void grow12(uint8_t *dst, int dst_wrap, + const uint8_t *src, int src_wrap, + int width, int height) +{ + for(;height > 0; height-=2) { + memcpy(dst, src, width); + dst += dst_wrap; + memcpy(dst, src, width); + dst += dst_wrap; + src += src_wrap; + } +} + /* 1x1 -> 2x2 */ static void grow22(uint8_t *dst, int dst_wrap, const uint8_t *src, int src_wrap, @@ -2390,6 +2422,9 @@ case 0xf0: resize_func = grow21; break; + case 0x0f: + resize_func = grow12; + break; case 0xe0: resize_func = grow41; break;
--- a/mjpegdec.c Wed Jul 18 06:45:47 2007 +0000 +++ b/mjpegdec.c Wed Jul 18 08:11:16 2007 +0000 @@ -298,6 +298,9 @@ else s->avctx->pix_fmt = PIX_FMT_GRAY8; break; + case 0x121111: + s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV440P : PIX_FMT_YUVJ440P; + break; case 0x211111: case 0x221212: s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P;