summaryrefslogtreecommitdiffstats
path: root/video/img_format.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2012-12-24 01:10:57 +0100
committerwm4 <wm4@nowhere>2013-01-13 20:04:11 +0100
commit5830d639b8d58b0911510db1ccb5de296adfcb4b (patch)
tree750496d0c09dc293a2ba7a8589a7679535edfc35 /video/img_format.c
parent3791c226b7f3bebbb63a96b61db67b9dc97ff9b8 (diff)
downloadmpv-5830d639b8d58b0911510db1ccb5de296adfcb4b.tar.bz2
mpv-5830d639b8d58b0911510db1ccb5de296adfcb4b.tar.xz
video: remove img_format compat hacks
Remove the strange things the old mp_image_setfmt() code did to the image format parameters. This includes setting chroma shift to 31 for gray (Y8) formats and more. Y8 + vo_opengl_old didn't actually work for unknown reasons (regression in this branch). Fix this. The difference is that Y8 is now interpreted as gray RGB (LUMINANCE texture) instead of involving YUV (and levels) conversion. Get rid of distinguishing RGB and BGR. There wasn't really any good reason for this. Remove mp_get_chroma_shift() and IMGFMT_IS_YUVP16*(). mp_imgfmt_desc gives the same information and more.
Diffstat (limited to 'video/img_format.c')
-rw-r--r--video/img_format.c91
1 files changed, 3 insertions, 88 deletions
diff --git a/video/img_format.c b/video/img_format.c
index 4fd2897735..8a286be9fc 100644
--- a/video/img_format.c
+++ b/video/img_format.c
@@ -98,22 +98,6 @@ struct mp_imgfmt_entry mp_imgfmt_list[] = {
{0}
};
-int mp_get_chroma_shift(int format, int *x_shift, int *y_shift,
- int *component_bits)
-{
- struct mp_imgfmt_desc fmt = mp_imgfmt_get_desc(format);
- if (fmt.id && (fmt.flags & MP_IMGFLAG_YUV_P)) {
- if (x_shift)
- *x_shift = fmt.xs[1];
- if (y_shift)
- *y_shift = fmt.ys[1];
- if (component_bits)
- *component_bits = fmt.plane_bits;
- return fmt.avg_bpp;
- }
- return 0;
-}
-
unsigned int mp_imgfmt_from_name(bstr name, bool allow_hwaccel)
{
for(struct mp_imgfmt_entry *p = mp_imgfmt_list; p->name; ++p) {
@@ -136,21 +120,6 @@ const char *mp_imgfmt_to_name(unsigned int fmt)
return NULL;
}
-static int comp_bit_order(const AVPixFmtDescriptor *pd, int bpp, int c)
-{
- int el_size = (pd->flags & PIX_FMT_BITSTREAM) ? 1 : 8;
- // NOTE: offset_plus1 can be 0
- int offset = (((int)pd->comp[c].offset_plus1) - 1) * el_size;
- int read_depth = pd->comp[c].shift + pd->comp[c].depth_minus1 + 1;
- if (read_depth <= 8 && !(pd->flags & PIX_FMT_BITSTREAM))
- offset += 8 * !!(pd->flags & PIX_FMT_BE);
- offset += pd->comp[c].shift;
- // revert ffmpeg's bullshit hack that mixes byte and bit access
- if ((pd->flags & PIX_FMT_BE) && bpp <= 16 && read_depth <= 8)
- offset = (8 + offset) % 16;
- return offset;
-}
-
static struct mp_imgfmt_desc get_avutil_fmt(enum PixelFormat fmt)
{
const AVPixFmtDescriptor *pd = &av_pix_fmt_descriptors[fmt];
@@ -201,11 +170,12 @@ static struct mp_imgfmt_desc get_avutil_fmt(enum PixelFormat fmt)
desc.plane_bits = planedepth[0];
- if (!(pd->flags & PIX_FMT_RGB) && !(pd->flags & PIX_FMT_HWACCEL) &&
- fmt != PIX_FMT_MONOWHITE && fmt != PIX_FMT_MONOBLACK &&
+ if (!(pd->flags & PIX_FMT_RGB) && fmt != PIX_FMT_MONOBLACK &&
fmt != PIX_FMT_PAL8)
{
desc.flags |= MP_IMGFLAG_YUV;
+ } else {
+ desc.flags |= MP_IMGFLAG_RGB;
}
#ifdef PIX_FMT_ALPHA
@@ -229,61 +199,6 @@ static struct mp_imgfmt_desc get_avutil_fmt(enum PixelFormat fmt)
desc.flags |= MP_IMGFLAG_YUV_P;
}
- if ((pd->flags & PIX_FMT_RGB) && desc.num_planes == 1
- && pd->nb_components >= 3)
- {
- // RGB vs. BGR component order, as distinguished by mplayer:
- // - for byte accessed formats (RGB24, RGB48), the order of bytes
- // determines RGB/BGR (e.g. R is first byte -> RGB)
- // - for bit accessed formats (RGB32, RGB16, etc.), the order of bits
- // determines BGR/RGB (e.g. R is LSB -> RGB)
- // - formats like IMGFMT_RGBA are aliases to allow byte access to bit-
- // accessed formats (IMGFMT_RGBA is RGB32 on LE, BGR32|128 on BE)
- // (ffmpeg does it the other way around, and defines bit-access
- // aliases to byte-accessed formats)
- int b = desc.bpp[0];
- bool swap = comp_bit_order(pd, b, 0) > comp_bit_order(pd, b, 1);
- if ((desc.bpp[0] == 24 || desc.bpp[0] > 32) && BYTE_ORDER == BIG_ENDIAN)
- swap = !swap; // byte accessed
- if (swap)
- desc.flags |= MP_IMGFLAG_SWAPPED;
- }
-
- // compatibility with old mp_image_setfmt()
-
- switch (desc.id) {
- case IMGFMT_UYVY:
- desc.flags |= MP_IMGFLAG_SWAPPED; // for vf_mpi_clear()
- /* fallthrough */
- case IMGFMT_YUYV:
- desc.chroma_ys = 1; // ???
- break;
- case IMGFMT_Y8:
- case IMGFMT_Y16_LE:
- case IMGFMT_Y16_BE:
- // probably for vo_opengl, and possibly more code using Y8
- desc.chroma_xs = desc.chroma_ys = 31;
- break;
- case IMGFMT_NV12:
- desc.flags |= MP_IMGFLAG_SWAPPED; // completely pointless
- /* fallthrough */
- case IMGFMT_NV21:
- // some hack to make cropping code etc. work? (doesn't work anyway)
- desc.chroma_xs = 0;
- desc.chroma_ys = 1;
- break;
- case IMGFMT_RGB4:
- case IMGFMT_BGR4:
- desc.flags ^= MP_IMGFLAG_SWAPPED; // ???
- break;
- case IMGFMT_BGR0:
- desc.flags &= ~MP_IMGFLAG_SWAPPED; // not covered by IS_RGB/IS_BGR
- break;
- }
-
- if (pd->flags & PIX_FMT_HWACCEL)
- desc.chroma_xs = desc.chroma_ys = 0;
-
if (!(pd->flags & PIX_FMT_HWACCEL) && !(pd->flags & PIX_FMT_BITSTREAM)) {
desc.flags |= MP_IMGFLAG_BYTE_ALIGNED;
for (int p = 0; p < desc.num_planes; p++)