You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1878 lines
60KB

  1. /*
  2. * pixel format descriptor
  3. * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
  4. *
  5. * This file is part of Libav.
  6. *
  7. * Libav is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * Libav is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with Libav; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. #include <stdio.h>
  22. #include <string.h>
  23. #include "avstring.h"
  24. #include "common.h"
  25. #include "pixfmt.h"
  26. #include "pixdesc.h"
  27. #include "internal.h"
  28. #include "intreadwrite.h"
  29. #include "version.h"
  30. void av_read_image_line(uint16_t *dst,
  31. const uint8_t *data[4], const int linesize[4],
  32. const AVPixFmtDescriptor *desc,
  33. int x, int y, int c, int w,
  34. int read_pal_component)
  35. {
  36. AVComponentDescriptor comp = desc->comp[c];
  37. int plane = comp.plane;
  38. int depth = comp.depth;
  39. int mask = (1 << depth) - 1;
  40. int shift = comp.shift;
  41. int step = comp.step;
  42. int flags = desc->flags;
  43. if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
  44. int skip = x * step + comp.offset;
  45. const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
  46. int shift = 8 - depth - (skip & 7);
  47. while (w--) {
  48. int val = (*p >> shift) & mask;
  49. if (read_pal_component)
  50. val = data[1][4*val + c];
  51. shift -= step;
  52. p -= shift >> 3;
  53. shift &= 7;
  54. *dst++ = val;
  55. }
  56. } else {
  57. const uint8_t *p = data[plane] + y * linesize[plane] +
  58. x * step + comp.offset;
  59. int is_8bit = shift + depth <= 8;
  60. if (is_8bit)
  61. p += !!(flags & AV_PIX_FMT_FLAG_BE);
  62. while (w--) {
  63. int val = is_8bit ? *p :
  64. flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p);
  65. val = (val >> shift) & mask;
  66. if (read_pal_component)
  67. val = data[1][4 * val + c];
  68. p += step;
  69. *dst++ = val;
  70. }
  71. }
  72. }
  73. void av_write_image_line(const uint16_t *src,
  74. uint8_t *data[4], const int linesize[4],
  75. const AVPixFmtDescriptor *desc,
  76. int x, int y, int c, int w)
  77. {
  78. AVComponentDescriptor comp = desc->comp[c];
  79. int plane = comp.plane;
  80. int depth = comp.depth;
  81. int step = comp.step;
  82. int flags = desc->flags;
  83. if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
  84. int skip = x * step + comp.offset;
  85. uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
  86. int shift = 8 - depth - (skip & 7);
  87. while (w--) {
  88. *p |= *src++ << shift;
  89. shift -= step;
  90. p -= shift >> 3;
  91. shift &= 7;
  92. }
  93. } else {
  94. int shift = comp.shift;
  95. uint8_t *p = data[plane] + y * linesize[plane] +
  96. x * step + comp.offset;
  97. if (shift + depth <= 8) {
  98. p += !!(flags & AV_PIX_FMT_FLAG_BE);
  99. while (w--) {
  100. *p |= (*src++ << shift);
  101. p += step;
  102. }
  103. } else {
  104. while (w--) {
  105. if (flags & AV_PIX_FMT_FLAG_BE) {
  106. uint16_t val = AV_RB16(p) | (*src++ << shift);
  107. AV_WB16(p, val);
  108. } else {
  109. uint16_t val = AV_RL16(p) | (*src++ << shift);
  110. AV_WL16(p, val);
  111. }
  112. p += step;
  113. }
  114. }
  115. }
  116. }
  117. #if FF_API_PLUS1_MINUS1
  118. FF_DISABLE_DEPRECATION_WARNINGS
  119. #endif
  120. static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = {
  121. [AV_PIX_FMT_YUV420P] = {
  122. .name = "yuv420p",
  123. .nb_components = 3,
  124. .log2_chroma_w = 1,
  125. .log2_chroma_h = 1,
  126. .comp = {
  127. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  128. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  129. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  130. },
  131. .flags = AV_PIX_FMT_FLAG_PLANAR,
  132. },
  133. [AV_PIX_FMT_YUYV422] = {
  134. .name = "yuyv422",
  135. .nb_components = 3,
  136. .log2_chroma_w = 1,
  137. .log2_chroma_h = 0,
  138. .comp = {
  139. { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
  140. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* U */
  141. { 0, 4, 3, 0, 8, 3, 7, 4 }, /* V */
  142. },
  143. },
  144. [AV_PIX_FMT_YVYU422] = {
  145. .name = "yvyu422",
  146. .nb_components = 3,
  147. .log2_chroma_w = 1,
  148. .log2_chroma_h = 0,
  149. .comp = {
  150. { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
  151. { 0, 4, 3, 0, 8, 3, 7, 4 }, /* U */
  152. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* V */
  153. },
  154. },
  155. [AV_PIX_FMT_RGB24] = {
  156. .name = "rgb24",
  157. .nb_components = 3,
  158. .log2_chroma_w = 0,
  159. .log2_chroma_h = 0,
  160. .comp = {
  161. { 0, 3, 0, 0, 8, 2, 7, 1 }, /* R */
  162. { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */
  163. { 0, 3, 2, 0, 8, 2, 7, 3 }, /* B */
  164. },
  165. .flags = AV_PIX_FMT_FLAG_RGB,
  166. },
  167. [AV_PIX_FMT_BGR24] = {
  168. .name = "bgr24",
  169. .nb_components = 3,
  170. .log2_chroma_w = 0,
  171. .log2_chroma_h = 0,
  172. .comp = {
  173. { 0, 3, 2, 0, 8, 2, 7, 3 }, /* R */
  174. { 0, 3, 1, 0, 8, 2, 7, 2 }, /* G */
  175. { 0, 3, 0, 0, 8, 2, 7, 1 }, /* B */
  176. },
  177. .flags = AV_PIX_FMT_FLAG_RGB,
  178. },
  179. [AV_PIX_FMT_YUV422P] = {
  180. .name = "yuv422p",
  181. .nb_components = 3,
  182. .log2_chroma_w = 1,
  183. .log2_chroma_h = 0,
  184. .comp = {
  185. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  186. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  187. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  188. },
  189. .flags = AV_PIX_FMT_FLAG_PLANAR,
  190. },
  191. [AV_PIX_FMT_YUV444P] = {
  192. .name = "yuv444p",
  193. .nb_components = 3,
  194. .log2_chroma_w = 0,
  195. .log2_chroma_h = 0,
  196. .comp = {
  197. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  198. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  199. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  200. },
  201. .flags = AV_PIX_FMT_FLAG_PLANAR,
  202. },
  203. [AV_PIX_FMT_YUV410P] = {
  204. .name = "yuv410p",
  205. .nb_components = 3,
  206. .log2_chroma_w = 2,
  207. .log2_chroma_h = 2,
  208. .comp = {
  209. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  210. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  211. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  212. },
  213. .flags = AV_PIX_FMT_FLAG_PLANAR,
  214. },
  215. [AV_PIX_FMT_YUV411P] = {
  216. .name = "yuv411p",
  217. .nb_components = 3,
  218. .log2_chroma_w = 2,
  219. .log2_chroma_h = 0,
  220. .comp = {
  221. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  222. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  223. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  224. },
  225. .flags = AV_PIX_FMT_FLAG_PLANAR,
  226. },
  227. [AV_PIX_FMT_GRAY8] = {
  228. .name = "gray",
  229. .nb_components = 1,
  230. .log2_chroma_w = 0,
  231. .log2_chroma_h = 0,
  232. .comp = {
  233. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  234. },
  235. .flags = AV_PIX_FMT_FLAG_PSEUDOPAL,
  236. .alias = "gray8,y8",
  237. },
  238. [AV_PIX_FMT_MONOWHITE] = {
  239. .name = "monow",
  240. .nb_components = 1,
  241. .log2_chroma_w = 0,
  242. .log2_chroma_h = 0,
  243. .comp = {
  244. { 0, 1, 0, 0, 1, 0, 0, 1 }, /* Y */
  245. },
  246. .flags = AV_PIX_FMT_FLAG_BITSTREAM,
  247. },
  248. [AV_PIX_FMT_MONOBLACK] = {
  249. .name = "monob",
  250. .nb_components = 1,
  251. .log2_chroma_w = 0,
  252. .log2_chroma_h = 0,
  253. .comp = {
  254. { 0, 1, 0, 7, 1, 0, 0, 1 }, /* Y */
  255. },
  256. .flags = AV_PIX_FMT_FLAG_BITSTREAM,
  257. },
  258. [AV_PIX_FMT_PAL8] = {
  259. .name = "pal8",
  260. .nb_components = 1,
  261. .log2_chroma_w = 0,
  262. .log2_chroma_h = 0,
  263. .comp = {
  264. { 0, 1, 0, 0, 8, 0, 7, 1 },
  265. },
  266. .flags = AV_PIX_FMT_FLAG_PAL,
  267. },
  268. [AV_PIX_FMT_YUVJ420P] = {
  269. .name = "yuvj420p",
  270. .nb_components = 3,
  271. .log2_chroma_w = 1,
  272. .log2_chroma_h = 1,
  273. .comp = {
  274. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  275. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  276. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  277. },
  278. .flags = AV_PIX_FMT_FLAG_PLANAR,
  279. },
  280. [AV_PIX_FMT_YUVJ422P] = {
  281. .name = "yuvj422p",
  282. .nb_components = 3,
  283. .log2_chroma_w = 1,
  284. .log2_chroma_h = 0,
  285. .comp = {
  286. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  287. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  288. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  289. },
  290. .flags = AV_PIX_FMT_FLAG_PLANAR,
  291. },
  292. [AV_PIX_FMT_YUVJ444P] = {
  293. .name = "yuvj444p",
  294. .nb_components = 3,
  295. .log2_chroma_w = 0,
  296. .log2_chroma_h = 0,
  297. .comp = {
  298. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  299. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  300. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  301. },
  302. .flags = AV_PIX_FMT_FLAG_PLANAR,
  303. },
  304. #if FF_API_XVMC
  305. [AV_PIX_FMT_XVMC_MPEG2_MC] = {
  306. .name = "xvmcmc",
  307. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  308. },
  309. [AV_PIX_FMT_XVMC_MPEG2_IDCT] = {
  310. .name = "xvmcidct",
  311. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  312. },
  313. #endif /* FF_API_XVMC */
  314. [AV_PIX_FMT_UYVY422] = {
  315. .name = "uyvy422",
  316. .nb_components = 3,
  317. .log2_chroma_w = 1,
  318. .log2_chroma_h = 0,
  319. .comp = {
  320. { 0, 2, 1, 0, 8, 1, 7, 2 }, /* Y */
  321. { 0, 4, 0, 0, 8, 3, 7, 1 }, /* U */
  322. { 0, 4, 2, 0, 8, 3, 7, 3 }, /* V */
  323. },
  324. },
  325. [AV_PIX_FMT_UYYVYY411] = {
  326. .name = "uyyvyy411",
  327. .nb_components = 3,
  328. .log2_chroma_w = 2,
  329. .log2_chroma_h = 0,
  330. .comp = {
  331. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* Y */
  332. { 0, 6, 0, 0, 8, 5, 7, 1 }, /* U */
  333. { 0, 6, 3, 0, 8, 5, 7, 4 }, /* V */
  334. },
  335. },
  336. [AV_PIX_FMT_BGR8] = {
  337. .name = "bgr8",
  338. .nb_components = 3,
  339. .log2_chroma_w = 0,
  340. .log2_chroma_h = 0,
  341. .comp = {
  342. { 0, 1, 0, 0, 3, 0, 2, 1 }, /* R */
  343. { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */
  344. { 0, 1, 0, 6, 2, 0, 1, 1 }, /* B */
  345. },
  346. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
  347. },
  348. [AV_PIX_FMT_BGR4] = {
  349. .name = "bgr4",
  350. .nb_components = 3,
  351. .log2_chroma_w = 0,
  352. .log2_chroma_h = 0,
  353. .comp = {
  354. { 0, 4, 3, 0, 1, 3, 0, 4 }, /* R */
  355. { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */
  356. { 0, 4, 0, 0, 1, 3, 0, 1 }, /* B */
  357. },
  358. .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
  359. },
  360. [AV_PIX_FMT_BGR4_BYTE] = {
  361. .name = "bgr4_byte",
  362. .nb_components = 3,
  363. .log2_chroma_w = 0,
  364. .log2_chroma_h = 0,
  365. .comp = {
  366. { 0, 1, 0, 0, 1, 0, 0, 1 }, /* R */
  367. { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */
  368. { 0, 1, 0, 3, 1, 0, 0, 1 }, /* B */
  369. },
  370. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
  371. },
  372. [AV_PIX_FMT_RGB8] = {
  373. .name = "rgb8",
  374. .nb_components = 3,
  375. .log2_chroma_w = 0,
  376. .log2_chroma_h = 0,
  377. .comp = {
  378. { 0, 1, 0, 6, 2, 0, 1, 1 }, /* R */
  379. { 0, 1, 0, 3, 3, 0, 2, 1 }, /* G */
  380. { 0, 1, 0, 0, 3, 0, 2, 1 }, /* B */
  381. },
  382. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
  383. },
  384. [AV_PIX_FMT_RGB4] = {
  385. .name = "rgb4",
  386. .nb_components = 3,
  387. .log2_chroma_w = 0,
  388. .log2_chroma_h = 0,
  389. .comp = {
  390. { 0, 4, 0, 0, 1, 3, 0, 1 }, /* R */
  391. { 0, 4, 1, 0, 2, 3, 1, 2 }, /* G */
  392. { 0, 4, 3, 0, 1, 3, 0, 4 }, /* B */
  393. },
  394. .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB,
  395. },
  396. [AV_PIX_FMT_RGB4_BYTE] = {
  397. .name = "rgb4_byte",
  398. .nb_components = 3,
  399. .log2_chroma_w = 0,
  400. .log2_chroma_h = 0,
  401. .comp = {
  402. { 0, 1, 0, 3, 1, 0, 0, 1 }, /* R */
  403. { 0, 1, 0, 1, 2, 0, 1, 1 }, /* G */
  404. { 0, 1, 0, 0, 1, 0, 0, 1 }, /* B */
  405. },
  406. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_PSEUDOPAL,
  407. },
  408. [AV_PIX_FMT_NV12] = {
  409. .name = "nv12",
  410. .nb_components = 3,
  411. .log2_chroma_w = 1,
  412. .log2_chroma_h = 1,
  413. .comp = {
  414. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  415. { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
  416. { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
  417. },
  418. .flags = AV_PIX_FMT_FLAG_PLANAR,
  419. },
  420. [AV_PIX_FMT_NV21] = {
  421. .name = "nv21",
  422. .nb_components = 3,
  423. .log2_chroma_w = 1,
  424. .log2_chroma_h = 1,
  425. .comp = {
  426. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  427. { 1, 2, 1, 0, 8, 1, 7, 2 }, /* U */
  428. { 1, 2, 0, 0, 8, 1, 7, 1 }, /* V */
  429. },
  430. .flags = AV_PIX_FMT_FLAG_PLANAR,
  431. },
  432. [AV_PIX_FMT_ARGB] = {
  433. .name = "argb",
  434. .nb_components = 4,
  435. .log2_chroma_w = 0,
  436. .log2_chroma_h = 0,
  437. .comp = {
  438. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* R */
  439. { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
  440. { 0, 4, 3, 0, 8, 3, 7, 4 }, /* B */
  441. { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */
  442. },
  443. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  444. },
  445. [AV_PIX_FMT_RGBA] = {
  446. .name = "rgba",
  447. .nb_components = 4,
  448. .log2_chroma_w = 0,
  449. .log2_chroma_h = 0,
  450. .comp = {
  451. { 0, 4, 0, 0, 8, 3, 7, 1 }, /* R */
  452. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
  453. { 0, 4, 2, 0, 8, 3, 7, 3 }, /* B */
  454. { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */
  455. },
  456. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  457. },
  458. [AV_PIX_FMT_ABGR] = {
  459. .name = "abgr",
  460. .nb_components = 4,
  461. .log2_chroma_w = 0,
  462. .log2_chroma_h = 0,
  463. .comp = {
  464. { 0, 4, 3, 0, 8, 3, 7, 4 }, /* R */
  465. { 0, 4, 2, 0, 8, 3, 7, 3 }, /* G */
  466. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* B */
  467. { 0, 4, 0, 0, 8, 3, 7, 1 }, /* A */
  468. },
  469. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  470. },
  471. [AV_PIX_FMT_BGRA] = {
  472. .name = "bgra",
  473. .nb_components = 4,
  474. .log2_chroma_w = 0,
  475. .log2_chroma_h = 0,
  476. .comp = {
  477. { 0, 4, 2, 0, 8, 3, 7, 3 }, /* R */
  478. { 0, 4, 1, 0, 8, 3, 7, 2 }, /* G */
  479. { 0, 4, 0, 0, 8, 3, 7, 1 }, /* B */
  480. { 0, 4, 3, 0, 8, 3, 7, 4 }, /* A */
  481. },
  482. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  483. },
  484. [AV_PIX_FMT_GRAY16BE] = {
  485. .name = "gray16be",
  486. .nb_components = 1,
  487. .log2_chroma_w = 0,
  488. .log2_chroma_h = 0,
  489. .comp = {
  490. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  491. },
  492. .flags = AV_PIX_FMT_FLAG_BE,
  493. .alias = "y16be",
  494. },
  495. [AV_PIX_FMT_GRAY16LE] = {
  496. .name = "gray16le",
  497. .nb_components = 1,
  498. .log2_chroma_w = 0,
  499. .log2_chroma_h = 0,
  500. .comp = {
  501. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  502. },
  503. .alias = "y16le",
  504. },
  505. [AV_PIX_FMT_YUV440P] = {
  506. .name = "yuv440p",
  507. .nb_components = 3,
  508. .log2_chroma_w = 0,
  509. .log2_chroma_h = 1,
  510. .comp = {
  511. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  512. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  513. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  514. },
  515. .flags = AV_PIX_FMT_FLAG_PLANAR,
  516. },
  517. [AV_PIX_FMT_YUVJ440P] = {
  518. .name = "yuvj440p",
  519. .nb_components = 3,
  520. .log2_chroma_w = 0,
  521. .log2_chroma_h = 1,
  522. .comp = {
  523. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  524. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  525. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  526. },
  527. .flags = AV_PIX_FMT_FLAG_PLANAR,
  528. },
  529. [AV_PIX_FMT_YUVA420P] = {
  530. .name = "yuva420p",
  531. .nb_components = 4,
  532. .log2_chroma_w = 1,
  533. .log2_chroma_h = 1,
  534. .comp = {
  535. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  536. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  537. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  538. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  539. },
  540. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  541. },
  542. [AV_PIX_FMT_YUVA422P] = {
  543. .name = "yuva422p",
  544. .nb_components = 4,
  545. .log2_chroma_w = 1,
  546. .log2_chroma_h = 0,
  547. .comp = {
  548. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  549. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  550. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  551. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  552. },
  553. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  554. },
  555. [AV_PIX_FMT_YUVA444P] = {
  556. .name = "yuva444p",
  557. .nb_components = 4,
  558. .log2_chroma_w = 0,
  559. .log2_chroma_h = 0,
  560. .comp = {
  561. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  562. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  563. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  564. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  565. },
  566. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  567. },
  568. [AV_PIX_FMT_YUVA420P9BE] = {
  569. .name = "yuva420p9be",
  570. .nb_components = 4,
  571. .log2_chroma_w = 1,
  572. .log2_chroma_h = 1,
  573. .comp = {
  574. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  575. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  576. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  577. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  578. },
  579. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  580. },
  581. [AV_PIX_FMT_YUVA420P9LE] = {
  582. .name = "yuva420p9le",
  583. .nb_components = 4,
  584. .log2_chroma_w = 1,
  585. .log2_chroma_h = 1,
  586. .comp = {
  587. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  588. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  589. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  590. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  591. },
  592. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  593. },
  594. [AV_PIX_FMT_YUVA422P9BE] = {
  595. .name = "yuva422p9be",
  596. .nb_components = 4,
  597. .log2_chroma_w = 1,
  598. .log2_chroma_h = 0,
  599. .comp = {
  600. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  601. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  602. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  603. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  604. },
  605. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  606. },
  607. [AV_PIX_FMT_YUVA422P9LE] = {
  608. .name = "yuva422p9le",
  609. .nb_components = 4,
  610. .log2_chroma_w = 1,
  611. .log2_chroma_h = 0,
  612. .comp = {
  613. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  614. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  615. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  616. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  617. },
  618. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  619. },
  620. [AV_PIX_FMT_YUVA444P9BE] = {
  621. .name = "yuva444p9be",
  622. .nb_components = 4,
  623. .log2_chroma_w = 0,
  624. .log2_chroma_h = 0,
  625. .comp = {
  626. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  627. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  628. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  629. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  630. },
  631. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  632. },
  633. [AV_PIX_FMT_YUVA444P9LE] = {
  634. .name = "yuva444p9le",
  635. .nb_components = 4,
  636. .log2_chroma_w = 0,
  637. .log2_chroma_h = 0,
  638. .comp = {
  639. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  640. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  641. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  642. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  643. },
  644. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  645. },
  646. [AV_PIX_FMT_YUVA420P10BE] = {
  647. .name = "yuva420p10be",
  648. .nb_components = 4,
  649. .log2_chroma_w = 1,
  650. .log2_chroma_h = 1,
  651. .comp = {
  652. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  653. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  654. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  655. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  656. },
  657. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  658. },
  659. [AV_PIX_FMT_YUVA420P10LE] = {
  660. .name = "yuva420p10le",
  661. .nb_components = 4,
  662. .log2_chroma_w = 1,
  663. .log2_chroma_h = 1,
  664. .comp = {
  665. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  666. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  667. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  668. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  669. },
  670. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  671. },
  672. [AV_PIX_FMT_YUVA422P10BE] = {
  673. .name = "yuva422p10be",
  674. .nb_components = 4,
  675. .log2_chroma_w = 1,
  676. .log2_chroma_h = 0,
  677. .comp = {
  678. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  679. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  680. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  681. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  682. },
  683. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  684. },
  685. [AV_PIX_FMT_YUVA422P10LE] = {
  686. .name = "yuva422p10le",
  687. .nb_components = 4,
  688. .log2_chroma_w = 1,
  689. .log2_chroma_h = 0,
  690. .comp = {
  691. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  692. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  693. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  694. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  695. },
  696. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  697. },
  698. [AV_PIX_FMT_YUVA444P10BE] = {
  699. .name = "yuva444p10be",
  700. .nb_components = 4,
  701. .log2_chroma_w = 0,
  702. .log2_chroma_h = 0,
  703. .comp = {
  704. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  705. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  706. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  707. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  708. },
  709. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  710. },
  711. [AV_PIX_FMT_YUVA444P10LE] = {
  712. .name = "yuva444p10le",
  713. .nb_components = 4,
  714. .log2_chroma_w = 0,
  715. .log2_chroma_h = 0,
  716. .comp = {
  717. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  718. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  719. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  720. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  721. },
  722. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  723. },
  724. [AV_PIX_FMT_YUVA420P16BE] = {
  725. .name = "yuva420p16be",
  726. .nb_components = 4,
  727. .log2_chroma_w = 1,
  728. .log2_chroma_h = 1,
  729. .comp = {
  730. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  731. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  732. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  733. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  734. },
  735. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  736. },
  737. [AV_PIX_FMT_YUVA420P16LE] = {
  738. .name = "yuva420p16le",
  739. .nb_components = 4,
  740. .log2_chroma_w = 1,
  741. .log2_chroma_h = 1,
  742. .comp = {
  743. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  744. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  745. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  746. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  747. },
  748. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  749. },
  750. [AV_PIX_FMT_YUVA422P16BE] = {
  751. .name = "yuva422p16be",
  752. .nb_components = 4,
  753. .log2_chroma_w = 1,
  754. .log2_chroma_h = 0,
  755. .comp = {
  756. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  757. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  758. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  759. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  760. },
  761. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  762. },
  763. [AV_PIX_FMT_YUVA422P16LE] = {
  764. .name = "yuva422p16le",
  765. .nb_components = 4,
  766. .log2_chroma_w = 1,
  767. .log2_chroma_h = 0,
  768. .comp = {
  769. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  770. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  771. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  772. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  773. },
  774. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  775. },
  776. [AV_PIX_FMT_YUVA444P16BE] = {
  777. .name = "yuva444p16be",
  778. .nb_components = 4,
  779. .log2_chroma_w = 0,
  780. .log2_chroma_h = 0,
  781. .comp = {
  782. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  783. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  784. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  785. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  786. },
  787. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  788. },
  789. [AV_PIX_FMT_YUVA444P16LE] = {
  790. .name = "yuva444p16le",
  791. .nb_components = 4,
  792. .log2_chroma_w = 0,
  793. .log2_chroma_h = 0,
  794. .comp = {
  795. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  796. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  797. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  798. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  799. },
  800. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  801. },
  802. #if FF_API_VDPAU
  803. [AV_PIX_FMT_VDPAU_H264] = {
  804. .name = "vdpau_h264",
  805. .log2_chroma_w = 1,
  806. .log2_chroma_h = 1,
  807. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  808. },
  809. [AV_PIX_FMT_VDPAU_MPEG1] = {
  810. .name = "vdpau_mpeg1",
  811. .log2_chroma_w = 1,
  812. .log2_chroma_h = 1,
  813. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  814. },
  815. [AV_PIX_FMT_VDPAU_MPEG2] = {
  816. .name = "vdpau_mpeg2",
  817. .log2_chroma_w = 1,
  818. .log2_chroma_h = 1,
  819. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  820. },
  821. [AV_PIX_FMT_VDPAU_WMV3] = {
  822. .name = "vdpau_wmv3",
  823. .log2_chroma_w = 1,
  824. .log2_chroma_h = 1,
  825. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  826. },
  827. [AV_PIX_FMT_VDPAU_VC1] = {
  828. .name = "vdpau_vc1",
  829. .log2_chroma_w = 1,
  830. .log2_chroma_h = 1,
  831. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  832. },
  833. [AV_PIX_FMT_VDPAU_MPEG4] = {
  834. .name = "vdpau_mpeg4",
  835. .log2_chroma_w = 1,
  836. .log2_chroma_h = 1,
  837. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  838. },
  839. #endif
  840. [AV_PIX_FMT_RGB48BE] = {
  841. .name = "rgb48be",
  842. .nb_components = 3,
  843. .log2_chroma_w = 0,
  844. .log2_chroma_h = 0,
  845. .comp = {
  846. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
  847. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  848. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
  849. },
  850. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
  851. },
  852. [AV_PIX_FMT_RGB48LE] = {
  853. .name = "rgb48le",
  854. .nb_components = 3,
  855. .log2_chroma_w = 0,
  856. .log2_chroma_h = 0,
  857. .comp = {
  858. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
  859. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  860. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
  861. },
  862. .flags = AV_PIX_FMT_FLAG_RGB,
  863. },
  864. [AV_PIX_FMT_RGBA64BE] = {
  865. .name = "rgba64be",
  866. .nb_components = 4,
  867. .log2_chroma_w = 0,
  868. .log2_chroma_h = 0,
  869. .comp = {
  870. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
  871. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  872. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
  873. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  874. },
  875. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  876. },
  877. [AV_PIX_FMT_RGBA64LE] = {
  878. .name = "rgba64le",
  879. .nb_components = 4,
  880. .log2_chroma_w = 0,
  881. .log2_chroma_h = 0,
  882. .comp = {
  883. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
  884. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  885. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
  886. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  887. },
  888. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  889. },
  890. [AV_PIX_FMT_RGB565BE] = {
  891. .name = "rgb565be",
  892. .nb_components = 3,
  893. .log2_chroma_w = 0,
  894. .log2_chroma_h = 0,
  895. .comp = {
  896. { 0, 2, -1, 3, 5, 1, 4, 0 }, /* R */
  897. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  898. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  899. },
  900. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  901. },
  902. [AV_PIX_FMT_RGB565LE] = {
  903. .name = "rgb565le",
  904. .nb_components = 3,
  905. .log2_chroma_w = 0,
  906. .log2_chroma_h = 0,
  907. .comp = {
  908. { 0, 2, 1, 3, 5, 1, 4, 2 }, /* R */
  909. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  910. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  911. },
  912. .flags = AV_PIX_FMT_FLAG_RGB,
  913. },
  914. [AV_PIX_FMT_RGB555BE] = {
  915. .name = "rgb555be",
  916. .nb_components = 3,
  917. .log2_chroma_w = 0,
  918. .log2_chroma_h = 0,
  919. .comp = {
  920. { 0, 2, -1, 2, 5, 1, 4, 0 }, /* R */
  921. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  922. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  923. },
  924. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  925. },
  926. [AV_PIX_FMT_RGB555LE] = {
  927. .name = "rgb555le",
  928. .nb_components = 3,
  929. .log2_chroma_w = 0,
  930. .log2_chroma_h = 0,
  931. .comp = {
  932. { 0, 2, 1, 2, 5, 1, 4, 2 }, /* R */
  933. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  934. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  935. },
  936. .flags = AV_PIX_FMT_FLAG_RGB,
  937. },
  938. [AV_PIX_FMT_RGB444BE] = {
  939. .name = "rgb444be",
  940. .nb_components = 3,
  941. .log2_chroma_w = 0,
  942. .log2_chroma_h = 0,
  943. .comp = {
  944. { 0, 2, -1, 0, 4, 1, 3, 0 }, /* R */
  945. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  946. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
  947. },
  948. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  949. },
  950. [AV_PIX_FMT_RGB444LE] = {
  951. .name = "rgb444le",
  952. .nb_components = 3,
  953. .log2_chroma_w = 0,
  954. .log2_chroma_h = 0,
  955. .comp = {
  956. { 0, 2, 1, 0, 4, 1, 3, 2 }, /* R */
  957. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  958. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
  959. },
  960. .flags = AV_PIX_FMT_FLAG_RGB,
  961. },
  962. [AV_PIX_FMT_BGR48BE] = {
  963. .name = "bgr48be",
  964. .nb_components = 3,
  965. .log2_chroma_w = 0,
  966. .log2_chroma_h = 0,
  967. .comp = {
  968. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
  969. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  970. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
  971. },
  972. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  973. },
  974. [AV_PIX_FMT_BGR48LE] = {
  975. .name = "bgr48le",
  976. .nb_components = 3,
  977. .log2_chroma_w = 0,
  978. .log2_chroma_h = 0,
  979. .comp = {
  980. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
  981. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  982. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
  983. },
  984. .flags = AV_PIX_FMT_FLAG_RGB,
  985. },
  986. [AV_PIX_FMT_BGRA64BE] = {
  987. .name = "bgra64be",
  988. .nb_components = 4,
  989. .log2_chroma_w = 0,
  990. .log2_chroma_h = 0,
  991. .comp = {
  992. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
  993. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  994. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
  995. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  996. },
  997. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  998. },
  999. [AV_PIX_FMT_BGRA64LE] = {
  1000. .name = "bgra64le",
  1001. .nb_components = 4,
  1002. .log2_chroma_w = 0,
  1003. .log2_chroma_h = 0,
  1004. .comp = {
  1005. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
  1006. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  1007. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
  1008. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  1009. },
  1010. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1011. },
  1012. [AV_PIX_FMT_BGR565BE] = {
  1013. .name = "bgr565be",
  1014. .nb_components = 3,
  1015. .log2_chroma_w = 0,
  1016. .log2_chroma_h = 0,
  1017. .comp = {
  1018. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1019. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  1020. { 0, 2, -1, 3, 5, 1, 4, 0 }, /* B */
  1021. },
  1022. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  1023. },
  1024. [AV_PIX_FMT_BGR565LE] = {
  1025. .name = "bgr565le",
  1026. .nb_components = 3,
  1027. .log2_chroma_w = 0,
  1028. .log2_chroma_h = 0,
  1029. .comp = {
  1030. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1031. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  1032. { 0, 2, 1, 3, 5, 1, 4, 2 }, /* B */
  1033. },
  1034. .flags = AV_PIX_FMT_FLAG_RGB,
  1035. },
  1036. [AV_PIX_FMT_BGR555BE] = {
  1037. .name = "bgr555be",
  1038. .nb_components = 3,
  1039. .log2_chroma_w = 0,
  1040. .log2_chroma_h = 0,
  1041. .comp = {
  1042. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1043. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  1044. { 0, 2, -1, 2, 5, 1, 4, 0 }, /* B */
  1045. },
  1046. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  1047. },
  1048. [AV_PIX_FMT_BGR555LE] = {
  1049. .name = "bgr555le",
  1050. .nb_components = 3,
  1051. .log2_chroma_w = 0,
  1052. .log2_chroma_h = 0,
  1053. .comp = {
  1054. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1055. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  1056. { 0, 2, 1, 2, 5, 1, 4, 2 }, /* B */
  1057. },
  1058. .flags = AV_PIX_FMT_FLAG_RGB,
  1059. },
  1060. [AV_PIX_FMT_BGR444BE] = {
  1061. .name = "bgr444be",
  1062. .nb_components = 3,
  1063. .log2_chroma_w = 0,
  1064. .log2_chroma_h = 0,
  1065. .comp = {
  1066. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
  1067. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  1068. { 0, 2, -1, 0, 4, 1, 3, 0 }, /* B */
  1069. },
  1070. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  1071. },
  1072. [AV_PIX_FMT_BGR444LE] = {
  1073. .name = "bgr444le",
  1074. .nb_components = 3,
  1075. .log2_chroma_w = 0,
  1076. .log2_chroma_h = 0,
  1077. .comp = {
  1078. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
  1079. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  1080. { 0, 2, 1, 0, 4, 1, 3, 2 }, /* B */
  1081. },
  1082. .flags = AV_PIX_FMT_FLAG_RGB,
  1083. },
  1084. #if FF_API_VAAPI
  1085. [AV_PIX_FMT_VAAPI_MOCO] = {
  1086. .name = "vaapi_moco",
  1087. .log2_chroma_w = 1,
  1088. .log2_chroma_h = 1,
  1089. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1090. },
  1091. [AV_PIX_FMT_VAAPI_IDCT] = {
  1092. .name = "vaapi_idct",
  1093. .log2_chroma_w = 1,
  1094. .log2_chroma_h = 1,
  1095. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1096. },
  1097. [AV_PIX_FMT_VAAPI_VLD] = {
  1098. .name = "vaapi_vld",
  1099. .log2_chroma_w = 1,
  1100. .log2_chroma_h = 1,
  1101. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1102. },
  1103. #else
  1104. [AV_PIX_FMT_VAAPI] = {
  1105. .name = "vaapi",
  1106. .log2_chroma_w = 1,
  1107. .log2_chroma_h = 1,
  1108. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1109. },
  1110. #endif
  1111. [AV_PIX_FMT_VDA_VLD] = {
  1112. .name = "vda_vld",
  1113. .log2_chroma_w = 1,
  1114. .log2_chroma_h = 1,
  1115. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1116. },
  1117. [AV_PIX_FMT_YUV420P9LE] = {
  1118. .name = "yuv420p9le",
  1119. .nb_components = 3,
  1120. .log2_chroma_w = 1,
  1121. .log2_chroma_h = 1,
  1122. .comp = {
  1123. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1124. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1125. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1126. },
  1127. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1128. },
  1129. [AV_PIX_FMT_YUV420P9BE] = {
  1130. .name = "yuv420p9be",
  1131. .nb_components = 3,
  1132. .log2_chroma_w = 1,
  1133. .log2_chroma_h = 1,
  1134. .comp = {
  1135. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1136. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1137. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1138. },
  1139. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1140. },
  1141. [AV_PIX_FMT_YUV420P10LE] = {
  1142. .name = "yuv420p10le",
  1143. .nb_components = 3,
  1144. .log2_chroma_w = 1,
  1145. .log2_chroma_h = 1,
  1146. .comp = {
  1147. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1148. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1149. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1150. },
  1151. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1152. },
  1153. [AV_PIX_FMT_YUV420P10BE] = {
  1154. .name = "yuv420p10be",
  1155. .nb_components = 3,
  1156. .log2_chroma_w = 1,
  1157. .log2_chroma_h = 1,
  1158. .comp = {
  1159. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1160. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1161. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1162. },
  1163. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1164. },
  1165. [AV_PIX_FMT_YUV420P16LE] = {
  1166. .name = "yuv420p16le",
  1167. .nb_components = 3,
  1168. .log2_chroma_w = 1,
  1169. .log2_chroma_h = 1,
  1170. .comp = {
  1171. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1172. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1173. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1174. },
  1175. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1176. },
  1177. [AV_PIX_FMT_YUV420P16BE] = {
  1178. .name = "yuv420p16be",
  1179. .nb_components = 3,
  1180. .log2_chroma_w = 1,
  1181. .log2_chroma_h = 1,
  1182. .comp = {
  1183. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1184. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1185. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1186. },
  1187. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1188. },
  1189. [AV_PIX_FMT_YUV422P9LE] = {
  1190. .name = "yuv422p9le",
  1191. .nb_components = 3,
  1192. .log2_chroma_w = 1,
  1193. .log2_chroma_h = 0,
  1194. .comp = {
  1195. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1196. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1197. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1198. },
  1199. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1200. },
  1201. [AV_PIX_FMT_YUV422P9BE] = {
  1202. .name = "yuv422p9be",
  1203. .nb_components = 3,
  1204. .log2_chroma_w = 1,
  1205. .log2_chroma_h = 0,
  1206. .comp = {
  1207. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1208. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1209. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1210. },
  1211. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1212. },
  1213. [AV_PIX_FMT_YUV422P10LE] = {
  1214. .name = "yuv422p10le",
  1215. .nb_components = 3,
  1216. .log2_chroma_w = 1,
  1217. .log2_chroma_h = 0,
  1218. .comp = {
  1219. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1220. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1221. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1222. },
  1223. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1224. },
  1225. [AV_PIX_FMT_YUV422P10BE] = {
  1226. .name = "yuv422p10be",
  1227. .nb_components = 3,
  1228. .log2_chroma_w = 1,
  1229. .log2_chroma_h = 0,
  1230. .comp = {
  1231. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1232. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1233. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1234. },
  1235. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1236. },
  1237. [AV_PIX_FMT_YUV422P16LE] = {
  1238. .name = "yuv422p16le",
  1239. .nb_components = 3,
  1240. .log2_chroma_w = 1,
  1241. .log2_chroma_h = 0,
  1242. .comp = {
  1243. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1244. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1245. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1246. },
  1247. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1248. },
  1249. [AV_PIX_FMT_YUV422P16BE] = {
  1250. .name = "yuv422p16be",
  1251. .nb_components = 3,
  1252. .log2_chroma_w = 1,
  1253. .log2_chroma_h = 0,
  1254. .comp = {
  1255. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1256. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1257. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1258. },
  1259. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1260. },
  1261. [AV_PIX_FMT_YUV444P16LE] = {
  1262. .name = "yuv444p16le",
  1263. .nb_components = 3,
  1264. .log2_chroma_w = 0,
  1265. .log2_chroma_h = 0,
  1266. .comp = {
  1267. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1268. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1269. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1270. },
  1271. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1272. },
  1273. [AV_PIX_FMT_YUV444P16BE] = {
  1274. .name = "yuv444p16be",
  1275. .nb_components = 3,
  1276. .log2_chroma_w = 0,
  1277. .log2_chroma_h = 0,
  1278. .comp = {
  1279. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1280. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1281. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1282. },
  1283. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1284. },
  1285. [AV_PIX_FMT_YUV444P10LE] = {
  1286. .name = "yuv444p10le",
  1287. .nb_components = 3,
  1288. .log2_chroma_w = 0,
  1289. .log2_chroma_h = 0,
  1290. .comp = {
  1291. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1292. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1293. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1294. },
  1295. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1296. },
  1297. [AV_PIX_FMT_YUV444P10BE] = {
  1298. .name = "yuv444p10be",
  1299. .nb_components = 3,
  1300. .log2_chroma_w = 0,
  1301. .log2_chroma_h = 0,
  1302. .comp = {
  1303. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1304. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1305. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1306. },
  1307. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1308. },
  1309. [AV_PIX_FMT_YUV444P9LE] = {
  1310. .name = "yuv444p9le",
  1311. .nb_components = 3,
  1312. .log2_chroma_w = 0,
  1313. .log2_chroma_h = 0,
  1314. .comp = {
  1315. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1316. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1317. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1318. },
  1319. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1320. },
  1321. [AV_PIX_FMT_YUV444P9BE] = {
  1322. .name = "yuv444p9be",
  1323. .nb_components = 3,
  1324. .log2_chroma_w = 0,
  1325. .log2_chroma_h = 0,
  1326. .comp = {
  1327. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1328. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1329. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1330. },
  1331. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1332. },
  1333. [AV_PIX_FMT_D3D11VA_VLD] = {
  1334. .name = "d3d11va_vld",
  1335. .log2_chroma_w = 1,
  1336. .log2_chroma_h = 1,
  1337. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1338. },
  1339. [AV_PIX_FMT_DXVA2_VLD] = {
  1340. .name = "dxva2_vld",
  1341. .log2_chroma_w = 1,
  1342. .log2_chroma_h = 1,
  1343. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1344. },
  1345. [AV_PIX_FMT_YA8] = {
  1346. .name = "ya8",
  1347. .nb_components = 2,
  1348. .comp = {
  1349. { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
  1350. { 0, 2, 1, 0, 8, 1, 7, 2 }, /* A */
  1351. },
  1352. .flags = AV_PIX_FMT_FLAG_ALPHA,
  1353. .alias = "gray8a",
  1354. },
  1355. [AV_PIX_FMT_YA16LE] = {
  1356. .name = "ya16le",
  1357. .nb_components = 2,
  1358. .comp = {
  1359. { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
  1360. { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
  1361. },
  1362. .flags = AV_PIX_FMT_FLAG_ALPHA,
  1363. },
  1364. [AV_PIX_FMT_YA16BE] = {
  1365. .name = "ya16be",
  1366. .nb_components = 2,
  1367. .comp = {
  1368. { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
  1369. { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
  1370. },
  1371. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
  1372. },
  1373. [AV_PIX_FMT_GBRP] = {
  1374. .name = "gbrp",
  1375. .nb_components = 3,
  1376. .log2_chroma_w = 0,
  1377. .log2_chroma_h = 0,
  1378. .comp = {
  1379. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
  1380. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
  1381. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
  1382. },
  1383. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1384. },
  1385. [AV_PIX_FMT_GBRP9LE] = {
  1386. .name = "gbrp9le",
  1387. .nb_components = 3,
  1388. .log2_chroma_w = 0,
  1389. .log2_chroma_h = 0,
  1390. .comp = {
  1391. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
  1392. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
  1393. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
  1394. },
  1395. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1396. },
  1397. [AV_PIX_FMT_GBRP9BE] = {
  1398. .name = "gbrp9be",
  1399. .nb_components = 3,
  1400. .log2_chroma_w = 0,
  1401. .log2_chroma_h = 0,
  1402. .comp = {
  1403. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
  1404. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
  1405. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
  1406. },
  1407. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1408. },
  1409. [AV_PIX_FMT_GBRP10LE] = {
  1410. .name = "gbrp10le",
  1411. .nb_components = 3,
  1412. .log2_chroma_w = 0,
  1413. .log2_chroma_h = 0,
  1414. .comp = {
  1415. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
  1416. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
  1417. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
  1418. },
  1419. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1420. },
  1421. [AV_PIX_FMT_GBRP10BE] = {
  1422. .name = "gbrp10be",
  1423. .nb_components = 3,
  1424. .log2_chroma_w = 0,
  1425. .log2_chroma_h = 0,
  1426. .comp = {
  1427. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
  1428. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
  1429. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
  1430. },
  1431. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1432. },
  1433. [AV_PIX_FMT_GBRP16LE] = {
  1434. .name = "gbrp16le",
  1435. .nb_components = 3,
  1436. .log2_chroma_w = 0,
  1437. .log2_chroma_h = 0,
  1438. .comp = {
  1439. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1440. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1441. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1442. },
  1443. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1444. },
  1445. [AV_PIX_FMT_GBRP16BE] = {
  1446. .name = "gbrp16be",
  1447. .nb_components = 3,
  1448. .log2_chroma_w = 0,
  1449. .log2_chroma_h = 0,
  1450. .comp = {
  1451. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1452. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1453. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1454. },
  1455. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1456. },
  1457. [AV_PIX_FMT_GBRAP] = {
  1458. .name = "gbrap",
  1459. .nb_components = 4,
  1460. .log2_chroma_w = 0,
  1461. .log2_chroma_h = 0,
  1462. .comp = {
  1463. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
  1464. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
  1465. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
  1466. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  1467. },
  1468. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1469. AV_PIX_FMT_FLAG_ALPHA,
  1470. },
  1471. [AV_PIX_FMT_GBRAP16LE] = {
  1472. .name = "gbrap16le",
  1473. .nb_components = 4,
  1474. .log2_chroma_w = 0,
  1475. .log2_chroma_h = 0,
  1476. .comp = {
  1477. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1478. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1479. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1480. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  1481. },
  1482. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1483. AV_PIX_FMT_FLAG_ALPHA,
  1484. },
  1485. [AV_PIX_FMT_GBRAP16BE] = {
  1486. .name = "gbrap16be",
  1487. .nb_components = 4,
  1488. .log2_chroma_w = 0,
  1489. .log2_chroma_h = 0,
  1490. .comp = {
  1491. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1492. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1493. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1494. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  1495. },
  1496. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
  1497. AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1498. },
  1499. [AV_PIX_FMT_VDPAU] = {
  1500. .name = "vdpau",
  1501. .log2_chroma_w = 1,
  1502. .log2_chroma_h = 1,
  1503. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1504. },
  1505. [AV_PIX_FMT_XYZ12LE] = {
  1506. .name = "xyz12le",
  1507. .nb_components = 3,
  1508. .log2_chroma_w = 0,
  1509. .log2_chroma_h = 0,
  1510. .comp = {
  1511. { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
  1512. { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
  1513. { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
  1514. },
  1515. /*.flags = -- not used*/
  1516. },
  1517. [AV_PIX_FMT_XYZ12BE] = {
  1518. .name = "xyz12be",
  1519. .nb_components = 3,
  1520. .log2_chroma_w = 0,
  1521. .log2_chroma_h = 0,
  1522. .comp = {
  1523. { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
  1524. { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
  1525. { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
  1526. },
  1527. .flags = AV_PIX_FMT_FLAG_BE,
  1528. },
  1529. [AV_PIX_FMT_NV16] = {
  1530. .name = "nv16",
  1531. .nb_components = 3,
  1532. .log2_chroma_w = 1,
  1533. .log2_chroma_h = 0,
  1534. .comp = {
  1535. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  1536. { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
  1537. { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
  1538. },
  1539. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1540. },
  1541. [AV_PIX_FMT_NV20LE] = {
  1542. .name = "nv20le",
  1543. .nb_components = 3,
  1544. .log2_chroma_w = 1,
  1545. .log2_chroma_h = 0,
  1546. .comp = {
  1547. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1548. { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
  1549. { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
  1550. },
  1551. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1552. },
  1553. [AV_PIX_FMT_NV20BE] = {
  1554. .name = "nv20be",
  1555. .nb_components = 3,
  1556. .log2_chroma_w = 1,
  1557. .log2_chroma_h = 0,
  1558. .comp = {
  1559. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1560. { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
  1561. { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
  1562. },
  1563. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
  1564. },
  1565. [AV_PIX_FMT_VDA] = {
  1566. .name = "vda",
  1567. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1568. },
  1569. [AV_PIX_FMT_QSV] = {
  1570. .name = "qsv",
  1571. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1572. },
  1573. [AV_PIX_FMT_MMAL] = {
  1574. .name = "mmal",
  1575. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1576. },
  1577. [AV_PIX_FMT_CUDA] = {
  1578. .name = "cuda",
  1579. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1580. },
  1581. };
  1582. #if FF_API_PLUS1_MINUS1
  1583. FF_ENABLE_DEPRECATION_WARNINGS
  1584. #endif
  1585. static const char *color_range_names[] = {
  1586. [AVCOL_RANGE_UNSPECIFIED] = "unknown",
  1587. [AVCOL_RANGE_MPEG] = "tv",
  1588. [AVCOL_RANGE_JPEG] = "pc",
  1589. };
  1590. static const char *color_primaries_names[] = {
  1591. [AVCOL_PRI_RESERVED0] = "reserved",
  1592. [AVCOL_PRI_BT709] = "bt709",
  1593. [AVCOL_PRI_UNSPECIFIED] = "unknown",
  1594. [AVCOL_PRI_RESERVED] = "reserved",
  1595. [AVCOL_PRI_BT470M] = "bt470m",
  1596. [AVCOL_PRI_BT470BG] = "bt470bg",
  1597. [AVCOL_PRI_SMPTE170M] = "smpte170m",
  1598. [AVCOL_PRI_SMPTE240M] = "smpte240m",
  1599. [AVCOL_PRI_FILM] = "film",
  1600. [AVCOL_PRI_BT2020] = "bt2020",
  1601. [AVCOL_PRI_SMPTE428] = "smpte428",
  1602. [AVCOL_PRI_SMPTE431] = "smpte431",
  1603. [AVCOL_PRI_SMPTE432] = "smpte432",
  1604. };
  1605. static const char *color_transfer_names[] = {
  1606. [AVCOL_TRC_RESERVED0] = "reserved",
  1607. [AVCOL_TRC_BT709] = "bt709",
  1608. [AVCOL_TRC_UNSPECIFIED] = "unknown",
  1609. [AVCOL_TRC_RESERVED] = "reserved",
  1610. [AVCOL_TRC_GAMMA22] = "bt470m",
  1611. [AVCOL_TRC_GAMMA28] = "bt470bg",
  1612. [AVCOL_TRC_SMPTE170M] = "smpte170m",
  1613. [AVCOL_TRC_SMPTE240M] = "smpte240m",
  1614. [AVCOL_TRC_LINEAR] = "linear",
  1615. [AVCOL_TRC_LOG] = "log100",
  1616. [AVCOL_TRC_LOG_SQRT] = "log316",
  1617. [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
  1618. [AVCOL_TRC_BT1361_ECG] = "bt1361e",
  1619. [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
  1620. [AVCOL_TRC_BT2020_10] = "bt2020-10",
  1621. [AVCOL_TRC_BT2020_12] = "bt2020-12",
  1622. [AVCOL_TRC_SMPTE2084] = "smpte2084",
  1623. [AVCOL_TRC_SMPTE428] = "smpte428",
  1624. [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
  1625. };
  1626. static const char *color_space_names[] = {
  1627. [AVCOL_SPC_RGB] = "gbr",
  1628. [AVCOL_SPC_BT709] = "bt709",
  1629. [AVCOL_SPC_UNSPECIFIED] = "unknown",
  1630. [AVCOL_SPC_RESERVED] = "reserved",
  1631. [AVCOL_SPC_FCC] = "fcc",
  1632. [AVCOL_SPC_BT470BG] = "bt470bg",
  1633. [AVCOL_SPC_SMPTE170M] = "smpte170m",
  1634. [AVCOL_SPC_SMPTE240M] = "smpte240m",
  1635. [AVCOL_SPC_YCOCG] = "ycgco",
  1636. [AVCOL_SPC_BT2020_NCL] = "bt2020nc",
  1637. [AVCOL_SPC_BT2020_CL] = "bt2020c",
  1638. [AVCOL_SPC_SMPTE2085] = "smpte2085",
  1639. };
  1640. static const char *chroma_location_names[] = {
  1641. [AVCHROMA_LOC_UNSPECIFIED] = "unspecified",
  1642. [AVCHROMA_LOC_LEFT] = "left",
  1643. [AVCHROMA_LOC_CENTER] = "center",
  1644. [AVCHROMA_LOC_TOPLEFT] = "topleft",
  1645. [AVCHROMA_LOC_TOP] = "top",
  1646. [AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft",
  1647. [AVCHROMA_LOC_BOTTOM] = "bottom",
  1648. };
  1649. static enum AVPixelFormat get_pix_fmt_internal(const char *name)
  1650. {
  1651. enum AVPixelFormat pix_fmt;
  1652. for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
  1653. if (av_pix_fmt_descriptors[pix_fmt].name &&
  1654. (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
  1655. av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
  1656. return pix_fmt;
  1657. return AV_PIX_FMT_NONE;
  1658. }
  1659. const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
  1660. {
  1661. return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
  1662. av_pix_fmt_descriptors[pix_fmt].name : NULL;
  1663. }
  1664. #if HAVE_BIGENDIAN
  1665. # define X_NE(be, le) be
  1666. #else
  1667. # define X_NE(be, le) le
  1668. #endif
  1669. enum AVPixelFormat av_get_pix_fmt(const char *name)
  1670. {
  1671. enum AVPixelFormat pix_fmt;
  1672. if (!strcmp(name, "rgb32"))
  1673. name = X_NE("argb", "bgra");
  1674. else if (!strcmp(name, "bgr32"))
  1675. name = X_NE("abgr", "rgba");
  1676. pix_fmt = get_pix_fmt_internal(name);
  1677. if (pix_fmt == AV_PIX_FMT_NONE) {
  1678. char name2[32];
  1679. snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
  1680. pix_fmt = get_pix_fmt_internal(name2);
  1681. }
  1682. #if FF_API_VAAPI
  1683. if (pix_fmt == AV_PIX_FMT_NONE && !strcmp(name, "vaapi"))
  1684. pix_fmt = AV_PIX_FMT_VAAPI;
  1685. #endif
  1686. return pix_fmt;
  1687. }
  1688. int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
  1689. {
  1690. int c, bits = 0;
  1691. int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
  1692. for (c = 0; c < pixdesc->nb_components; c++) {
  1693. int s = c == 1 || c == 2 ? 0 : log2_pixels;
  1694. bits += pixdesc->comp[c].depth << s;
  1695. }
  1696. return bits >> log2_pixels;
  1697. }
  1698. char *av_get_pix_fmt_string(char *buf, int buf_size,
  1699. enum AVPixelFormat pix_fmt)
  1700. {
  1701. /* print header */
  1702. if (pix_fmt < 0) {
  1703. snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
  1704. } else {
  1705. const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
  1706. snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
  1707. pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
  1708. }
  1709. return buf;
  1710. }
  1711. const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
  1712. {
  1713. if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
  1714. return NULL;
  1715. return &av_pix_fmt_descriptors[pix_fmt];
  1716. }
  1717. const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
  1718. {
  1719. if (!prev)
  1720. return &av_pix_fmt_descriptors[0];
  1721. if (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1)
  1722. return prev + 1;
  1723. return NULL;
  1724. }
  1725. enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
  1726. {
  1727. if (desc < av_pix_fmt_descriptors ||
  1728. desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
  1729. return AV_PIX_FMT_NONE;
  1730. return desc - av_pix_fmt_descriptors;
  1731. }
  1732. int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
  1733. int *h_shift, int *v_shift)
  1734. {
  1735. const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
  1736. if (!desc)
  1737. return AVERROR(ENOSYS);
  1738. *h_shift = desc->log2_chroma_w;
  1739. *v_shift = desc->log2_chroma_h;
  1740. return 0;
  1741. }
  1742. int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
  1743. {
  1744. const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
  1745. int i, planes[4] = { 0 }, ret = 0;
  1746. if (!desc)
  1747. return AVERROR(EINVAL);
  1748. for (i = 0; i < desc->nb_components; i++)
  1749. planes[desc->comp[i].plane] = 1;
  1750. for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
  1751. ret += planes[i];
  1752. return ret;
  1753. }
  1754. enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
  1755. {
  1756. #define PIX_FMT_SWAP_ENDIANNESS(fmt) \
  1757. case AV_PIX_FMT_ ## fmt ## BE: return AV_PIX_FMT_ ## fmt ## LE; \
  1758. case AV_PIX_FMT_ ## fmt ## LE: return AV_PIX_FMT_ ## fmt ## BE
  1759. switch (pix_fmt) {
  1760. PIX_FMT_SWAP_ENDIANNESS(GRAY16);
  1761. PIX_FMT_SWAP_ENDIANNESS(YA16);
  1762. PIX_FMT_SWAP_ENDIANNESS(RGB48);
  1763. PIX_FMT_SWAP_ENDIANNESS(RGB565);
  1764. PIX_FMT_SWAP_ENDIANNESS(RGB555);
  1765. PIX_FMT_SWAP_ENDIANNESS(RGB444);
  1766. PIX_FMT_SWAP_ENDIANNESS(BGR48);
  1767. PIX_FMT_SWAP_ENDIANNESS(BGR565);
  1768. PIX_FMT_SWAP_ENDIANNESS(BGR555);
  1769. PIX_FMT_SWAP_ENDIANNESS(BGR444);
  1770. PIX_FMT_SWAP_ENDIANNESS(YUV420P9);
  1771. PIX_FMT_SWAP_ENDIANNESS(YUV422P9);
  1772. PIX_FMT_SWAP_ENDIANNESS(YUV444P9);
  1773. PIX_FMT_SWAP_ENDIANNESS(YUV420P10);
  1774. PIX_FMT_SWAP_ENDIANNESS(YUV422P10);
  1775. PIX_FMT_SWAP_ENDIANNESS(YUV444P10);
  1776. PIX_FMT_SWAP_ENDIANNESS(YUV420P16);
  1777. PIX_FMT_SWAP_ENDIANNESS(YUV422P16);
  1778. PIX_FMT_SWAP_ENDIANNESS(YUV444P16);
  1779. PIX_FMT_SWAP_ENDIANNESS(GBRP9);
  1780. PIX_FMT_SWAP_ENDIANNESS(GBRP10);
  1781. PIX_FMT_SWAP_ENDIANNESS(GBRP16);
  1782. PIX_FMT_SWAP_ENDIANNESS(YUVA420P9);
  1783. PIX_FMT_SWAP_ENDIANNESS(YUVA422P9);
  1784. PIX_FMT_SWAP_ENDIANNESS(YUVA444P9);
  1785. PIX_FMT_SWAP_ENDIANNESS(YUVA420P10);
  1786. PIX_FMT_SWAP_ENDIANNESS(YUVA422P10);
  1787. PIX_FMT_SWAP_ENDIANNESS(YUVA444P10);
  1788. PIX_FMT_SWAP_ENDIANNESS(YUVA420P16);
  1789. PIX_FMT_SWAP_ENDIANNESS(YUVA422P16);
  1790. PIX_FMT_SWAP_ENDIANNESS(YUVA444P16);
  1791. PIX_FMT_SWAP_ENDIANNESS(XYZ12);
  1792. PIX_FMT_SWAP_ENDIANNESS(NV20);
  1793. PIX_FMT_SWAP_ENDIANNESS(RGBA64);
  1794. PIX_FMT_SWAP_ENDIANNESS(BGRA64);
  1795. default:
  1796. return AV_PIX_FMT_NONE;
  1797. }
  1798. #undef PIX_FMT_SWAP_ENDIANNESS
  1799. }
  1800. const char *av_color_range_name(enum AVColorRange range)
  1801. {
  1802. return (unsigned) range < AVCOL_RANGE_NB ?
  1803. color_range_names[range] : NULL;
  1804. }
  1805. const char *av_color_primaries_name(enum AVColorPrimaries primaries)
  1806. {
  1807. return (unsigned) primaries < AVCOL_PRI_NB ?
  1808. color_primaries_names[primaries] : NULL;
  1809. }
  1810. const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
  1811. {
  1812. return (unsigned) transfer < AVCOL_TRC_NB ?
  1813. color_transfer_names[transfer] : NULL;
  1814. }
  1815. const char *av_color_space_name(enum AVColorSpace space)
  1816. {
  1817. return (unsigned) space < AVCOL_SPC_NB ?
  1818. color_space_names[space] : NULL;
  1819. }
  1820. const char *av_chroma_location_name(enum AVChromaLocation location)
  1821. {
  1822. return (unsigned) location < AVCHROMA_LOC_NB ?
  1823. chroma_location_names[location] : NULL;
  1824. }