2 * This file is part of MPlayer.
4 * MPlayer is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * MPlayer is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20 #include "libavutil/avutil.h"
21 #include "libmpcodecs/img_format.h"
22 #include "fmt-conversion.h"
26 enum PixelFormat pix_fmt
;
27 } conversion_map
[] = {
28 {IMGFMT_ARGB
, PIX_FMT_ARGB
},
29 {IMGFMT_BGRA
, PIX_FMT_BGRA
},
30 {IMGFMT_BGR24
, PIX_FMT_BGR24
},
31 {IMGFMT_BGR16BE
, PIX_FMT_RGB565BE
},
32 {IMGFMT_BGR16LE
, PIX_FMT_RGB565LE
},
33 {IMGFMT_BGR15BE
, PIX_FMT_RGB555BE
},
34 {IMGFMT_BGR15LE
, PIX_FMT_RGB555LE
},
35 {IMGFMT_BGR12BE
, PIX_FMT_RGB444BE
},
36 {IMGFMT_BGR12LE
, PIX_FMT_RGB444LE
},
37 {IMGFMT_BGR8
, PIX_FMT_RGB8
},
38 {IMGFMT_BGR4
, PIX_FMT_RGB4
},
39 {IMGFMT_BGR1
, PIX_FMT_MONOBLACK
},
40 {IMGFMT_RGB1
, PIX_FMT_MONOBLACK
},
41 {IMGFMT_RG4B
, PIX_FMT_BGR4_BYTE
},
42 {IMGFMT_BG4B
, PIX_FMT_RGB4_BYTE
},
43 {IMGFMT_RGB48LE
, PIX_FMT_RGB48LE
},
44 {IMGFMT_RGB48BE
, PIX_FMT_RGB48BE
},
45 {IMGFMT_ABGR
, PIX_FMT_ABGR
},
46 {IMGFMT_RGBA
, PIX_FMT_RGBA
},
47 {IMGFMT_RGB24
, PIX_FMT_RGB24
},
48 {IMGFMT_RGB16BE
, PIX_FMT_BGR565BE
},
49 {IMGFMT_RGB16LE
, PIX_FMT_BGR565LE
},
50 {IMGFMT_RGB15BE
, PIX_FMT_BGR555BE
},
51 {IMGFMT_RGB15LE
, PIX_FMT_BGR555LE
},
52 {IMGFMT_RGB12BE
, PIX_FMT_BGR444BE
},
53 {IMGFMT_RGB12LE
, PIX_FMT_BGR444LE
},
54 {IMGFMT_RGB8
, PIX_FMT_BGR8
},
55 {IMGFMT_RGB4
, PIX_FMT_BGR4
},
56 {IMGFMT_BGR8
, PIX_FMT_PAL8
},
57 {IMGFMT_YUY2
, PIX_FMT_YUYV422
},
58 {IMGFMT_UYVY
, PIX_FMT_UYVY422
},
59 {IMGFMT_NV12
, PIX_FMT_NV12
},
60 {IMGFMT_NV21
, PIX_FMT_NV21
},
61 {IMGFMT_Y800
, PIX_FMT_GRAY8
},
62 {IMGFMT_Y8
, PIX_FMT_GRAY8
},
63 {IMGFMT_YVU9
, PIX_FMT_YUV410P
},
64 {IMGFMT_IF09
, PIX_FMT_YUV410P
},
65 {IMGFMT_YV12
, PIX_FMT_YUV420P
},
66 {IMGFMT_I420
, PIX_FMT_YUV420P
},
67 {IMGFMT_IYUV
, PIX_FMT_YUV420P
},
68 {IMGFMT_411P
, PIX_FMT_YUV411P
},
69 {IMGFMT_422P
, PIX_FMT_YUV422P
},
70 {IMGFMT_444P
, PIX_FMT_YUV444P
},
71 {IMGFMT_440P
, PIX_FMT_YUV440P
},
73 {IMGFMT_420A
, PIX_FMT_YUVA420P
},
75 {IMGFMT_420P16_LE
, PIX_FMT_YUV420P16LE
},
76 {IMGFMT_420P16_BE
, PIX_FMT_YUV420P16BE
},
77 {IMGFMT_422P16_LE
, PIX_FMT_YUV422P16LE
},
78 {IMGFMT_422P16_BE
, PIX_FMT_YUV422P16BE
},
79 {IMGFMT_444P16_LE
, PIX_FMT_YUV444P16LE
},
80 {IMGFMT_444P16_BE
, PIX_FMT_YUV444P16BE
},
82 // YUVJ are YUV formats that use the full Y range and not just
83 // 16 - 235 (see colorspaces.txt).
84 // Currently they are all treated the same way.
85 {IMGFMT_YV12
, PIX_FMT_YUVJ420P
},
86 {IMGFMT_422P
, PIX_FMT_YUVJ422P
},
87 {IMGFMT_444P
, PIX_FMT_YUVJ444P
},
88 {IMGFMT_440P
, PIX_FMT_YUVJ440P
},
90 {IMGFMT_XVMC_MOCO_MPEG2
, PIX_FMT_XVMC_MPEG2_MC
},
91 {IMGFMT_XVMC_IDCT_MPEG2
, PIX_FMT_XVMC_MPEG2_IDCT
},
92 {IMGFMT_VDPAU_MPEG1
, PIX_FMT_VDPAU_MPEG1
},
93 {IMGFMT_VDPAU_MPEG2
, PIX_FMT_VDPAU_MPEG2
},
94 {IMGFMT_VDPAU_H264
, PIX_FMT_VDPAU_H264
},
95 {IMGFMT_VDPAU_WMV3
, PIX_FMT_VDPAU_WMV3
},
96 {IMGFMT_VDPAU_VC1
, PIX_FMT_VDPAU_VC1
},
97 {IMGFMT_VDPAU_MPEG4
, PIX_FMT_VDPAU_MPEG4
},
101 enum PixelFormat
imgfmt2pixfmt(int fmt
)
104 enum PixelFormat pix_fmt
;
105 for (i
= 0; conversion_map
[i
].fmt
; i
++)
106 if (conversion_map
[i
].fmt
== fmt
)
108 pix_fmt
= conversion_map
[i
].pix_fmt
;
109 if (pix_fmt
== PIX_FMT_NONE
)
110 mp_msg(MSGT_GLOBAL
, MSGL_ERR
, "Unsupported format %s\n", vo_format_name(fmt
));
114 int pixfmt2imgfmt(enum PixelFormat pix_fmt
)
118 for (i
= 0; conversion_map
[i
].pix_fmt
!= PIX_FMT_NONE
; i
++)
119 if (conversion_map
[i
].pix_fmt
== pix_fmt
)
121 fmt
= conversion_map
[i
].fmt
;
123 mp_msg(MSGT_GLOBAL
, MSGL_ERR
, "Unsupported PixelFormat %i\n", pix_fmt
);