Index: patched-ffmpeg-mt/libavcodec/imgconvert.c |
=================================================================== |
--- patched-ffmpeg-mt/libavcodec/imgconvert.c (revision 41250) |
+++ patched-ffmpeg-mt/libavcodec/imgconvert.c (working copy) |
@@ -33,6 +33,8 @@ |
#include "avcodec.h" |
#include "dsputil.h" |
#include "colorspace.h" |
+#include "internal.h" |
+#include "imgconvert.h" |
#include "libavutil/pixdesc.h" |
#if HAVE_MMX |
@@ -238,6 +240,18 @@ |
.pixel_type = FF_PIXEL_PACKED, |
.depth = 5, |
}, |
+ [PIX_FMT_RGB444BE] = { |
+ .nb_channels = 3, |
+ .color_type = FF_COLOR_RGB, |
+ .pixel_type = FF_PIXEL_PACKED, |
+ .depth = 4, |
+ }, |
+ [PIX_FMT_RGB444LE] = { |
+ .nb_channels = 3, |
+ .color_type = FF_COLOR_RGB, |
+ .pixel_type = FF_PIXEL_PACKED, |
+ .depth = 4, |
+ }, |
/* gray / mono formats */ |
[PIX_FMT_GRAY16BE] = { |
@@ -314,6 +328,18 @@ |
.pixel_type = FF_PIXEL_PACKED, |
.depth = 5, |
}, |
+ [PIX_FMT_BGR444BE] = { |
+ .nb_channels = 3, |
+ .color_type = FF_COLOR_RGB, |
+ .pixel_type = FF_PIXEL_PACKED, |
+ .depth = 4, |
+ }, |
+ [PIX_FMT_BGR444LE] = { |
+ .nb_channels = 3, |
+ .color_type = FF_COLOR_RGB, |
+ .pixel_type = FF_PIXEL_PACKED, |
+ .depth = 4, |
+ }, |
[PIX_FMT_RGB8] = { |
.nb_channels = 1, |
.color_type = FF_COLOR_RGB, |
@@ -527,10 +553,14 @@ |
break; |
case PIX_FMT_GRAY16BE: |
case PIX_FMT_GRAY16LE: |
+ case PIX_FMT_BGR444BE: |
+ case PIX_FMT_BGR444LE: |
case PIX_FMT_BGR555BE: |
case PIX_FMT_BGR555LE: |
case PIX_FMT_BGR565BE: |
case PIX_FMT_BGR565LE: |
+ case PIX_FMT_RGB444BE: |
+ case PIX_FMT_RGB444LE: |
case PIX_FMT_RGB555BE: |
case PIX_FMT_RGB555LE: |
case PIX_FMT_RGB565BE: |
@@ -624,10 +654,14 @@ |
case PIX_FMT_RGB48LE: |
case PIX_FMT_GRAY16BE: |
case PIX_FMT_GRAY16LE: |
+ case PIX_FMT_BGR444BE: |
+ case PIX_FMT_BGR444LE: |
case PIX_FMT_BGR555BE: |
case PIX_FMT_BGR555LE: |
case PIX_FMT_BGR565BE: |
case PIX_FMT_BGR565LE: |
+ case PIX_FMT_RGB444BE: |
+ case PIX_FMT_RGB444LE: |
case PIX_FMT_RGB555BE: |
case PIX_FMT_RGB555LE: |
case PIX_FMT_RGB565BE: |
@@ -697,10 +731,14 @@ |
pix_fmt == PIX_FMT_BGR565LE || |
pix_fmt == PIX_FMT_BGR555BE || |
pix_fmt == PIX_FMT_BGR555LE || |
+ pix_fmt == PIX_FMT_BGR444BE || |
+ pix_fmt == PIX_FMT_BGR444LE || |
pix_fmt == PIX_FMT_RGB565BE || |
pix_fmt == PIX_FMT_RGB565LE || |
pix_fmt == PIX_FMT_RGB555BE || |
- pix_fmt == PIX_FMT_RGB555LE) |
+ pix_fmt == PIX_FMT_RGB555LE || |
+ pix_fmt == PIX_FMT_RGB444BE || |
+ pix_fmt == PIX_FMT_RGB444LE) |
w = width * 2; |
else if (pix_fmt == PIX_FMT_UYYVYY411) |
w = width + width/2; |
@@ -722,8 +760,8 @@ |
for (i=0; i<data_planes; i++) { |
if (i == 1) { |
- w = ((width >> desc->log2_chroma_w) * pf->depth + 7) / 8; |
- h = height >> desc->log2_chroma_h; |
+ w = (- ((-width) >> desc->log2_chroma_w) * pf->depth + 7) / 8; |
+ h = -((-height) >> desc->log2_chroma_h); |
if (pix_fmt == PIX_FMT_NV12 || pix_fmt == PIX_FMT_NV21) |
w <<= 1; |
} else if (i == 3) { |
@@ -775,8 +813,10 @@ |
loss = 0; |
pf = &pix_fmt_info[dst_pix_fmt]; |
if (pf->depth < ps->depth || |
- ((dst_pix_fmt == PIX_FMT_RGB555BE || dst_pix_fmt == PIX_FMT_RGB555LE) && |
- (src_pix_fmt == PIX_FMT_RGB565BE || src_pix_fmt == PIX_FMT_RGB565LE))) |
+ ((dst_pix_fmt == PIX_FMT_RGB555BE || dst_pix_fmt == PIX_FMT_RGB555LE || |
+ dst_pix_fmt == PIX_FMT_BGR555BE || dst_pix_fmt == PIX_FMT_BGR555LE) && |
+ (src_pix_fmt == PIX_FMT_RGB565BE || src_pix_fmt == PIX_FMT_RGB565LE || |
+ src_pix_fmt == PIX_FMT_BGR565BE || src_pix_fmt == PIX_FMT_BGR565LE))) |
loss |= FF_LOSS_DEPTH; |
if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w || |
dst_desc->log2_chroma_h > src_desc->log2_chroma_h) |
@@ -834,10 +874,14 @@ |
case PIX_FMT_RGB565LE: |
case PIX_FMT_RGB555BE: |
case PIX_FMT_RGB555LE: |
+ case PIX_FMT_RGB444BE: |
+ case PIX_FMT_RGB444LE: |
case PIX_FMT_BGR565BE: |
case PIX_FMT_BGR565LE: |
case PIX_FMT_BGR555BE: |
case PIX_FMT_BGR555LE: |
+ case PIX_FMT_BGR444BE: |
+ case PIX_FMT_BGR444LE: |
bits = 16; |
break; |
case PIX_FMT_UYYVYY411: |
@@ -954,10 +998,14 @@ |
case PIX_FMT_RGB565LE: |
case PIX_FMT_RGB555BE: |
case PIX_FMT_RGB555LE: |
+ case PIX_FMT_RGB444BE: |
+ case PIX_FMT_RGB444LE: |
case PIX_FMT_BGR565BE: |
case PIX_FMT_BGR565LE: |
case PIX_FMT_BGR555BE: |
case PIX_FMT_BGR555LE: |
+ case PIX_FMT_BGR444BE: |
+ case PIX_FMT_BGR444LE: |
bits = 16; |
break; |
case PIX_FMT_UYYVYY411: |