Mercurial > mplayer.hg
annotate libmpcodecs/img_format.c @ 34797:079b53acda6d
Workaround bug in mpg123. In rare cases, after seeking mplayer stops audio playback and would repeat "No stream opened. (code 24)" until next seek.
This is caused by bug in mpg123_getformat() that triggers needless reading of next frame, possibly hitting bogus MPG123_NEED_MORE. The function is fixed in mpg123 1.14.0+.
This commit however allows older mpg123 versions to work properly in mplayer.
Patch by Thomas Orgis, thomas-forum orgis org
author | iive |
---|---|
date | Wed, 02 May 2012 21:15:07 +0000 |
parents | 2a372b469420 |
children | 0eba64545a27 |
rev | line source |
---|---|
30421
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
1 /* |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
2 * This file is part of MPlayer. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
3 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
4 * MPlayer is free software; you can redistribute it and/or modify |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
5 * it under the terms of the GNU General Public License as published by |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
6 * the Free Software Foundation; either version 2 of the License, or |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
7 * (at your option) any later version. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
8 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
9 * MPlayer is distributed in the hope that it will be useful, |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
12 * GNU General Public License for more details. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
13 * |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
14 * You should have received a copy of the GNU General Public License along |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
15 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
17 */ |
bbb6ebec87a0
Add missing license headers to all files in the libmpcodecs directory.
diego
parents:
30115
diff
changeset
|
18 |
17565
dc65faaadb04
include config.h as img_format.h needs endian definitions, noticed by Alan Curry <pacman at theworld com>
iive
parents:
12996
diff
changeset
|
19 #include "config.h" |
3199 | 20 #include "img_format.h" |
23750 | 21 #include "stdio.h" |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
22 #include "libavutil/bswap.h" |
2599 | 23 |
19108
5e767cabf4cd
marks several read-only string parameters and function return-values which can only be used read-only as const. Patch by Stefan Huehner, stefan _AT huener-org
reynaldo
parents:
17565
diff
changeset
|
24 const char *vo_format_name(int format) |
2599 | 25 { |
26701 | 26 static char unknown_format[20]; |
2599 | 27 switch(format) |
28 { | |
34191 | 29 case IMGFMT_RGB1: return "RGB 1-bit"; |
30 case IMGFMT_RGB4: return "RGB 4-bit"; | |
31 case IMGFMT_RG4B: return "RGB 4-bit per byte"; | |
32 case IMGFMT_RGB8: return "RGB 8-bit"; | |
33 case IMGFMT_RGB12: return "RGB 12-bit"; | |
34 case IMGFMT_RGB15: return "RGB 15-bit"; | |
35 case IMGFMT_RGB16: return "RGB 16-bit"; | |
36 case IMGFMT_RGB24: return "RGB 24-bit"; | |
37 // case IMGFMT_RGB32: return "RGB 32-bit"; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
38 case IMGFMT_RGB48LE: return "RGB 48-bit LE"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
39 case IMGFMT_RGB48BE: return "RGB 48-bit BE"; |
34572 | 40 case IMGFMT_RGB64LE: return "RGB 64-bit LE"; |
41 case IMGFMT_RGB64BE: return "RGB 64-bit BE"; | |
34191 | 42 case IMGFMT_BGR1: return "BGR 1-bit"; |
43 case IMGFMT_BGR4: return "BGR 4-bit"; | |
44 case IMGFMT_BG4B: return "BGR 4-bit per byte"; | |
45 case IMGFMT_BGR8: return "BGR 8-bit"; | |
46 case IMGFMT_BGR12: return "BGR 12-bit"; | |
47 case IMGFMT_BGR15: return "BGR 15-bit"; | |
48 case IMGFMT_BGR16: return "BGR 16-bit"; | |
49 case IMGFMT_BGR24: return "BGR 24-bit"; | |
50 // case IMGFMT_BGR32: return "BGR 32-bit"; | |
51 case IMGFMT_ABGR: return "ABGR"; | |
52 case IMGFMT_BGRA: return "BGRA"; | |
53 case IMGFMT_ARGB: return "ARGB"; | |
54 case IMGFMT_RGBA: return "RGBA"; | |
55 case IMGFMT_GBR24P: return "Planar GBR 24-bit"; | |
56 case IMGFMT_YVU9: return "Planar YVU9"; | |
57 case IMGFMT_IF09: return "Planar IF09"; | |
58 case IMGFMT_YV12: return "Planar YV12"; | |
59 case IMGFMT_I420: return "Planar I420"; | |
60 case IMGFMT_IYUV: return "Planar IYUV"; | |
61 case IMGFMT_CLPL: return "Planar CLPL"; | |
62 case IMGFMT_Y800: return "Planar Y800"; | |
63 case IMGFMT_Y8: return "Planar Y8"; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
64 case IMGFMT_420P16_LE: return "Planar 420P 16-bit little-endian"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
65 case IMGFMT_420P16_BE: return "Planar 420P 16-bit big-endian"; |
33364
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32702
diff
changeset
|
66 case IMGFMT_420P10_LE: return "Planar 420P 10-bit little-endian"; |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32702
diff
changeset
|
67 case IMGFMT_420P10_BE: return "Planar 420P 10-bit big-endian"; |
34191 | 68 case IMGFMT_420P9_LE: return "Planar 420P 9-bit little-endian"; |
69 case IMGFMT_420P9_BE: return "Planar 420P 9-bit big-endian"; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
70 case IMGFMT_422P16_LE: return "Planar 422P 16-bit little-endian"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
71 case IMGFMT_422P16_BE: return "Planar 422P 16-bit big-endian"; |
33364
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32702
diff
changeset
|
72 case IMGFMT_422P10_LE: return "Planar 422P 10-bit little-endian"; |
e1ee4895e500
Support displaying of 9- and 10-bit pixel formats,
cehoyos
parents:
32702
diff
changeset
|
73 case IMGFMT_422P10_BE: return "Planar 422P 10-bit big-endian"; |
34436 | 74 case IMGFMT_422P9_LE: return "Planar 422P 9-bit little-endian"; |
75 case IMGFMT_422P9_BE: return "Planar 422P 9-bit big-endian"; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
76 case IMGFMT_444P16_LE: return "Planar 444P 16-bit little-endian"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
77 case IMGFMT_444P16_BE: return "Planar 444P 16-bit big-endian"; |
34028 | 78 case IMGFMT_444P10_LE: return "Planar 444P 10-bit little-endian"; |
79 case IMGFMT_444P10_BE: return "Planar 444P 10-bit big-endian"; | |
34191 | 80 case IMGFMT_444P9_LE: return "Planar 444P 9-bit little-endian"; |
81 case IMGFMT_444P9_BE: return "Planar 444P 9-bit big-endian"; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
82 case IMGFMT_420A: return "Planar 420P with alpha"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
83 case IMGFMT_444P: return "Planar 444P"; |
34565 | 84 case IMGFMT_444A: return "Planar 444P with alpha"; |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
85 case IMGFMT_422P: return "Planar 422P"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
86 case IMGFMT_411P: return "Planar 411P"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
87 case IMGFMT_NV12: return "Planar NV12"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
88 case IMGFMT_NV21: return "Planar NV21"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
89 case IMGFMT_HM12: return "Planar NV12 Macroblock"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
90 case IMGFMT_IUYV: return "Packed IUYV"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
91 case IMGFMT_IY41: return "Packed IY41"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
92 case IMGFMT_IYU1: return "Packed IYU1"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
93 case IMGFMT_IYU2: return "Packed IYU2"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
94 case IMGFMT_UYVY: return "Packed UYVY"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
95 case IMGFMT_UYNV: return "Packed UYNV"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
96 case IMGFMT_cyuv: return "Packed CYUV"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
97 case IMGFMT_Y422: return "Packed Y422"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
98 case IMGFMT_YUY2: return "Packed YUY2"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
99 case IMGFMT_YUNV: return "Packed YUNV"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
100 case IMGFMT_YVYU: return "Packed YVYU"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
101 case IMGFMT_Y41P: return "Packed Y41P"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
102 case IMGFMT_Y211: return "Packed Y211"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
103 case IMGFMT_Y41T: return "Packed Y41T"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
104 case IMGFMT_Y42T: return "Packed Y42T"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
105 case IMGFMT_V422: return "Packed V422"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
106 case IMGFMT_V655: return "Packed V655"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
107 case IMGFMT_CLJR: return "Packed CLJR"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
108 case IMGFMT_YUVP: return "Packed YUVP"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
109 case IMGFMT_UYVP: return "Packed UYVP"; |
34191 | 110 case IMGFMT_MPEGPES: return "Mpeg PES"; |
111 case IMGFMT_ZRMJPEGNI: return "Zoran MJPEG non-interlaced"; | |
112 case IMGFMT_ZRMJPEGIT: return "Zoran MJPEG top field first"; | |
113 case IMGFMT_ZRMJPEGIB: return "Zoran MJPEG bottom field first"; | |
32702
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
114 case IMGFMT_XVMC_MOCO_MPEG2: return "MPEG1/2 Motion Compensation"; |
7af3e6f901fd
Convert some tabs to whitespace to allow using MPlayer filter sourcecode in FFmpeg.
cehoyos
parents:
31087
diff
changeset
|
115 case IMGFMT_XVMC_IDCT_MPEG2: return "MPEG1/2 Motion Compensation and IDCT"; |
34191 | 116 case IMGFMT_VDPAU_MPEG1: return "MPEG1 VDPAU acceleration"; |
117 case IMGFMT_VDPAU_MPEG2: return "MPEG2 VDPAU acceleration"; | |
118 case IMGFMT_VDPAU_H264: return "H.264 VDPAU acceleration"; | |
119 case IMGFMT_VDPAU_MPEG4: return "MPEG-4 Part 2 VDPAU acceleration"; | |
120 case IMGFMT_VDPAU_WMV3: return "WMV3 VDPAU acceleration"; | |
121 case IMGFMT_VDPAU_VC1: return "VC1 VDPAU acceleration"; | |
2599 | 122 } |
26701 | 123 snprintf(unknown_format,20,"Unknown 0x%04x",format); |
124 return unknown_format; | |
2599 | 125 } |
30096
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
126 |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
127 int mp_get_chroma_shift(int format, int *x_shift, int *y_shift, int *component_bits) |
30096
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
128 { |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
129 int xs = 0, ys = 0; |
30110 | 130 int bpp; |
30096
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
131 int err = 0; |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
132 int bits = 8; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
133 if ((format & 0xff0000f0) == 0x34000050) |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
134 format = av_bswap32(format); |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
135 if ((format & 0xf00000ff) == 0x50000034) { |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
136 switch (format >> 24) { |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
137 case 0x50: |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
138 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
139 case 0x51: |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
140 bits = 16; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
141 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
142 case 0x52: |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
143 bits = 10; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
144 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
145 case 0x53: |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
146 bits = 9; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
147 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
148 default: |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
149 err = 1; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
150 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
151 } |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
152 switch (format & 0x00ffffff) { |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
153 case 0x00343434: // 444 |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
154 xs = 0; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
155 ys = 0; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
156 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
157 case 0x00323234: // 422 |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
158 xs = 1; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
159 ys = 0; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
160 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
161 case 0x00303234: // 420 |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
162 xs = 1; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
163 ys = 1; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
164 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
165 case 0x00313134: // 411 |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
166 xs = 2; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
167 ys = 0; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
168 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
169 case 0x00303434: // 440 |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
170 xs = 0; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
171 ys = 1; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
172 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
173 default: |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
174 err = 1; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
175 break; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
176 } |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
177 } else switch (format) { |
34565 | 178 case IMGFMT_444A: |
179 xs = 0; | |
180 ys = 0; | |
181 break; | |
30115
ad61464d02a7
Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents:
30110
diff
changeset
|
182 case IMGFMT_420A: |
30096
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
183 case IMGFMT_I420: |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
184 case IMGFMT_IYUV: |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
185 case IMGFMT_YV12: |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
186 xs = 1; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
187 ys = 1; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
188 break; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
189 case IMGFMT_IF09: |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
190 case IMGFMT_YVU9: |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
191 xs = 2; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
192 ys = 2; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
193 break; |
31087
9acad2e25ea1
Handle Y8/Y800 formats more similar to other YUV formats.
reimar
parents:
31082
diff
changeset
|
194 case IMGFMT_Y8: |
9acad2e25ea1
Handle Y8/Y800 formats more similar to other YUV formats.
reimar
parents:
31082
diff
changeset
|
195 case IMGFMT_Y800: |
9acad2e25ea1
Handle Y8/Y800 formats more similar to other YUV formats.
reimar
parents:
31082
diff
changeset
|
196 xs = 31; |
9acad2e25ea1
Handle Y8/Y800 formats more similar to other YUV formats.
reimar
parents:
31082
diff
changeset
|
197 ys = 31; |
9acad2e25ea1
Handle Y8/Y800 formats more similar to other YUV formats.
reimar
parents:
31082
diff
changeset
|
198 break; |
30096
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
199 default: |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
200 err = 1; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
201 break; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
202 } |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
203 if (x_shift) *x_shift = xs; |
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
204 if (y_shift) *y_shift = ys; |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
205 if (component_bits) *component_bits = bits; |
31087
9acad2e25ea1
Handle Y8/Y800 formats more similar to other YUV formats.
reimar
parents:
31082
diff
changeset
|
206 bpp = 8 + ((16 >> xs) >> ys); |
34565 | 207 if (format == IMGFMT_420A || format == IMGFMT_444A) |
30115
ad61464d02a7
Add support for YUV format with alpha and fix the codecs.conf entry for vp6a
reimar
parents:
30110
diff
changeset
|
208 bpp += 8; |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33364
diff
changeset
|
209 bpp *= (bits + 7) >> 3; |
30110 | 210 return err ? 0 : bpp; |
30096
76c25bfa181b
Add a helper function to get the chroma scale shift and use to simplify mpi setup.
reimar
parents:
29843
diff
changeset
|
211 } |