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.

2053 lines
65KB

  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_GRAY12BE] = {
  485. .name = "gray12be",
  486. .nb_components = 1,
  487. .log2_chroma_w = 0,
  488. .log2_chroma_h = 0,
  489. .comp = {
  490. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  491. },
  492. .flags = AV_PIX_FMT_FLAG_BE,
  493. .alias = "y12be",
  494. },
  495. [AV_PIX_FMT_GRAY12LE] = {
  496. .name = "gray12le",
  497. .nb_components = 1,
  498. .log2_chroma_w = 0,
  499. .log2_chroma_h = 0,
  500. .comp = {
  501. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  502. },
  503. .alias = "y12le",
  504. },
  505. [AV_PIX_FMT_GRAY16BE] = {
  506. .name = "gray16be",
  507. .nb_components = 1,
  508. .log2_chroma_w = 0,
  509. .log2_chroma_h = 0,
  510. .comp = {
  511. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  512. },
  513. .flags = AV_PIX_FMT_FLAG_BE,
  514. .alias = "y16be",
  515. },
  516. [AV_PIX_FMT_GRAY16LE] = {
  517. .name = "gray16le",
  518. .nb_components = 1,
  519. .log2_chroma_w = 0,
  520. .log2_chroma_h = 0,
  521. .comp = {
  522. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  523. },
  524. .alias = "y16le",
  525. },
  526. [AV_PIX_FMT_YUV440P] = {
  527. .name = "yuv440p",
  528. .nb_components = 3,
  529. .log2_chroma_w = 0,
  530. .log2_chroma_h = 1,
  531. .comp = {
  532. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  533. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  534. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  535. },
  536. .flags = AV_PIX_FMT_FLAG_PLANAR,
  537. },
  538. [AV_PIX_FMT_YUVJ440P] = {
  539. .name = "yuvj440p",
  540. .nb_components = 3,
  541. .log2_chroma_w = 0,
  542. .log2_chroma_h = 1,
  543. .comp = {
  544. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  545. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  546. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  547. },
  548. .flags = AV_PIX_FMT_FLAG_PLANAR,
  549. },
  550. [AV_PIX_FMT_YUVA420P] = {
  551. .name = "yuva420p",
  552. .nb_components = 4,
  553. .log2_chroma_w = 1,
  554. .log2_chroma_h = 1,
  555. .comp = {
  556. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  557. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  558. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  559. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  560. },
  561. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  562. },
  563. [AV_PIX_FMT_YUVA422P] = {
  564. .name = "yuva422p",
  565. .nb_components = 4,
  566. .log2_chroma_w = 1,
  567. .log2_chroma_h = 0,
  568. .comp = {
  569. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  570. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  571. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  572. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  573. },
  574. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  575. },
  576. [AV_PIX_FMT_YUVA444P] = {
  577. .name = "yuva444p",
  578. .nb_components = 4,
  579. .log2_chroma_w = 0,
  580. .log2_chroma_h = 0,
  581. .comp = {
  582. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  583. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* U */
  584. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* V */
  585. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  586. },
  587. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  588. },
  589. [AV_PIX_FMT_YUVA420P9BE] = {
  590. .name = "yuva420p9be",
  591. .nb_components = 4,
  592. .log2_chroma_w = 1,
  593. .log2_chroma_h = 1,
  594. .comp = {
  595. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  596. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  597. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  598. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  599. },
  600. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  601. },
  602. [AV_PIX_FMT_YUVA420P9LE] = {
  603. .name = "yuva420p9le",
  604. .nb_components = 4,
  605. .log2_chroma_w = 1,
  606. .log2_chroma_h = 1,
  607. .comp = {
  608. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  609. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  610. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  611. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  612. },
  613. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  614. },
  615. [AV_PIX_FMT_YUVA422P9BE] = {
  616. .name = "yuva422p9be",
  617. .nb_components = 4,
  618. .log2_chroma_w = 1,
  619. .log2_chroma_h = 0,
  620. .comp = {
  621. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  622. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  623. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  624. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  625. },
  626. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  627. },
  628. [AV_PIX_FMT_YUVA422P9LE] = {
  629. .name = "yuva422p9le",
  630. .nb_components = 4,
  631. .log2_chroma_w = 1,
  632. .log2_chroma_h = 0,
  633. .comp = {
  634. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  635. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  636. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  637. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  638. },
  639. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  640. },
  641. [AV_PIX_FMT_YUVA444P9BE] = {
  642. .name = "yuva444p9be",
  643. .nb_components = 4,
  644. .log2_chroma_w = 0,
  645. .log2_chroma_h = 0,
  646. .comp = {
  647. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  648. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  649. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  650. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  651. },
  652. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  653. },
  654. [AV_PIX_FMT_YUVA444P9LE] = {
  655. .name = "yuva444p9le",
  656. .nb_components = 4,
  657. .log2_chroma_w = 0,
  658. .log2_chroma_h = 0,
  659. .comp = {
  660. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  661. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  662. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  663. { 3, 2, 0, 0, 9, 1, 8, 1 }, /* A */
  664. },
  665. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  666. },
  667. [AV_PIX_FMT_YUVA420P10BE] = {
  668. .name = "yuva420p10be",
  669. .nb_components = 4,
  670. .log2_chroma_w = 1,
  671. .log2_chroma_h = 1,
  672. .comp = {
  673. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  674. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  675. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  676. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  677. },
  678. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  679. },
  680. [AV_PIX_FMT_YUVA420P10LE] = {
  681. .name = "yuva420p10le",
  682. .nb_components = 4,
  683. .log2_chroma_w = 1,
  684. .log2_chroma_h = 1,
  685. .comp = {
  686. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  687. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  688. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  689. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  690. },
  691. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  692. },
  693. [AV_PIX_FMT_YUVA422P10BE] = {
  694. .name = "yuva422p10be",
  695. .nb_components = 4,
  696. .log2_chroma_w = 1,
  697. .log2_chroma_h = 0,
  698. .comp = {
  699. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  700. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  701. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  702. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  703. },
  704. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  705. },
  706. [AV_PIX_FMT_YUVA422P10LE] = {
  707. .name = "yuva422p10le",
  708. .nb_components = 4,
  709. .log2_chroma_w = 1,
  710. .log2_chroma_h = 0,
  711. .comp = {
  712. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  713. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  714. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  715. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  716. },
  717. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  718. },
  719. [AV_PIX_FMT_YUVA444P10BE] = {
  720. .name = "yuva444p10be",
  721. .nb_components = 4,
  722. .log2_chroma_w = 0,
  723. .log2_chroma_h = 0,
  724. .comp = {
  725. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  726. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  727. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  728. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  729. },
  730. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  731. },
  732. [AV_PIX_FMT_YUVA444P10LE] = {
  733. .name = "yuva444p10le",
  734. .nb_components = 4,
  735. .log2_chroma_w = 0,
  736. .log2_chroma_h = 0,
  737. .comp = {
  738. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  739. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  740. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  741. { 3, 2, 0, 0, 10, 1, 9, 1 }, /* A */
  742. },
  743. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  744. },
  745. [AV_PIX_FMT_YUVA420P16BE] = {
  746. .name = "yuva420p16be",
  747. .nb_components = 4,
  748. .log2_chroma_w = 1,
  749. .log2_chroma_h = 1,
  750. .comp = {
  751. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  752. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  753. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  754. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  755. },
  756. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  757. },
  758. [AV_PIX_FMT_YUVA420P16LE] = {
  759. .name = "yuva420p16le",
  760. .nb_components = 4,
  761. .log2_chroma_w = 1,
  762. .log2_chroma_h = 1,
  763. .comp = {
  764. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  765. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  766. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  767. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  768. },
  769. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  770. },
  771. [AV_PIX_FMT_YUVA422P16BE] = {
  772. .name = "yuva422p16be",
  773. .nb_components = 4,
  774. .log2_chroma_w = 1,
  775. .log2_chroma_h = 0,
  776. .comp = {
  777. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  778. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  779. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  780. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  781. },
  782. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  783. },
  784. [AV_PIX_FMT_YUVA422P16LE] = {
  785. .name = "yuva422p16le",
  786. .nb_components = 4,
  787. .log2_chroma_w = 1,
  788. .log2_chroma_h = 0,
  789. .comp = {
  790. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  791. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  792. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  793. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  794. },
  795. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  796. },
  797. [AV_PIX_FMT_YUVA444P16BE] = {
  798. .name = "yuva444p16be",
  799. .nb_components = 4,
  800. .log2_chroma_w = 0,
  801. .log2_chroma_h = 0,
  802. .comp = {
  803. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  804. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  805. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  806. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  807. },
  808. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  809. },
  810. [AV_PIX_FMT_YUVA444P16LE] = {
  811. .name = "yuva444p16le",
  812. .nb_components = 4,
  813. .log2_chroma_w = 0,
  814. .log2_chroma_h = 0,
  815. .comp = {
  816. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  817. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  818. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  819. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  820. },
  821. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA,
  822. },
  823. #if FF_API_VDPAU
  824. [AV_PIX_FMT_VDPAU_H264] = {
  825. .name = "vdpau_h264",
  826. .log2_chroma_w = 1,
  827. .log2_chroma_h = 1,
  828. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  829. },
  830. [AV_PIX_FMT_VDPAU_MPEG1] = {
  831. .name = "vdpau_mpeg1",
  832. .log2_chroma_w = 1,
  833. .log2_chroma_h = 1,
  834. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  835. },
  836. [AV_PIX_FMT_VDPAU_MPEG2] = {
  837. .name = "vdpau_mpeg2",
  838. .log2_chroma_w = 1,
  839. .log2_chroma_h = 1,
  840. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  841. },
  842. [AV_PIX_FMT_VDPAU_WMV3] = {
  843. .name = "vdpau_wmv3",
  844. .log2_chroma_w = 1,
  845. .log2_chroma_h = 1,
  846. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  847. },
  848. [AV_PIX_FMT_VDPAU_VC1] = {
  849. .name = "vdpau_vc1",
  850. .log2_chroma_w = 1,
  851. .log2_chroma_h = 1,
  852. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  853. },
  854. [AV_PIX_FMT_VDPAU_MPEG4] = {
  855. .name = "vdpau_mpeg4",
  856. .log2_chroma_w = 1,
  857. .log2_chroma_h = 1,
  858. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  859. },
  860. #endif
  861. [AV_PIX_FMT_RGB48BE] = {
  862. .name = "rgb48be",
  863. .nb_components = 3,
  864. .log2_chroma_w = 0,
  865. .log2_chroma_h = 0,
  866. .comp = {
  867. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
  868. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  869. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
  870. },
  871. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE,
  872. },
  873. [AV_PIX_FMT_RGB48LE] = {
  874. .name = "rgb48le",
  875. .nb_components = 3,
  876. .log2_chroma_w = 0,
  877. .log2_chroma_h = 0,
  878. .comp = {
  879. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* R */
  880. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  881. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* B */
  882. },
  883. .flags = AV_PIX_FMT_FLAG_RGB,
  884. },
  885. [AV_PIX_FMT_RGBA64BE] = {
  886. .name = "rgba64be",
  887. .nb_components = 4,
  888. .log2_chroma_w = 0,
  889. .log2_chroma_h = 0,
  890. .comp = {
  891. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
  892. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  893. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
  894. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  895. },
  896. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  897. },
  898. [AV_PIX_FMT_RGBA64LE] = {
  899. .name = "rgba64le",
  900. .nb_components = 4,
  901. .log2_chroma_w = 0,
  902. .log2_chroma_h = 0,
  903. .comp = {
  904. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* R */
  905. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  906. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* B */
  907. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  908. },
  909. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  910. },
  911. [AV_PIX_FMT_RGB565BE] = {
  912. .name = "rgb565be",
  913. .nb_components = 3,
  914. .log2_chroma_w = 0,
  915. .log2_chroma_h = 0,
  916. .comp = {
  917. { 0, 2, -1, 3, 5, 1, 4, 0 }, /* R */
  918. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  919. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  920. },
  921. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  922. },
  923. [AV_PIX_FMT_RGB565LE] = {
  924. .name = "rgb565le",
  925. .nb_components = 3,
  926. .log2_chroma_w = 0,
  927. .log2_chroma_h = 0,
  928. .comp = {
  929. { 0, 2, 1, 3, 5, 1, 4, 2 }, /* R */
  930. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  931. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  932. },
  933. .flags = AV_PIX_FMT_FLAG_RGB,
  934. },
  935. [AV_PIX_FMT_RGB555BE] = {
  936. .name = "rgb555be",
  937. .nb_components = 3,
  938. .log2_chroma_w = 0,
  939. .log2_chroma_h = 0,
  940. .comp = {
  941. { 0, 2, -1, 2, 5, 1, 4, 0 }, /* R */
  942. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  943. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  944. },
  945. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  946. },
  947. [AV_PIX_FMT_RGB555LE] = {
  948. .name = "rgb555le",
  949. .nb_components = 3,
  950. .log2_chroma_w = 0,
  951. .log2_chroma_h = 0,
  952. .comp = {
  953. { 0, 2, 1, 2, 5, 1, 4, 2 }, /* R */
  954. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  955. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* B */
  956. },
  957. .flags = AV_PIX_FMT_FLAG_RGB,
  958. },
  959. [AV_PIX_FMT_RGB444BE] = {
  960. .name = "rgb444be",
  961. .nb_components = 3,
  962. .log2_chroma_w = 0,
  963. .log2_chroma_h = 0,
  964. .comp = {
  965. { 0, 2, -1, 0, 4, 1, 3, 0 }, /* R */
  966. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  967. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
  968. },
  969. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  970. },
  971. [AV_PIX_FMT_RGB444LE] = {
  972. .name = "rgb444le",
  973. .nb_components = 3,
  974. .log2_chroma_w = 0,
  975. .log2_chroma_h = 0,
  976. .comp = {
  977. { 0, 2, 1, 0, 4, 1, 3, 2 }, /* R */
  978. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  979. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* B */
  980. },
  981. .flags = AV_PIX_FMT_FLAG_RGB,
  982. },
  983. [AV_PIX_FMT_BGR48BE] = {
  984. .name = "bgr48be",
  985. .nb_components = 3,
  986. .log2_chroma_w = 0,
  987. .log2_chroma_h = 0,
  988. .comp = {
  989. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
  990. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  991. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
  992. },
  993. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  994. },
  995. [AV_PIX_FMT_BGR48LE] = {
  996. .name = "bgr48le",
  997. .nb_components = 3,
  998. .log2_chroma_w = 0,
  999. .log2_chroma_h = 0,
  1000. .comp = {
  1001. { 0, 6, 4, 0, 16, 5, 15, 5 }, /* R */
  1002. { 0, 6, 2, 0, 16, 5, 15, 3 }, /* G */
  1003. { 0, 6, 0, 0, 16, 5, 15, 1 }, /* B */
  1004. },
  1005. .flags = AV_PIX_FMT_FLAG_RGB,
  1006. },
  1007. [AV_PIX_FMT_BGRA64BE] = {
  1008. .name = "bgra64be",
  1009. .nb_components = 4,
  1010. .log2_chroma_w = 0,
  1011. .log2_chroma_h = 0,
  1012. .comp = {
  1013. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
  1014. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  1015. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
  1016. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  1017. },
  1018. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1019. },
  1020. [AV_PIX_FMT_BGRA64LE] = {
  1021. .name = "bgra64le",
  1022. .nb_components = 4,
  1023. .log2_chroma_w = 0,
  1024. .log2_chroma_h = 0,
  1025. .comp = {
  1026. { 0, 8, 4, 0, 16, 7, 15, 5 }, /* R */
  1027. { 0, 8, 2, 0, 16, 7, 15, 3 }, /* G */
  1028. { 0, 8, 0, 0, 16, 7, 15, 1 }, /* B */
  1029. { 0, 8, 6, 0, 16, 7, 15, 7 }, /* A */
  1030. },
  1031. .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1032. },
  1033. [AV_PIX_FMT_BGR565BE] = {
  1034. .name = "bgr565be",
  1035. .nb_components = 3,
  1036. .log2_chroma_w = 0,
  1037. .log2_chroma_h = 0,
  1038. .comp = {
  1039. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1040. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  1041. { 0, 2, -1, 3, 5, 1, 4, 0 }, /* B */
  1042. },
  1043. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  1044. },
  1045. [AV_PIX_FMT_BGR565LE] = {
  1046. .name = "bgr565le",
  1047. .nb_components = 3,
  1048. .log2_chroma_w = 0,
  1049. .log2_chroma_h = 0,
  1050. .comp = {
  1051. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1052. { 0, 2, 0, 5, 6, 1, 5, 1 }, /* G */
  1053. { 0, 2, 1, 3, 5, 1, 4, 2 }, /* B */
  1054. },
  1055. .flags = AV_PIX_FMT_FLAG_RGB,
  1056. },
  1057. [AV_PIX_FMT_BGR555BE] = {
  1058. .name = "bgr555be",
  1059. .nb_components = 3,
  1060. .log2_chroma_w = 0,
  1061. .log2_chroma_h = 0,
  1062. .comp = {
  1063. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1064. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  1065. { 0, 2, -1, 2, 5, 1, 4, 0 }, /* B */
  1066. },
  1067. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  1068. },
  1069. [AV_PIX_FMT_BGR555LE] = {
  1070. .name = "bgr555le",
  1071. .nb_components = 3,
  1072. .log2_chroma_w = 0,
  1073. .log2_chroma_h = 0,
  1074. .comp = {
  1075. { 0, 2, 0, 0, 5, 1, 4, 1 }, /* R */
  1076. { 0, 2, 0, 5, 5, 1, 4, 1 }, /* G */
  1077. { 0, 2, 1, 2, 5, 1, 4, 2 }, /* B */
  1078. },
  1079. .flags = AV_PIX_FMT_FLAG_RGB,
  1080. },
  1081. [AV_PIX_FMT_BGR444BE] = {
  1082. .name = "bgr444be",
  1083. .nb_components = 3,
  1084. .log2_chroma_w = 0,
  1085. .log2_chroma_h = 0,
  1086. .comp = {
  1087. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
  1088. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  1089. { 0, 2, -1, 0, 4, 1, 3, 0 }, /* B */
  1090. },
  1091. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB,
  1092. },
  1093. [AV_PIX_FMT_BGR444LE] = {
  1094. .name = "bgr444le",
  1095. .nb_components = 3,
  1096. .log2_chroma_w = 0,
  1097. .log2_chroma_h = 0,
  1098. .comp = {
  1099. { 0, 2, 0, 0, 4, 1, 3, 1 }, /* R */
  1100. { 0, 2, 0, 4, 4, 1, 3, 1 }, /* G */
  1101. { 0, 2, 1, 0, 4, 1, 3, 2 }, /* B */
  1102. },
  1103. .flags = AV_PIX_FMT_FLAG_RGB,
  1104. },
  1105. #if FF_API_VAAPI
  1106. [AV_PIX_FMT_VAAPI_MOCO] = {
  1107. .name = "vaapi_moco",
  1108. .log2_chroma_w = 1,
  1109. .log2_chroma_h = 1,
  1110. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1111. },
  1112. [AV_PIX_FMT_VAAPI_IDCT] = {
  1113. .name = "vaapi_idct",
  1114. .log2_chroma_w = 1,
  1115. .log2_chroma_h = 1,
  1116. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1117. },
  1118. [AV_PIX_FMT_VAAPI_VLD] = {
  1119. .name = "vaapi_vld",
  1120. .log2_chroma_w = 1,
  1121. .log2_chroma_h = 1,
  1122. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1123. },
  1124. #else
  1125. [AV_PIX_FMT_VAAPI] = {
  1126. .name = "vaapi",
  1127. .log2_chroma_w = 1,
  1128. .log2_chroma_h = 1,
  1129. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1130. },
  1131. #endif
  1132. [AV_PIX_FMT_VDA_VLD] = {
  1133. .name = "vda_vld",
  1134. .log2_chroma_w = 1,
  1135. .log2_chroma_h = 1,
  1136. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1137. },
  1138. [AV_PIX_FMT_YUV420P9LE] = {
  1139. .name = "yuv420p9le",
  1140. .nb_components = 3,
  1141. .log2_chroma_w = 1,
  1142. .log2_chroma_h = 1,
  1143. .comp = {
  1144. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1145. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1146. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1147. },
  1148. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1149. },
  1150. [AV_PIX_FMT_YUV420P9BE] = {
  1151. .name = "yuv420p9be",
  1152. .nb_components = 3,
  1153. .log2_chroma_w = 1,
  1154. .log2_chroma_h = 1,
  1155. .comp = {
  1156. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1157. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1158. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1159. },
  1160. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1161. },
  1162. [AV_PIX_FMT_YUV420P10LE] = {
  1163. .name = "yuv420p10le",
  1164. .nb_components = 3,
  1165. .log2_chroma_w = 1,
  1166. .log2_chroma_h = 1,
  1167. .comp = {
  1168. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1169. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1170. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1171. },
  1172. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1173. },
  1174. [AV_PIX_FMT_YUV420P10BE] = {
  1175. .name = "yuv420p10be",
  1176. .nb_components = 3,
  1177. .log2_chroma_w = 1,
  1178. .log2_chroma_h = 1,
  1179. .comp = {
  1180. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1181. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1182. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1183. },
  1184. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1185. },
  1186. [AV_PIX_FMT_YUV420P12LE] = {
  1187. .name = "yuv420p12le",
  1188. .nb_components = 3,
  1189. .log2_chroma_w = 1,
  1190. .log2_chroma_h = 1,
  1191. .comp = {
  1192. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  1193. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
  1194. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
  1195. },
  1196. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1197. },
  1198. [AV_PIX_FMT_YUV420P12BE] = {
  1199. .name = "yuv420p12be",
  1200. .nb_components = 3,
  1201. .log2_chroma_w = 1,
  1202. .log2_chroma_h = 1,
  1203. .comp = {
  1204. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  1205. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
  1206. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
  1207. },
  1208. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1209. },
  1210. [AV_PIX_FMT_YUV420P16LE] = {
  1211. .name = "yuv420p16le",
  1212. .nb_components = 3,
  1213. .log2_chroma_w = 1,
  1214. .log2_chroma_h = 1,
  1215. .comp = {
  1216. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1217. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1218. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1219. },
  1220. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1221. },
  1222. [AV_PIX_FMT_YUV420P16BE] = {
  1223. .name = "yuv420p16be",
  1224. .nb_components = 3,
  1225. .log2_chroma_w = 1,
  1226. .log2_chroma_h = 1,
  1227. .comp = {
  1228. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1229. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1230. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1231. },
  1232. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1233. },
  1234. [AV_PIX_FMT_YUV422P9LE] = {
  1235. .name = "yuv422p9le",
  1236. .nb_components = 3,
  1237. .log2_chroma_w = 1,
  1238. .log2_chroma_h = 0,
  1239. .comp = {
  1240. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1241. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1242. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1243. },
  1244. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1245. },
  1246. [AV_PIX_FMT_YUV422P9BE] = {
  1247. .name = "yuv422p9be",
  1248. .nb_components = 3,
  1249. .log2_chroma_w = 1,
  1250. .log2_chroma_h = 0,
  1251. .comp = {
  1252. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1253. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1254. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1255. },
  1256. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1257. },
  1258. [AV_PIX_FMT_YUV422P10LE] = {
  1259. .name = "yuv422p10le",
  1260. .nb_components = 3,
  1261. .log2_chroma_w = 1,
  1262. .log2_chroma_h = 0,
  1263. .comp = {
  1264. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1265. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1266. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1267. },
  1268. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1269. },
  1270. [AV_PIX_FMT_YUV422P10BE] = {
  1271. .name = "yuv422p10be",
  1272. .nb_components = 3,
  1273. .log2_chroma_w = 1,
  1274. .log2_chroma_h = 0,
  1275. .comp = {
  1276. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1277. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1278. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1279. },
  1280. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1281. },
  1282. [AV_PIX_FMT_YUV422P12LE] = {
  1283. .name = "yuv422p12le",
  1284. .nb_components = 3,
  1285. .log2_chroma_w = 1,
  1286. .log2_chroma_h = 0,
  1287. .comp = {
  1288. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  1289. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
  1290. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
  1291. },
  1292. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1293. },
  1294. [AV_PIX_FMT_YUV422P12BE] = {
  1295. .name = "yuv422p12be",
  1296. .nb_components = 3,
  1297. .log2_chroma_w = 1,
  1298. .log2_chroma_h = 0,
  1299. .comp = {
  1300. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  1301. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
  1302. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
  1303. },
  1304. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1305. },
  1306. [AV_PIX_FMT_YUV422P16LE] = {
  1307. .name = "yuv422p16le",
  1308. .nb_components = 3,
  1309. .log2_chroma_w = 1,
  1310. .log2_chroma_h = 0,
  1311. .comp = {
  1312. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1313. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1314. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1315. },
  1316. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1317. },
  1318. [AV_PIX_FMT_YUV422P16BE] = {
  1319. .name = "yuv422p16be",
  1320. .nb_components = 3,
  1321. .log2_chroma_w = 1,
  1322. .log2_chroma_h = 0,
  1323. .comp = {
  1324. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1325. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1326. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1327. },
  1328. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1329. },
  1330. [AV_PIX_FMT_YUV444P16LE] = {
  1331. .name = "yuv444p16le",
  1332. .nb_components = 3,
  1333. .log2_chroma_w = 0,
  1334. .log2_chroma_h = 0,
  1335. .comp = {
  1336. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1337. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1338. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1339. },
  1340. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1341. },
  1342. [AV_PIX_FMT_YUV444P16BE] = {
  1343. .name = "yuv444p16be",
  1344. .nb_components = 3,
  1345. .log2_chroma_w = 0,
  1346. .log2_chroma_h = 0,
  1347. .comp = {
  1348. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */
  1349. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* U */
  1350. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* V */
  1351. },
  1352. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1353. },
  1354. [AV_PIX_FMT_YUV444P12LE] = {
  1355. .name = "yuv444p12le",
  1356. .nb_components = 3,
  1357. .log2_chroma_w = 0,
  1358. .log2_chroma_h = 0,
  1359. .comp = {
  1360. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  1361. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
  1362. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
  1363. },
  1364. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1365. },
  1366. [AV_PIX_FMT_YUV444P12BE] = {
  1367. .name = "yuv444p12be",
  1368. .nb_components = 3,
  1369. .log2_chroma_w = 0,
  1370. .log2_chroma_h = 0,
  1371. .comp = {
  1372. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */
  1373. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* U */
  1374. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* V */
  1375. },
  1376. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1377. },
  1378. [AV_PIX_FMT_YUV444P10LE] = {
  1379. .name = "yuv444p10le",
  1380. .nb_components = 3,
  1381. .log2_chroma_w = 0,
  1382. .log2_chroma_h = 0,
  1383. .comp = {
  1384. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1385. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1386. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1387. },
  1388. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1389. },
  1390. [AV_PIX_FMT_YUV444P10BE] = {
  1391. .name = "yuv444p10be",
  1392. .nb_components = 3,
  1393. .log2_chroma_w = 0,
  1394. .log2_chroma_h = 0,
  1395. .comp = {
  1396. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1397. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* U */
  1398. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* V */
  1399. },
  1400. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1401. },
  1402. [AV_PIX_FMT_YUV444P9LE] = {
  1403. .name = "yuv444p9le",
  1404. .nb_components = 3,
  1405. .log2_chroma_w = 0,
  1406. .log2_chroma_h = 0,
  1407. .comp = {
  1408. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1409. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1410. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1411. },
  1412. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1413. },
  1414. [AV_PIX_FMT_YUV444P9BE] = {
  1415. .name = "yuv444p9be",
  1416. .nb_components = 3,
  1417. .log2_chroma_w = 0,
  1418. .log2_chroma_h = 0,
  1419. .comp = {
  1420. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */
  1421. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* U */
  1422. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* V */
  1423. },
  1424. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1425. },
  1426. [AV_PIX_FMT_D3D11VA_VLD] = {
  1427. .name = "d3d11va_vld",
  1428. .log2_chroma_w = 1,
  1429. .log2_chroma_h = 1,
  1430. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1431. },
  1432. [AV_PIX_FMT_DXVA2_VLD] = {
  1433. .name = "dxva2_vld",
  1434. .log2_chroma_w = 1,
  1435. .log2_chroma_h = 1,
  1436. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1437. },
  1438. [AV_PIX_FMT_YA8] = {
  1439. .name = "ya8",
  1440. .nb_components = 2,
  1441. .comp = {
  1442. { 0, 2, 0, 0, 8, 1, 7, 1 }, /* Y */
  1443. { 0, 2, 1, 0, 8, 1, 7, 2 }, /* A */
  1444. },
  1445. .flags = AV_PIX_FMT_FLAG_ALPHA,
  1446. .alias = "gray8a",
  1447. },
  1448. [AV_PIX_FMT_YA16LE] = {
  1449. .name = "ya16le",
  1450. .nb_components = 2,
  1451. .comp = {
  1452. { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
  1453. { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
  1454. },
  1455. .flags = AV_PIX_FMT_FLAG_ALPHA,
  1456. },
  1457. [AV_PIX_FMT_YA16BE] = {
  1458. .name = "ya16be",
  1459. .nb_components = 2,
  1460. .comp = {
  1461. { 0, 4, 0, 0, 16, 3, 15, 1 }, /* Y */
  1462. { 0, 4, 2, 0, 16, 3, 15, 3 }, /* A */
  1463. },
  1464. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
  1465. },
  1466. [AV_PIX_FMT_GBRP] = {
  1467. .name = "gbrp",
  1468. .nb_components = 3,
  1469. .log2_chroma_w = 0,
  1470. .log2_chroma_h = 0,
  1471. .comp = {
  1472. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
  1473. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
  1474. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
  1475. },
  1476. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1477. },
  1478. [AV_PIX_FMT_GBRP9LE] = {
  1479. .name = "gbrp9le",
  1480. .nb_components = 3,
  1481. .log2_chroma_w = 0,
  1482. .log2_chroma_h = 0,
  1483. .comp = {
  1484. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
  1485. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
  1486. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
  1487. },
  1488. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1489. },
  1490. [AV_PIX_FMT_GBRP9BE] = {
  1491. .name = "gbrp9be",
  1492. .nb_components = 3,
  1493. .log2_chroma_w = 0,
  1494. .log2_chroma_h = 0,
  1495. .comp = {
  1496. { 2, 2, 0, 0, 9, 1, 8, 1 }, /* R */
  1497. { 0, 2, 0, 0, 9, 1, 8, 1 }, /* G */
  1498. { 1, 2, 0, 0, 9, 1, 8, 1 }, /* B */
  1499. },
  1500. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1501. },
  1502. [AV_PIX_FMT_GBRP10LE] = {
  1503. .name = "gbrp10le",
  1504. .nb_components = 3,
  1505. .log2_chroma_w = 0,
  1506. .log2_chroma_h = 0,
  1507. .comp = {
  1508. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
  1509. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
  1510. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
  1511. },
  1512. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1513. },
  1514. [AV_PIX_FMT_GBRP10BE] = {
  1515. .name = "gbrp10be",
  1516. .nb_components = 3,
  1517. .log2_chroma_w = 0,
  1518. .log2_chroma_h = 0,
  1519. .comp = {
  1520. { 2, 2, 0, 0, 10, 1, 9, 1 }, /* R */
  1521. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* G */
  1522. { 1, 2, 0, 0, 10, 1, 9, 1 }, /* B */
  1523. },
  1524. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1525. },
  1526. [AV_PIX_FMT_GBRP12LE] = {
  1527. .name = "gbrp12le",
  1528. .nb_components = 3,
  1529. .log2_chroma_w = 0,
  1530. .log2_chroma_h = 0,
  1531. .comp = {
  1532. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
  1533. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
  1534. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
  1535. },
  1536. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1537. },
  1538. [AV_PIX_FMT_GBRP12BE] = {
  1539. .name = "gbrp12be",
  1540. .nb_components = 3,
  1541. .log2_chroma_w = 0,
  1542. .log2_chroma_h = 0,
  1543. .comp = {
  1544. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
  1545. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
  1546. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
  1547. },
  1548. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1549. },
  1550. [AV_PIX_FMT_GBRP16LE] = {
  1551. .name = "gbrp16le",
  1552. .nb_components = 3,
  1553. .log2_chroma_w = 0,
  1554. .log2_chroma_h = 0,
  1555. .comp = {
  1556. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1557. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1558. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1559. },
  1560. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1561. },
  1562. [AV_PIX_FMT_GBRP16BE] = {
  1563. .name = "gbrp16be",
  1564. .nb_components = 3,
  1565. .log2_chroma_w = 0,
  1566. .log2_chroma_h = 0,
  1567. .comp = {
  1568. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1569. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1570. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1571. },
  1572. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1573. },
  1574. [AV_PIX_FMT_GBRAP] = {
  1575. .name = "gbrap",
  1576. .nb_components = 4,
  1577. .log2_chroma_w = 0,
  1578. .log2_chroma_h = 0,
  1579. .comp = {
  1580. { 2, 1, 0, 0, 8, 0, 7, 1 }, /* R */
  1581. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* G */
  1582. { 1, 1, 0, 0, 8, 0, 7, 1 }, /* B */
  1583. { 3, 1, 0, 0, 8, 0, 7, 1 }, /* A */
  1584. },
  1585. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1586. AV_PIX_FMT_FLAG_ALPHA,
  1587. },
  1588. [AV_PIX_FMT_GBRAP16LE] = {
  1589. .name = "gbrap16le",
  1590. .nb_components = 4,
  1591. .log2_chroma_w = 0,
  1592. .log2_chroma_h = 0,
  1593. .comp = {
  1594. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1595. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1596. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1597. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  1598. },
  1599. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1600. AV_PIX_FMT_FLAG_ALPHA,
  1601. },
  1602. [AV_PIX_FMT_GBRAP16BE] = {
  1603. .name = "gbrap16be",
  1604. .nb_components = 4,
  1605. .log2_chroma_w = 0,
  1606. .log2_chroma_h = 0,
  1607. .comp = {
  1608. { 2, 2, 0, 0, 16, 1, 15, 1 }, /* R */
  1609. { 0, 2, 0, 0, 16, 1, 15, 1 }, /* G */
  1610. { 1, 2, 0, 0, 16, 1, 15, 1 }, /* B */
  1611. { 3, 2, 0, 0, 16, 1, 15, 1 }, /* A */
  1612. },
  1613. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
  1614. AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1615. },
  1616. [AV_PIX_FMT_VDPAU] = {
  1617. .name = "vdpau",
  1618. .log2_chroma_w = 1,
  1619. .log2_chroma_h = 1,
  1620. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1621. },
  1622. [AV_PIX_FMT_XYZ12LE] = {
  1623. .name = "xyz12le",
  1624. .nb_components = 3,
  1625. .log2_chroma_w = 0,
  1626. .log2_chroma_h = 0,
  1627. .comp = {
  1628. { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
  1629. { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
  1630. { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
  1631. },
  1632. /*.flags = -- not used*/
  1633. },
  1634. [AV_PIX_FMT_XYZ12BE] = {
  1635. .name = "xyz12be",
  1636. .nb_components = 3,
  1637. .log2_chroma_w = 0,
  1638. .log2_chroma_h = 0,
  1639. .comp = {
  1640. { 0, 6, 0, 4, 12, 5, 11, 1 }, /* X */
  1641. { 0, 6, 2, 4, 12, 5, 11, 3 }, /* Y */
  1642. { 0, 6, 4, 4, 12, 5, 11, 5 }, /* Z */
  1643. },
  1644. .flags = AV_PIX_FMT_FLAG_BE,
  1645. },
  1646. [AV_PIX_FMT_NV16] = {
  1647. .name = "nv16",
  1648. .nb_components = 3,
  1649. .log2_chroma_w = 1,
  1650. .log2_chroma_h = 0,
  1651. .comp = {
  1652. { 0, 1, 0, 0, 8, 0, 7, 1 }, /* Y */
  1653. { 1, 2, 0, 0, 8, 1, 7, 1 }, /* U */
  1654. { 1, 2, 1, 0, 8, 1, 7, 2 }, /* V */
  1655. },
  1656. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1657. },
  1658. [AV_PIX_FMT_NV20LE] = {
  1659. .name = "nv20le",
  1660. .nb_components = 3,
  1661. .log2_chroma_w = 1,
  1662. .log2_chroma_h = 0,
  1663. .comp = {
  1664. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1665. { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
  1666. { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
  1667. },
  1668. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1669. },
  1670. [AV_PIX_FMT_NV20BE] = {
  1671. .name = "nv20be",
  1672. .nb_components = 3,
  1673. .log2_chroma_w = 1,
  1674. .log2_chroma_h = 0,
  1675. .comp = {
  1676. { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */
  1677. { 1, 4, 0, 0, 10, 3, 9, 1 }, /* U */
  1678. { 1, 4, 2, 0, 10, 3, 9, 3 }, /* V */
  1679. },
  1680. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
  1681. },
  1682. [AV_PIX_FMT_VDA] = {
  1683. .name = "vda",
  1684. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1685. },
  1686. [AV_PIX_FMT_QSV] = {
  1687. .name = "qsv",
  1688. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1689. },
  1690. [AV_PIX_FMT_MMAL] = {
  1691. .name = "mmal",
  1692. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1693. },
  1694. [AV_PIX_FMT_CUDA] = {
  1695. .name = "cuda",
  1696. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1697. },
  1698. [AV_PIX_FMT_P010LE] = {
  1699. .name = "p010le",
  1700. .nb_components = 3,
  1701. .log2_chroma_w = 1,
  1702. .log2_chroma_h = 1,
  1703. .comp = {
  1704. { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */
  1705. { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */
  1706. { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */
  1707. },
  1708. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1709. },
  1710. [AV_PIX_FMT_P010BE] = {
  1711. .name = "p010be",
  1712. .nb_components = 3,
  1713. .log2_chroma_w = 1,
  1714. .log2_chroma_h = 1,
  1715. .comp = {
  1716. { 0, 2, 0, 6, 10, 1, 9, 1 }, /* Y */
  1717. { 1, 4, 0, 6, 10, 3, 9, 1 }, /* U */
  1718. { 1, 4, 2, 6, 10, 3, 9, 3 }, /* V */
  1719. },
  1720. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
  1721. },
  1722. [AV_PIX_FMT_GBRAP12LE] = {
  1723. .name = "gbrap12le",
  1724. .nb_components = 4,
  1725. .log2_chroma_w = 0,
  1726. .log2_chroma_h = 0,
  1727. .comp = {
  1728. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
  1729. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
  1730. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
  1731. { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
  1732. },
  1733. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1734. AV_PIX_FMT_FLAG_ALPHA,
  1735. },
  1736. [AV_PIX_FMT_GBRAP12BE] = {
  1737. .name = "gbrap12be",
  1738. .nb_components = 4,
  1739. .log2_chroma_w = 0,
  1740. .log2_chroma_h = 0,
  1741. .comp = {
  1742. { 2, 2, 0, 0, 12, 1, 11, 1 }, /* R */
  1743. { 0, 2, 0, 0, 12, 1, 11, 1 }, /* G */
  1744. { 1, 2, 0, 0, 12, 1, 11, 1 }, /* B */
  1745. { 3, 2, 0, 0, 12, 1, 11, 1 }, /* A */
  1746. },
  1747. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
  1748. AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1749. },
  1750. };
  1751. #if FF_API_PLUS1_MINUS1
  1752. FF_ENABLE_DEPRECATION_WARNINGS
  1753. #endif
  1754. static const char * const color_range_names[] = {
  1755. [AVCOL_RANGE_UNSPECIFIED] = "unknown",
  1756. [AVCOL_RANGE_MPEG] = "tv",
  1757. [AVCOL_RANGE_JPEG] = "pc",
  1758. };
  1759. static const char * const color_primaries_names[] = {
  1760. [AVCOL_PRI_RESERVED0] = "reserved",
  1761. [AVCOL_PRI_BT709] = "bt709",
  1762. [AVCOL_PRI_UNSPECIFIED] = "unknown",
  1763. [AVCOL_PRI_RESERVED] = "reserved",
  1764. [AVCOL_PRI_BT470M] = "bt470m",
  1765. [AVCOL_PRI_BT470BG] = "bt470bg",
  1766. [AVCOL_PRI_SMPTE170M] = "smpte170m",
  1767. [AVCOL_PRI_SMPTE240M] = "smpte240m",
  1768. [AVCOL_PRI_FILM] = "film",
  1769. [AVCOL_PRI_BT2020] = "bt2020",
  1770. [AVCOL_PRI_SMPTE428] = "smpte428",
  1771. [AVCOL_PRI_SMPTE431] = "smpte431",
  1772. [AVCOL_PRI_SMPTE432] = "smpte432",
  1773. [AVCOL_PRI_JEDEC_P22] = "jedec-p22",
  1774. };
  1775. static const char * const color_transfer_names[] = {
  1776. [AVCOL_TRC_RESERVED0] = "reserved",
  1777. [AVCOL_TRC_BT709] = "bt709",
  1778. [AVCOL_TRC_UNSPECIFIED] = "unknown",
  1779. [AVCOL_TRC_RESERVED] = "reserved",
  1780. [AVCOL_TRC_GAMMA22] = "bt470m",
  1781. [AVCOL_TRC_GAMMA28] = "bt470bg",
  1782. [AVCOL_TRC_SMPTE170M] = "smpte170m",
  1783. [AVCOL_TRC_SMPTE240M] = "smpte240m",
  1784. [AVCOL_TRC_LINEAR] = "linear",
  1785. [AVCOL_TRC_LOG] = "log100",
  1786. [AVCOL_TRC_LOG_SQRT] = "log316",
  1787. [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4",
  1788. [AVCOL_TRC_BT1361_ECG] = "bt1361e",
  1789. [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1",
  1790. [AVCOL_TRC_BT2020_10] = "bt2020-10",
  1791. [AVCOL_TRC_BT2020_12] = "bt2020-12",
  1792. [AVCOL_TRC_SMPTE2084] = "smpte2084",
  1793. [AVCOL_TRC_SMPTE428] = "smpte428",
  1794. [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67",
  1795. };
  1796. static const char * const color_space_names[] = {
  1797. [AVCOL_SPC_RGB] = "gbr",
  1798. [AVCOL_SPC_BT709] = "bt709",
  1799. [AVCOL_SPC_UNSPECIFIED] = "unknown",
  1800. [AVCOL_SPC_RESERVED] = "reserved",
  1801. [AVCOL_SPC_FCC] = "fcc",
  1802. [AVCOL_SPC_BT470BG] = "bt470bg",
  1803. [AVCOL_SPC_SMPTE170M] = "smpte170m",
  1804. [AVCOL_SPC_SMPTE240M] = "smpte240m",
  1805. [AVCOL_SPC_YCGCO] = "ycgco",
  1806. [AVCOL_SPC_BT2020_NCL] = "bt2020nc",
  1807. [AVCOL_SPC_BT2020_CL] = "bt2020c",
  1808. [AVCOL_SPC_SMPTE2085] = "smpte2085",
  1809. };
  1810. static const char * const chroma_location_names[] = {
  1811. [AVCHROMA_LOC_UNSPECIFIED] = "unspecified",
  1812. [AVCHROMA_LOC_LEFT] = "left",
  1813. [AVCHROMA_LOC_CENTER] = "center",
  1814. [AVCHROMA_LOC_TOPLEFT] = "topleft",
  1815. [AVCHROMA_LOC_TOP] = "top",
  1816. [AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft",
  1817. [AVCHROMA_LOC_BOTTOM] = "bottom",
  1818. };
  1819. static enum AVPixelFormat get_pix_fmt_internal(const char *name)
  1820. {
  1821. enum AVPixelFormat pix_fmt;
  1822. for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
  1823. if (av_pix_fmt_descriptors[pix_fmt].name &&
  1824. (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
  1825. av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
  1826. return pix_fmt;
  1827. return AV_PIX_FMT_NONE;
  1828. }
  1829. const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
  1830. {
  1831. return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
  1832. av_pix_fmt_descriptors[pix_fmt].name : NULL;
  1833. }
  1834. #if HAVE_BIGENDIAN
  1835. # define X_NE(be, le) be
  1836. #else
  1837. # define X_NE(be, le) le
  1838. #endif
  1839. enum AVPixelFormat av_get_pix_fmt(const char *name)
  1840. {
  1841. enum AVPixelFormat pix_fmt;
  1842. if (!strcmp(name, "rgb32"))
  1843. name = X_NE("argb", "bgra");
  1844. else if (!strcmp(name, "bgr32"))
  1845. name = X_NE("abgr", "rgba");
  1846. pix_fmt = get_pix_fmt_internal(name);
  1847. if (pix_fmt == AV_PIX_FMT_NONE) {
  1848. char name2[32];
  1849. snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
  1850. pix_fmt = get_pix_fmt_internal(name2);
  1851. }
  1852. #if FF_API_VAAPI
  1853. if (pix_fmt == AV_PIX_FMT_NONE && !strcmp(name, "vaapi"))
  1854. pix_fmt = AV_PIX_FMT_VAAPI;
  1855. #endif
  1856. return pix_fmt;
  1857. }
  1858. int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
  1859. {
  1860. int c, bits = 0;
  1861. int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
  1862. for (c = 0; c < pixdesc->nb_components; c++) {
  1863. int s = c == 1 || c == 2 ? 0 : log2_pixels;
  1864. bits += pixdesc->comp[c].depth << s;
  1865. }
  1866. return bits >> log2_pixels;
  1867. }
  1868. char *av_get_pix_fmt_string(char *buf, int buf_size,
  1869. enum AVPixelFormat pix_fmt)
  1870. {
  1871. /* print header */
  1872. if (pix_fmt < 0) {
  1873. snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
  1874. } else {
  1875. const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
  1876. snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
  1877. pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
  1878. }
  1879. return buf;
  1880. }
  1881. const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
  1882. {
  1883. if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
  1884. return NULL;
  1885. return &av_pix_fmt_descriptors[pix_fmt];
  1886. }
  1887. const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
  1888. {
  1889. if (!prev)
  1890. return &av_pix_fmt_descriptors[0];
  1891. if (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1)
  1892. return prev + 1;
  1893. return NULL;
  1894. }
  1895. enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
  1896. {
  1897. if (desc < av_pix_fmt_descriptors ||
  1898. desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
  1899. return AV_PIX_FMT_NONE;
  1900. return desc - av_pix_fmt_descriptors;
  1901. }
  1902. int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
  1903. int *h_shift, int *v_shift)
  1904. {
  1905. const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
  1906. if (!desc)
  1907. return AVERROR(ENOSYS);
  1908. *h_shift = desc->log2_chroma_w;
  1909. *v_shift = desc->log2_chroma_h;
  1910. return 0;
  1911. }
  1912. int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
  1913. {
  1914. const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
  1915. int i, planes[4] = { 0 }, ret = 0;
  1916. if (!desc)
  1917. return AVERROR(EINVAL);
  1918. for (i = 0; i < desc->nb_components; i++)
  1919. planes[desc->comp[i].plane] = 1;
  1920. for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
  1921. ret += planes[i];
  1922. return ret;
  1923. }
  1924. enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
  1925. {
  1926. #define PIX_FMT_SWAP_ENDIANNESS(fmt) \
  1927. case AV_PIX_FMT_ ## fmt ## BE: return AV_PIX_FMT_ ## fmt ## LE; \
  1928. case AV_PIX_FMT_ ## fmt ## LE: return AV_PIX_FMT_ ## fmt ## BE
  1929. switch (pix_fmt) {
  1930. PIX_FMT_SWAP_ENDIANNESS(GRAY12);
  1931. PIX_FMT_SWAP_ENDIANNESS(GRAY16);
  1932. PIX_FMT_SWAP_ENDIANNESS(YA16);
  1933. PIX_FMT_SWAP_ENDIANNESS(RGB48);
  1934. PIX_FMT_SWAP_ENDIANNESS(RGB565);
  1935. PIX_FMT_SWAP_ENDIANNESS(RGB555);
  1936. PIX_FMT_SWAP_ENDIANNESS(RGB444);
  1937. PIX_FMT_SWAP_ENDIANNESS(BGR48);
  1938. PIX_FMT_SWAP_ENDIANNESS(BGR565);
  1939. PIX_FMT_SWAP_ENDIANNESS(BGR555);
  1940. PIX_FMT_SWAP_ENDIANNESS(BGR444);
  1941. PIX_FMT_SWAP_ENDIANNESS(YUV420P9);
  1942. PIX_FMT_SWAP_ENDIANNESS(YUV422P9);
  1943. PIX_FMT_SWAP_ENDIANNESS(YUV444P9);
  1944. PIX_FMT_SWAP_ENDIANNESS(YUV420P10);
  1945. PIX_FMT_SWAP_ENDIANNESS(YUV422P10);
  1946. PIX_FMT_SWAP_ENDIANNESS(YUV444P10);
  1947. PIX_FMT_SWAP_ENDIANNESS(YUV420P12);
  1948. PIX_FMT_SWAP_ENDIANNESS(YUV422P12);
  1949. PIX_FMT_SWAP_ENDIANNESS(YUV444P12);
  1950. PIX_FMT_SWAP_ENDIANNESS(YUV420P16);
  1951. PIX_FMT_SWAP_ENDIANNESS(YUV422P16);
  1952. PIX_FMT_SWAP_ENDIANNESS(YUV444P16);
  1953. PIX_FMT_SWAP_ENDIANNESS(GBRP9);
  1954. PIX_FMT_SWAP_ENDIANNESS(GBRP10);
  1955. PIX_FMT_SWAP_ENDIANNESS(GBRP12);
  1956. PIX_FMT_SWAP_ENDIANNESS(GBRP16);
  1957. PIX_FMT_SWAP_ENDIANNESS(YUVA420P9);
  1958. PIX_FMT_SWAP_ENDIANNESS(YUVA422P9);
  1959. PIX_FMT_SWAP_ENDIANNESS(YUVA444P9);
  1960. PIX_FMT_SWAP_ENDIANNESS(YUVA420P10);
  1961. PIX_FMT_SWAP_ENDIANNESS(YUVA422P10);
  1962. PIX_FMT_SWAP_ENDIANNESS(YUVA444P10);
  1963. PIX_FMT_SWAP_ENDIANNESS(YUVA420P16);
  1964. PIX_FMT_SWAP_ENDIANNESS(YUVA422P16);
  1965. PIX_FMT_SWAP_ENDIANNESS(YUVA444P16);
  1966. PIX_FMT_SWAP_ENDIANNESS(XYZ12);
  1967. PIX_FMT_SWAP_ENDIANNESS(NV20);
  1968. PIX_FMT_SWAP_ENDIANNESS(RGBA64);
  1969. PIX_FMT_SWAP_ENDIANNESS(BGRA64);
  1970. default:
  1971. return AV_PIX_FMT_NONE;
  1972. }
  1973. #undef PIX_FMT_SWAP_ENDIANNESS
  1974. }
  1975. const char *av_color_range_name(enum AVColorRange range)
  1976. {
  1977. return (unsigned) range < AVCOL_RANGE_NB ?
  1978. color_range_names[range] : NULL;
  1979. }
  1980. const char *av_color_primaries_name(enum AVColorPrimaries primaries)
  1981. {
  1982. return (unsigned) primaries < AVCOL_PRI_NB ?
  1983. color_primaries_names[primaries] : NULL;
  1984. }
  1985. const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
  1986. {
  1987. return (unsigned) transfer < AVCOL_TRC_NB ?
  1988. color_transfer_names[transfer] : NULL;
  1989. }
  1990. const char *av_color_space_name(enum AVColorSpace space)
  1991. {
  1992. return (unsigned) space < AVCOL_SPC_NB ?
  1993. color_space_names[space] : NULL;
  1994. }
  1995. const char *av_chroma_location_name(enum AVChromaLocation location)
  1996. {
  1997. return (unsigned) location < AVCHROMA_LOC_NB ?
  1998. chroma_location_names[location] : NULL;
  1999. }