annotate fmt-conversion.c @ 31227:ee7beb1a3a6e

backport ass_flush_events() from upstream libass and make use of it This fixes subtitles duplication when seeking back in ass stream formated with the "standard" format FFmpeg uses.
author aurel
date Mon, 31 May 2010 19:10:57 +0000
parents 92f88bb315c5
children fd60388d370a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
1 /*
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
2 * This file is part of MPlayer.
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
3 *
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
7 * (at your option) any later version.
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
8 *
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
12 * GNU General Public License for more details.
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
13 *
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License along
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
17 */
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
18
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
19 #include "mp_msg.h"
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
20 #include "libavutil/avutil.h"
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
21 #include "libmpcodecs/img_format.h"
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
22 #include "fmt-conversion.h"
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
23
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
24 static const struct {
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
25 int fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
26 enum PixelFormat pix_fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
27 } conversion_map[] = {
30309
ddd809228aef More format support in fmt-conversion.c: split RGB32 and BGR32
reimar
parents: 30115
diff changeset
28 {IMGFMT_ARGB, PIX_FMT_ARGB},
ddd809228aef More format support in fmt-conversion.c: split RGB32 and BGR32
reimar
parents: 30115
diff changeset
29 {IMGFMT_BGRA, PIX_FMT_BGRA},
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
30 {IMGFMT_BGR24, PIX_FMT_BGR24},
30311
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
31 {IMGFMT_BGR16BE, PIX_FMT_RGB565BE},
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
32 {IMGFMT_BGR16LE, PIX_FMT_RGB565LE},
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
33 {IMGFMT_BGR15BE, PIX_FMT_RGB555BE},
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
34 {IMGFMT_BGR15LE, PIX_FMT_RGB555LE},
31082
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30311
diff changeset
35 {IMGFMT_BGR12BE, PIX_FMT_RGB444BE},
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30311
diff changeset
36 {IMGFMT_BGR12LE, PIX_FMT_RGB444LE},
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
37 {IMGFMT_BGR8, PIX_FMT_RGB8},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
38 {IMGFMT_BGR4, PIX_FMT_RGB4},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
39 {IMGFMT_BGR1, PIX_FMT_MONOBLACK},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
40 {IMGFMT_RGB1, PIX_FMT_MONOBLACK},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
41 {IMGFMT_RG4B, PIX_FMT_BGR4_BYTE},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
42 {IMGFMT_BG4B, PIX_FMT_RGB4_BYTE},
29445
3e9db1ac8cf1 Map IMGFMT_RGB48xE to PIX_FMT_RGB48xE.
cehoyos
parents: 29078
diff changeset
43 {IMGFMT_RGB48LE, PIX_FMT_RGB48LE},
3e9db1ac8cf1 Map IMGFMT_RGB48xE to PIX_FMT_RGB48xE.
cehoyos
parents: 29078
diff changeset
44 {IMGFMT_RGB48BE, PIX_FMT_RGB48BE},
30309
ddd809228aef More format support in fmt-conversion.c: split RGB32 and BGR32
reimar
parents: 30115
diff changeset
45 {IMGFMT_ABGR, PIX_FMT_ABGR},
ddd809228aef More format support in fmt-conversion.c: split RGB32 and BGR32
reimar
parents: 30115
diff changeset
46 {IMGFMT_RGBA, PIX_FMT_RGBA},
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
47 {IMGFMT_RGB24, PIX_FMT_RGB24},
30311
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
48 {IMGFMT_RGB16BE, PIX_FMT_BGR565BE},
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
49 {IMGFMT_RGB16LE, PIX_FMT_BGR565LE},
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
50 {IMGFMT_RGB15BE, PIX_FMT_BGR555BE},
8a67140f5fc1 Add big- and little-endian variants of the 15 and 16 bit RGB/BGR formats.
reimar
parents: 30309
diff changeset
51 {IMGFMT_RGB15LE, PIX_FMT_BGR555LE},
31082
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30311
diff changeset
52 {IMGFMT_RGB12BE, PIX_FMT_BGR444BE},
92f88bb315c5 Add support for 12-bit color mode on framebuffer devices.
cehoyos
parents: 30311
diff changeset
53 {IMGFMT_RGB12LE, PIX_FMT_BGR444LE},
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
54 {IMGFMT_RGB8, PIX_FMT_BGR8},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
55 {IMGFMT_RGB4, PIX_FMT_BGR4},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
56 {IMGFMT_BGR8, PIX_FMT_PAL8},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
57 {IMGFMT_YUY2, PIX_FMT_YUYV422},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
58 {IMGFMT_UYVY, PIX_FMT_UYVY422},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
59 {IMGFMT_NV12, PIX_FMT_NV12},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
60 {IMGFMT_NV21, PIX_FMT_NV21},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
61 {IMGFMT_Y800, PIX_FMT_GRAY8},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
62 {IMGFMT_Y8, PIX_FMT_GRAY8},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
63 {IMGFMT_YVU9, PIX_FMT_YUV410P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
64 {IMGFMT_IF09, PIX_FMT_YUV410P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
65 {IMGFMT_YV12, PIX_FMT_YUV420P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
66 {IMGFMT_I420, PIX_FMT_YUV420P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
67 {IMGFMT_IYUV, PIX_FMT_YUV420P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
68 {IMGFMT_411P, PIX_FMT_YUV411P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
69 {IMGFMT_422P, PIX_FMT_YUV422P},
28631
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
70 {IMGFMT_444P, PIX_FMT_YUV444P},
30098
834af9d1e3e9 Add support for 440p colorspace.
reimar
parents: 29843
diff changeset
71 {IMGFMT_440P, PIX_FMT_YUV440P},
30115
ad61464d02a7 Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents: 30110
diff changeset
72
ad61464d02a7 Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents: 30110
diff changeset
73 {IMGFMT_420A, PIX_FMT_YUVA420P},
ad61464d02a7 Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents: 30110
diff changeset
74
30110
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30098
diff changeset
75 {IMGFMT_420P16_LE, PIX_FMT_YUV420P16LE},
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30098
diff changeset
76 {IMGFMT_420P16_BE, PIX_FMT_YUV420P16BE},
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30098
diff changeset
77 {IMGFMT_422P16_LE, PIX_FMT_YUV422P16LE},
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30098
diff changeset
78 {IMGFMT_422P16_BE, PIX_FMT_YUV422P16BE},
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30098
diff changeset
79 {IMGFMT_444P16_LE, PIX_FMT_YUV444P16LE},
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30098
diff changeset
80 {IMGFMT_444P16_BE, PIX_FMT_YUV444P16BE},
28631
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
81
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
82 // YUVJ are YUV formats that use the full Y range and not just
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
83 // 16 - 235 (see colorspaces.txt).
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
84 // Currently they are all treated the same way.
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
85 {IMGFMT_YV12, PIX_FMT_YUVJ420P},
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
86 {IMGFMT_422P, PIX_FMT_YUVJ422P},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
87 {IMGFMT_444P, PIX_FMT_YUVJ444P},
30098
834af9d1e3e9 Add support for 440p colorspace.
reimar
parents: 29843
diff changeset
88 {IMGFMT_440P, PIX_FMT_YUVJ440P},
28631
70a43ec47c61 Re-add accidentally discarded comment about YUVJ format.
reimar
parents: 28526
diff changeset
89
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
90 {IMGFMT_XVMC_MOCO_MPEG2, PIX_FMT_XVMC_MPEG2_MC},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
91 {IMGFMT_XVMC_IDCT_MPEG2, PIX_FMT_XVMC_MPEG2_IDCT},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
92 {IMGFMT_VDPAU_MPEG1, PIX_FMT_VDPAU_MPEG1},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
93 {IMGFMT_VDPAU_MPEG2, PIX_FMT_VDPAU_MPEG2},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
94 {IMGFMT_VDPAU_H264, PIX_FMT_VDPAU_H264},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
95 {IMGFMT_VDPAU_WMV3, PIX_FMT_VDPAU_WMV3},
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
96 {IMGFMT_VDPAU_VC1, PIX_FMT_VDPAU_VC1},
29843
f6d56a15f1d8 Support VDPAU hardware accelerated decoding of MPEG-4 ASP on capable
cehoyos
parents: 29445
diff changeset
97 {IMGFMT_VDPAU_MPEG4, PIX_FMT_VDPAU_MPEG4},
28526
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
98 {0, PIX_FMT_NONE}
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
99 };
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
100
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
101 enum PixelFormat imgfmt2pixfmt(int fmt)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
102 {
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
103 int i;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
104 enum PixelFormat pix_fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
105 for (i = 0; conversion_map[i].fmt; i++)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
106 if (conversion_map[i].fmt == fmt)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
107 break;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
108 pix_fmt = conversion_map[i].pix_fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
109 if (pix_fmt == PIX_FMT_NONE)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
110 mp_msg(MSGT_GLOBAL, MSGL_ERR, "Unsupported format %s\n", vo_format_name(fmt));
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
111 return pix_fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
112 }
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
113
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
114 int pixfmt2imgfmt(enum PixelFormat pix_fmt)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
115 {
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
116 int i;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
117 int fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
118 for (i = 0; conversion_map[i].pix_fmt != PIX_FMT_NONE; i++)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
119 if (conversion_map[i].pix_fmt == pix_fmt)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
120 break;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
121 fmt = conversion_map[i].fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
122 if (!fmt)
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
123 mp_msg(MSGT_GLOBAL, MSGL_ERR, "Unsupported PixelFormat %i\n", pix_fmt);
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
124 return fmt;
21efa4282730 Create a fmt-conversion.c file so fmt-conversion.h can be included by multiple files.
reimar
parents:
diff changeset
125 }