diff options
Diffstat (limited to 'libmpcodecs')
-rw-r--r-- | libmpcodecs/img_format.c | 118 | ||||
-rw-r--r-- | libmpcodecs/img_format.h | 3 | ||||
-rw-r--r-- | libmpcodecs/vf_dlopen.c | 7 |
3 files changed, 29 insertions, 99 deletions
diff --git a/libmpcodecs/img_format.c b/libmpcodecs/img_format.c index a56446f17f..7f82f95db2 100644 --- a/libmpcodecs/img_format.c +++ b/libmpcodecs/img_format.c @@ -25,95 +25,10 @@ const char *vo_format_name(int format) { + const char *name = mp_imgfmt_to_name(format); + if (name) + return name; static char unknown_format[20]; - switch(format) - { - case IMGFMT_RGB1: return "RGB 1-bit"; - case IMGFMT_RGB4: return "RGB 4-bit"; - case IMGFMT_RG4B: return "RGB 4-bit per byte"; - case IMGFMT_RGB8: return "RGB 8-bit"; - case IMGFMT_RGB12: return "RGB 12-bit"; - case IMGFMT_RGB15: return "RGB 15-bit"; - case IMGFMT_RGB16: return "RGB 16-bit"; - case IMGFMT_RGB24: return "RGB 24-bit"; -// case IMGFMT_RGB32: return "RGB 32-bit"; - case IMGFMT_RGB48LE: return "RGB 48-bit LE"; - case IMGFMT_RGB48BE: return "RGB 48-bit BE"; - case IMGFMT_BGR1: return "BGR 1-bit"; - case IMGFMT_BGR4: return "BGR 4-bit"; - case IMGFMT_BG4B: return "BGR 4-bit per byte"; - case IMGFMT_BGR8: return "BGR 8-bit"; - case IMGFMT_BGR12: return "BGR 12-bit"; - case IMGFMT_BGR15: return "BGR 15-bit"; - case IMGFMT_BGR16: return "BGR 16-bit"; - case IMGFMT_BGR24: return "BGR 24-bit"; -// case IMGFMT_BGR32: return "BGR 32-bit"; - case IMGFMT_ABGR: return "ABGR"; - case IMGFMT_BGRA: return "BGRA"; - case IMGFMT_ARGB: return "ARGB"; - case IMGFMT_RGBA: return "RGBA"; - case IMGFMT_GBRP: return "Planar GBR 24-bit"; - case IMGFMT_YVU9: return "Planar YVU9"; - case IMGFMT_IF09: return "Planar IF09"; - case IMGFMT_YV12: return "Planar YV12"; - case IMGFMT_I420: return "Planar I420"; - case IMGFMT_IYUV: return "Planar IYUV"; - case IMGFMT_CLPL: return "Planar CLPL"; - case IMGFMT_Y800: return "Planar Y800"; - case IMGFMT_Y8: return "Planar Y8"; - case IMGFMT_420P16_LE: return "Planar 420P 16-bit little-endian"; - case IMGFMT_420P16_BE: return "Planar 420P 16-bit big-endian"; - case IMGFMT_420P10_LE: return "Planar 420P 10-bit little-endian"; - case IMGFMT_420P10_BE: return "Planar 420P 10-bit big-endian"; - case IMGFMT_420P9_LE: return "Planar 420P 9-bit little-endian"; - case IMGFMT_420P9_BE: return "Planar 420P 9-bit big-endian"; - case IMGFMT_422P16_LE: return "Planar 422P 16-bit little-endian"; - case IMGFMT_422P16_BE: return "Planar 422P 16-bit big-endian"; - case IMGFMT_422P10_LE: return "Planar 422P 10-bit little-endian"; - case IMGFMT_422P10_BE: return "Planar 422P 10-bit big-endian"; - case IMGFMT_422P9_LE: return "Planar 422P 9-bit little-endian"; - case IMGFMT_422P9_BE: return "Planar 422P 9-bit big-endian"; - case IMGFMT_444P16_LE: return "Planar 444P 16-bit little-endian"; - case IMGFMT_444P16_BE: return "Planar 444P 16-bit big-endian"; - case IMGFMT_444P10_LE: return "Planar 444P 10-bit little-endian"; - case IMGFMT_444P10_BE: return "Planar 444P 10-bit big-endian"; - case IMGFMT_444P9_LE: return "Planar 444P 9-bit little-endian"; - case IMGFMT_444P9_BE: return "Planar 444P 9-bit big-endian"; - case IMGFMT_420A: return "Planar 420P with alpha"; - case IMGFMT_444P: return "Planar 444P"; - case IMGFMT_422P: return "Planar 422P"; - case IMGFMT_411P: return "Planar 411P"; - case IMGFMT_NV12: return "Planar NV12"; - case IMGFMT_NV21: return "Planar NV21"; - case IMGFMT_HM12: return "Planar NV12 Macroblock"; - case IMGFMT_IUYV: return "Packed IUYV"; - case IMGFMT_IY41: return "Packed IY41"; - case IMGFMT_IYU1: return "Packed IYU1"; - case IMGFMT_IYU2: return "Packed IYU2"; - case IMGFMT_UYVY: return "Packed UYVY"; - case IMGFMT_UYNV: return "Packed UYNV"; - case IMGFMT_cyuv: return "Packed CYUV"; - case IMGFMT_Y422: return "Packed Y422"; - case IMGFMT_YUY2: return "Packed YUY2"; - case IMGFMT_YUNV: return "Packed YUNV"; - case IMGFMT_YVYU: return "Packed YVYU"; - case IMGFMT_Y41P: return "Packed Y41P"; - case IMGFMT_Y211: return "Packed Y211"; - case IMGFMT_Y41T: return "Packed Y41T"; - case IMGFMT_Y42T: return "Packed Y42T"; - case IMGFMT_V422: return "Packed V422"; - case IMGFMT_V655: return "Packed V655"; - case IMGFMT_CLJR: return "Packed CLJR"; - case IMGFMT_YUVP: return "Packed YUVP"; - case IMGFMT_UYVP: return "Packed UYVP"; - case IMGFMT_MPEGPES: return "Mpeg PES"; - case IMGFMT_VDPAU_MPEG1: return "MPEG1 VDPAU acceleration"; - case IMGFMT_VDPAU_MPEG2: return "MPEG2 VDPAU acceleration"; - case IMGFMT_VDPAU_H264: return "H.264 VDPAU acceleration"; - case IMGFMT_VDPAU_MPEG4: return "MPEG-4 Part 2 VDPAU acceleration"; - case IMGFMT_VDPAU_WMV3: return "WMV3 VDPAU acceleration"; - case IMGFMT_VDPAU_VC1: return "VC1 VDPAU acceleration"; - } snprintf(unknown_format, 20, "Unknown 0x%04x", format); return unknown_format; } @@ -279,17 +194,30 @@ struct mp_imgfmt_entry mp_imgfmt_list[] = { {"gbrp", IMGFMT_GBRP}, {"mjpeg", IMGFMT_MJPEG}, {"mjpg", IMGFMT_MJPEG}, - { NULL, 0 } + {"mpes", IMGFMT_MPEGPES}, + {"vdpau_h264", IMGFMT_VDPAU_H264}, + {"vdpau_mpeg1", IMGFMT_VDPAU_MPEG1}, + {"vdpau_mpeg2", IMGFMT_VDPAU_MPEG2}, + {"vdpau_mpeg4", IMGFMT_VDPAU_MPEG4}, + {"vdpau_wmv3", IMGFMT_VDPAU_WMV3}, + {"vdpau_vc1", IMGFMT_VDPAU_VC1}, + {0} }; -unsigned int mp_imgfmt_from_name(const char *name) +unsigned int mp_imgfmt_from_name(bstr name, bool allow_hwaccel) { - struct mp_imgfmt_entry *p = mp_imgfmt_list; - if (!name) - return 0; - for(; p->name; ++p) { - if(!strcmp(name, p->name)) + if (bstr_startswith0(name, "0x")) { + bstr rest; + unsigned int fmt = bstrtoll(name, &rest, 16); + if (rest.len == 0) + return fmt; + } + for(struct mp_imgfmt_entry *p = mp_imgfmt_list; p->name; ++p) { + if(!bstrcasecmp0(name, p->name)) { + if (!allow_hwaccel && IMGFMT_IS_HWACCEL(p->fmt)) + return 0; return p->fmt; + } } return 0; } diff --git a/libmpcodecs/img_format.h b/libmpcodecs/img_format.h index e62ecc4dc1..42e601a270 100644 --- a/libmpcodecs/img_format.h +++ b/libmpcodecs/img_format.h @@ -21,6 +21,7 @@ #include <sys/types.h> #include "config.h" +#include "bstr.h" /* RGB/BGR Formats */ @@ -235,7 +236,7 @@ struct mp_imgfmt_entry { extern struct mp_imgfmt_entry mp_imgfmt_list[]; -unsigned int mp_imgfmt_from_name(const char *name); +unsigned int mp_imgfmt_from_name(bstr name, bool allow_hwaccel); const char *mp_imgfmt_to_name(unsigned int fmt); #endif /* MPLAYER_IMG_FORMAT_H */ diff --git a/libmpcodecs/vf_dlopen.c b/libmpcodecs/vf_dlopen.c index 1468a05998..dc55b50d52 100644 --- a/libmpcodecs/vf_dlopen.c +++ b/libmpcodecs/vf_dlopen.c @@ -112,7 +112,8 @@ static int config(struct vf_instance *vf, } if (vf->priv->filter.out_fmt) - vf->priv->outfmt = mp_imgfmt_from_name(vf->priv->filter.out_fmt); + vf->priv->outfmt = mp_imgfmt_from_name(bstr0(vf->priv->filter.out_fmt), + false); else { struct vf_dlopen_formatpair *p = vf->priv->filter.format_mapping; vf->priv->outfmt = 0; @@ -120,7 +121,7 @@ static int config(struct vf_instance *vf, for (; p->from; ++p) { // TODO support pixel format classes in matching if (!strcmp(p->from, vf->priv->filter.in_fmt)) { - vf->priv->outfmt = p->to ? mp_imgfmt_from_name(p->to) : fmt; + vf->priv->outfmt = mp_imgfmt_from_name(bstr0(p->to), false); break; } } @@ -261,7 +262,7 @@ static int query_format(struct vf_instance *vf, unsigned int fmt) for (; p->from; ++p) { // TODO support pixel format classes in matching if (!strcmp(p->from, fmtname)) { - outfmt = p->to ? mp_imgfmt_from_name(p->to) : fmt; + outfmt = mp_imgfmt_from_name(bstr0(p->to), false); break; } } |