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.

1817 lines
55KB

  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_minus1 + 1;
  39. int mask = (1 << depth) - 1;
  40. int shift = comp.shift;
  41. int step = comp.step_minus1 + 1;
  42. int flags = desc->flags;
  43. if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
  44. int skip = x * step + comp.offset_plus1 - 1;
  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_plus1 - 1;
  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_minus1 + 1;
  81. int step = comp.step_minus1 + 1;
  82. int flags = desc->flags;
  83. if (flags & AV_PIX_FMT_FLAG_BITSTREAM) {
  84. int skip = x * step + comp.offset_plus1 - 1;
  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_plus1 - 1;
  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_PIX_FMT_DESC
  118. static
  119. #endif
  120. 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, 0, 1, 0, 7 }, /* Y */
  128. { 1, 0, 1, 0, 7 }, /* U */
  129. { 2, 0, 1, 0, 7 }, /* 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, 1, 1, 0, 7 }, /* Y */
  140. { 0, 3, 2, 0, 7 }, /* U */
  141. { 0, 3, 4, 0, 7 }, /* 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, 1, 1, 0, 7 }, /* Y */
  151. { 0, 3, 2, 0, 7 }, /* V */
  152. { 0, 3, 4, 0, 7 }, /* U */
  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, 2, 1, 0, 7 }, /* R */
  162. { 0, 2, 2, 0, 7 }, /* G */
  163. { 0, 2, 3, 0, 7 }, /* 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, 2, 1, 0, 7 }, /* B */
  174. { 0, 2, 2, 0, 7 }, /* G */
  175. { 0, 2, 3, 0, 7 }, /* R */
  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, 0, 1, 0, 7 }, /* Y */
  186. { 1, 0, 1, 0, 7 }, /* U */
  187. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  198. { 1, 0, 1, 0, 7 }, /* U */
  199. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  210. { 1, 0, 1, 0, 7 }, /* U */
  211. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  222. { 1, 0, 1, 0, 7 }, /* U */
  223. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 0 }, /* 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, 0, 1, 7, 0 }, /* 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, 0, 1, 0, 7 },
  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, 0, 1, 0, 7 }, /* Y */
  275. { 1, 0, 1, 0, 7 }, /* U */
  276. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  287. { 1, 0, 1, 0, 7 }, /* U */
  288. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7}, /* Y */
  299. {1, 0, 1, 0, 7}, /* U */
  300. {2, 0, 1, 0, 7}, /* 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, 1, 2, 0, 7 }, /* Y */
  321. { 0, 3, 1, 0, 7 }, /* U */
  322. { 0, 3, 3, 0, 7 }, /* 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, 3, 2, 0, 7 }, /* Y */
  332. { 0, 5, 1, 0, 7 }, /* U */
  333. { 0, 5, 4, 0, 7 }, /* 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, 0, 1, 6, 1 }, /* B */
  343. { 0, 0, 1, 3, 2 }, /* G */
  344. { 0, 0, 1, 0, 2 }, /* R */
  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, 3, 1, 0, 0 }, /* B */
  355. { 0, 3, 2, 0, 1 }, /* G */
  356. { 0, 3, 4, 0, 0 }, /* R */
  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, 0, 1, 3, 0 }, /* B */
  367. { 0, 0, 1, 1, 1 }, /* G */
  368. { 0, 0, 1, 0, 0 }, /* R */
  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, 0, 1, 6, 1 }, /* R */
  379. { 0, 0, 1, 3, 2 }, /* G */
  380. { 0, 0, 1, 0, 2 }, /* 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, 3, 1, 0, 0 }, /* R */
  391. { 0, 3, 2, 0, 1 }, /* G */
  392. { 0, 3, 4, 0, 0 }, /* 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, 0, 1, 3, 0 }, /* R */
  403. { 0, 0, 1, 1, 1 }, /* G */
  404. { 0, 0, 1, 0, 0 }, /* 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, 0, 1, 0, 7 }, /* Y */
  415. { 1, 1, 1, 0, 7 }, /* U */
  416. { 1, 1, 2, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  427. { 1, 1, 1, 0, 7 }, /* V */
  428. { 1, 1, 2, 0, 7 }, /* U */
  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, 3, 1, 0, 7 }, /* A */
  439. { 0, 3, 2, 0, 7 }, /* R */
  440. { 0, 3, 3, 0, 7 }, /* G */
  441. { 0, 3, 4, 0, 7 }, /* B */
  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, 3, 1, 0, 7 }, /* R */
  452. { 0, 3, 2, 0, 7 }, /* G */
  453. { 0, 3, 3, 0, 7 }, /* B */
  454. { 0, 3, 4, 0, 7 }, /* 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, 3, 1, 0, 7 }, /* A */
  465. { 0, 3, 2, 0, 7 }, /* B */
  466. { 0, 3, 3, 0, 7 }, /* G */
  467. { 0, 3, 4, 0, 7 }, /* R */
  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, 3, 1, 0, 7 }, /* B */
  478. { 0, 3, 2, 0, 7 }, /* G */
  479. { 0, 3, 3, 0, 7 }, /* R */
  480. { 0, 3, 4, 0, 7 }, /* 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, 1, 1, 0, 15 }, /* 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, 1, 1, 0, 15 }, /* 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, 0, 1, 0, 7 }, /* Y */
  512. { 1, 0, 1, 0, 7 }, /* U */
  513. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  524. { 1, 0, 1, 0, 7 }, /* U */
  525. { 2, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  536. { 1, 0, 1, 0, 7 }, /* U */
  537. { 2, 0, 1, 0, 7 }, /* V */
  538. { 3, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  549. { 1, 0, 1, 0, 7 }, /* U */
  550. { 2, 0, 1, 0, 7 }, /* V */
  551. { 3, 0, 1, 0, 7 }, /* 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, 0, 1, 0, 7 }, /* Y */
  562. { 1, 0, 1, 0, 7 }, /* U */
  563. { 2, 0, 1, 0, 7 }, /* V */
  564. { 3, 0, 1, 0, 7 }, /* 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, 1, 1, 0, 8 }, /* Y */
  575. { 1, 1, 1, 0, 8 }, /* U */
  576. { 2, 1, 1, 0, 8 }, /* V */
  577. { 3, 1, 1, 0, 8 }, /* A */
  578. },
  579. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  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, 1, 1, 0, 8 }, /* Y */
  588. { 1, 1, 1, 0, 8 }, /* U */
  589. { 2, 1, 1, 0, 8 }, /* V */
  590. { 3, 1, 1, 0, 8 }, /* 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, 1, 1, 0, 8 }, /* Y */
  601. { 1, 1, 1, 0, 8 }, /* U */
  602. { 2, 1, 1, 0, 8 }, /* V */
  603. { 3, 1, 1, 0, 8 }, /* 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, 1, 1, 0, 8 }, /* Y */
  614. { 1, 1, 1, 0, 8 }, /* U */
  615. { 2, 1, 1, 0, 8 }, /* V */
  616. { 3, 1, 1, 0, 8 }, /* 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, 1, 1, 0, 8 }, /* Y */
  627. { 1, 1, 1, 0, 8 }, /* U */
  628. { 2, 1, 1, 0, 8 }, /* V */
  629. { 3, 1, 1, 0, 8 }, /* 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, 1, 1, 0, 8 }, /* Y */
  640. { 1, 1, 1, 0, 8 }, /* U */
  641. { 2, 1, 1, 0, 8 }, /* V */
  642. { 3, 1, 1, 0, 8 }, /* 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, 1, 1, 0, 9 }, /* Y */
  653. { 1, 1, 1, 0, 9 }, /* U */
  654. { 2, 1, 1, 0, 9 }, /* V */
  655. { 3, 1, 1, 0, 9 }, /* 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, 1, 1, 0, 9 }, /* Y */
  666. { 1, 1, 1, 0, 9 }, /* U */
  667. { 2, 1, 1, 0, 9 }, /* V */
  668. { 3, 1, 1, 0, 9 }, /* 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, 1, 1, 0, 9 }, /* Y */
  679. { 1, 1, 1, 0, 9 }, /* U */
  680. { 2, 1, 1, 0, 9 }, /* V */
  681. { 3, 1, 1, 0, 9 }, /* 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, 1, 1, 0, 9 }, /* Y */
  692. { 1, 1, 1, 0, 9 }, /* U */
  693. { 2, 1, 1, 0, 9 }, /* V */
  694. { 3, 1, 1, 0, 9 }, /* 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, 1, 1, 0, 9 }, /* Y */
  705. { 1, 1, 1, 0, 9 }, /* U */
  706. { 2, 1, 1, 0, 9 }, /* V */
  707. { 3, 1, 1, 0, 9 }, /* 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, 1, 1, 0, 9 }, /* Y */
  718. { 1, 1, 1, 0, 9 }, /* U */
  719. { 2, 1, 1, 0, 9 }, /* V */
  720. { 3, 1, 1, 0, 9 }, /* 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, 1, 1, 0, 15 }, /* Y */
  731. { 1, 1, 1, 0, 15 }, /* U */
  732. { 2, 1, 1, 0, 15 }, /* V */
  733. { 3, 1, 1, 0, 15 }, /* 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, 1, 1, 0, 15 }, /* Y */
  744. { 1, 1, 1, 0, 15 }, /* U */
  745. { 2, 1, 1, 0, 15 }, /* V */
  746. { 3, 1, 1, 0, 15 }, /* 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, 1, 1, 0, 15 }, /* Y */
  757. { 1, 1, 1, 0, 15 }, /* U */
  758. { 2, 1, 1, 0, 15 }, /* V */
  759. { 3, 1, 1, 0, 15 }, /* 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, 1, 1, 0, 15 }, /* Y */
  770. { 1, 1, 1, 0, 15 }, /* U */
  771. { 2, 1, 1, 0, 15 }, /* V */
  772. { 3, 1, 1, 0, 15 }, /* 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, 1, 1, 0, 15 }, /* Y */
  783. { 1, 1, 1, 0, 15 }, /* U */
  784. { 2, 1, 1, 0, 15 }, /* V */
  785. { 3, 1, 1, 0, 15 }, /* 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, 1, 1, 0, 15 }, /* Y */
  796. { 1, 1, 1, 0, 15 }, /* U */
  797. { 2, 1, 1, 0, 15 }, /* V */
  798. { 3, 1, 1, 0, 15 }, /* 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, 5, 1, 0, 15 }, /* R */
  847. { 0, 5, 3, 0, 15 }, /* G */
  848. { 0, 5, 5, 0, 15 }, /* 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, 5, 1, 0, 15 }, /* R */
  859. { 0, 5, 3, 0, 15 }, /* G */
  860. { 0, 5, 5, 0, 15 }, /* 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, 7, 1, 0, 15 }, /* R */
  871. { 0, 7, 3, 0, 15 }, /* G */
  872. { 0, 7, 5, 0, 15 }, /* B */
  873. { 0, 7, 7, 0, 15 }, /* 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, 7, 1, 0, 15 }, /* R */
  884. { 0, 7, 3, 0, 15 }, /* G */
  885. { 0, 7, 5, 0, 15 }, /* B */
  886. { 0, 7, 7, 0, 15 }, /* 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, 1, 0, 3, 4 }, /* R */
  897. { 0, 1, 1, 5, 5 }, /* G */
  898. { 0, 1, 1, 0, 4 }, /* 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, 1, 2, 3, 4 }, /* R */
  909. { 0, 1, 1, 5, 5 }, /* G */
  910. { 0, 1, 1, 0, 4 }, /* 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, 1, 0, 2, 4 }, /* R */
  921. { 0, 1, 1, 5, 4 }, /* G */
  922. { 0, 1, 1, 0, 4 }, /* 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, 1, 2, 2, 4 }, /* R */
  933. { 0, 1, 1, 5, 4 }, /* G */
  934. { 0, 1, 1, 0, 4 }, /* 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, 1, 0, 0, 3 }, /* R */
  945. { 0, 1, 1, 4, 3 }, /* G */
  946. { 0, 1, 1, 0, 3 }, /* 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, 1, 2, 0, 3 }, /* R */
  957. { 0, 1, 1, 4, 3 }, /* G */
  958. { 0, 1, 1, 0, 3 }, /* 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, 5, 1, 0, 15 }, /* B */
  969. { 0, 5, 3, 0, 15 }, /* G */
  970. { 0, 5, 5, 0, 15 }, /* R */
  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, 5, 1, 0, 15 }, /* B */
  981. { 0, 5, 3, 0, 15 }, /* G */
  982. { 0, 5, 5, 0, 15 }, /* R */
  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, 5, 1, 0, 15 }, /* B */
  993. { 0, 5, 3, 0, 15 }, /* G */
  994. { 0, 5, 5, 0, 15 }, /* R */
  995. { 0, 5, 7, 0, 15 }, /* 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, 5, 1, 0, 15 }, /* B */
  1006. { 0, 5, 3, 0, 15 }, /* G */
  1007. { 0, 5, 5, 0, 15 }, /* R */
  1008. { 0, 5, 7, 0, 15 }, /* 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, 1, 0, 3, 4 }, /* B */
  1019. { 0, 1, 1, 5, 5 }, /* G */
  1020. { 0, 1, 1, 0, 4 }, /* R */
  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, 1, 2, 3, 4 }, /* B */
  1031. { 0, 1, 1, 5, 5 }, /* G */
  1032. { 0, 1, 1, 0, 4 }, /* R */
  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, 1, 0, 2, 4 }, /* B */
  1043. { 0, 1, 1, 5, 4 }, /* G */
  1044. { 0, 1, 1, 0, 4 }, /* R */
  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, 1, 2, 2, 4 }, /* B */
  1055. { 0, 1, 1, 5, 4 }, /* G */
  1056. { 0, 1, 1, 0, 4 }, /* R */
  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, 1, 0, 0, 3 }, /* B */
  1067. { 0, 1, 1, 4, 3 }, /* G */
  1068. { 0, 1, 1, 0, 3 }, /* R */
  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, 1, 2, 0, 3 }, /* B */
  1079. { 0, 1, 1, 4, 3 }, /* G */
  1080. { 0, 1, 1, 0, 3 }, /* R */
  1081. },
  1082. .flags = AV_PIX_FMT_FLAG_RGB,
  1083. },
  1084. [AV_PIX_FMT_VAAPI_MOCO] = {
  1085. .name = "vaapi_moco",
  1086. .log2_chroma_w = 1,
  1087. .log2_chroma_h = 1,
  1088. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1089. },
  1090. [AV_PIX_FMT_VAAPI_IDCT] = {
  1091. .name = "vaapi_idct",
  1092. .log2_chroma_w = 1,
  1093. .log2_chroma_h = 1,
  1094. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1095. },
  1096. [AV_PIX_FMT_VAAPI_VLD] = {
  1097. .name = "vaapi_vld",
  1098. .log2_chroma_w = 1,
  1099. .log2_chroma_h = 1,
  1100. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1101. },
  1102. [AV_PIX_FMT_VDA_VLD] = {
  1103. .name = "vda_vld",
  1104. .log2_chroma_w = 1,
  1105. .log2_chroma_h = 1,
  1106. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1107. },
  1108. [AV_PIX_FMT_YUV420P9LE] = {
  1109. .name = "yuv420p9le",
  1110. .nb_components = 3,
  1111. .log2_chroma_w = 1,
  1112. .log2_chroma_h = 1,
  1113. .comp = {
  1114. { 0, 1, 1, 0, 8 }, /* Y */
  1115. { 1, 1, 1, 0, 8 }, /* U */
  1116. { 2, 1, 1, 0, 8 }, /* V */
  1117. },
  1118. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1119. },
  1120. [AV_PIX_FMT_YUV420P9BE] = {
  1121. .name = "yuv420p9be",
  1122. .nb_components = 3,
  1123. .log2_chroma_w = 1,
  1124. .log2_chroma_h = 1,
  1125. .comp = {
  1126. { 0, 1, 1, 0, 8 }, /* Y */
  1127. { 1, 1, 1, 0, 8 }, /* U */
  1128. { 2, 1, 1, 0, 8 }, /* V */
  1129. },
  1130. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1131. },
  1132. [AV_PIX_FMT_YUV420P10LE] = {
  1133. .name = "yuv420p10le",
  1134. .nb_components = 3,
  1135. .log2_chroma_w = 1,
  1136. .log2_chroma_h = 1,
  1137. .comp = {
  1138. { 0, 1, 1, 0, 9 }, /* Y */
  1139. { 1, 1, 1, 0, 9 }, /* U */
  1140. { 2, 1, 1, 0, 9 }, /* V */
  1141. },
  1142. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1143. },
  1144. [AV_PIX_FMT_YUV420P10BE] = {
  1145. .name = "yuv420p10be",
  1146. .nb_components = 3,
  1147. .log2_chroma_w = 1,
  1148. .log2_chroma_h = 1,
  1149. .comp = {
  1150. { 0, 1, 1, 0, 9 }, /* Y */
  1151. { 1, 1, 1, 0, 9 }, /* U */
  1152. { 2, 1, 1, 0, 9 }, /* V */
  1153. },
  1154. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1155. },
  1156. [AV_PIX_FMT_YUV420P16LE] = {
  1157. .name = "yuv420p16le",
  1158. .nb_components = 3,
  1159. .log2_chroma_w = 1,
  1160. .log2_chroma_h = 1,
  1161. .comp = {
  1162. { 0, 1, 1, 0, 15 }, /* Y */
  1163. { 1, 1, 1, 0, 15 }, /* U */
  1164. { 2, 1, 1, 0, 15 }, /* V */
  1165. },
  1166. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1167. },
  1168. [AV_PIX_FMT_YUV420P16BE] = {
  1169. .name = "yuv420p16be",
  1170. .nb_components = 3,
  1171. .log2_chroma_w = 1,
  1172. .log2_chroma_h = 1,
  1173. .comp = {
  1174. { 0, 1, 1, 0, 15 }, /* Y */
  1175. { 1, 1, 1, 0, 15 }, /* U */
  1176. { 2, 1, 1, 0, 15 }, /* V */
  1177. },
  1178. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1179. },
  1180. [AV_PIX_FMT_YUV422P9LE] = {
  1181. .name = "yuv422p9le",
  1182. .nb_components = 3,
  1183. .log2_chroma_w = 1,
  1184. .log2_chroma_h = 0,
  1185. .comp = {
  1186. { 0, 1, 1, 0, 8 }, /* Y */
  1187. { 1, 1, 1, 0, 8 }, /* U */
  1188. { 2, 1, 1, 0, 8 }, /* V */
  1189. },
  1190. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1191. },
  1192. [AV_PIX_FMT_YUV422P9BE] = {
  1193. .name = "yuv422p9be",
  1194. .nb_components = 3,
  1195. .log2_chroma_w = 1,
  1196. .log2_chroma_h = 0,
  1197. .comp = {
  1198. { 0, 1, 1, 0, 8 }, /* Y */
  1199. { 1, 1, 1, 0, 8 }, /* U */
  1200. { 2, 1, 1, 0, 8 }, /* V */
  1201. },
  1202. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1203. },
  1204. [AV_PIX_FMT_YUV422P10LE] = {
  1205. .name = "yuv422p10le",
  1206. .nb_components = 3,
  1207. .log2_chroma_w = 1,
  1208. .log2_chroma_h = 0,
  1209. .comp = {
  1210. { 0, 1, 1, 0, 9 }, /* Y */
  1211. { 1, 1, 1, 0, 9 }, /* U */
  1212. { 2, 1, 1, 0, 9 }, /* V */
  1213. },
  1214. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1215. },
  1216. [AV_PIX_FMT_YUV422P10BE] = {
  1217. .name = "yuv422p10be",
  1218. .nb_components = 3,
  1219. .log2_chroma_w = 1,
  1220. .log2_chroma_h = 0,
  1221. .comp = {
  1222. { 0, 1, 1, 0, 9 }, /* Y */
  1223. { 1, 1, 1, 0, 9 }, /* U */
  1224. { 2, 1, 1, 0, 9 }, /* V */
  1225. },
  1226. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1227. },
  1228. [AV_PIX_FMT_YUV422P16LE] = {
  1229. .name = "yuv422p16le",
  1230. .nb_components = 3,
  1231. .log2_chroma_w = 1,
  1232. .log2_chroma_h = 0,
  1233. .comp = {
  1234. { 0, 1, 1, 0, 15 }, /* Y */
  1235. { 1, 1, 1, 0, 15 }, /* U */
  1236. { 2, 1, 1, 0, 15 }, /* V */
  1237. },
  1238. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1239. },
  1240. [AV_PIX_FMT_YUV422P16BE] = {
  1241. .name = "yuv422p16be",
  1242. .nb_components = 3,
  1243. .log2_chroma_w = 1,
  1244. .log2_chroma_h = 0,
  1245. .comp = {
  1246. { 0, 1, 1, 0, 15 }, /* Y */
  1247. { 1, 1, 1, 0, 15 }, /* U */
  1248. { 2, 1, 1, 0, 15 }, /* V */
  1249. },
  1250. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1251. },
  1252. [AV_PIX_FMT_YUV444P16LE] = {
  1253. .name = "yuv444p16le",
  1254. .nb_components = 3,
  1255. .log2_chroma_w = 0,
  1256. .log2_chroma_h = 0,
  1257. .comp = {
  1258. { 0, 1, 1, 0, 15 }, /* Y */
  1259. { 1, 1, 1, 0, 15 }, /* U */
  1260. { 2, 1, 1, 0, 15 }, /* V */
  1261. },
  1262. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1263. },
  1264. [AV_PIX_FMT_YUV444P16BE] = {
  1265. .name = "yuv444p16be",
  1266. .nb_components = 3,
  1267. .log2_chroma_w = 0,
  1268. .log2_chroma_h = 0,
  1269. .comp = {
  1270. { 0, 1, 1, 0, 15 }, /* Y */
  1271. { 1, 1, 1, 0, 15 }, /* U */
  1272. { 2, 1, 1, 0, 15 }, /* V */
  1273. },
  1274. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1275. },
  1276. [AV_PIX_FMT_YUV444P10LE] = {
  1277. .name = "yuv444p10le",
  1278. .nb_components = 3,
  1279. .log2_chroma_w = 0,
  1280. .log2_chroma_h = 0,
  1281. .comp = {
  1282. { 0, 1, 1, 0, 9 }, /* Y */
  1283. { 1, 1, 1, 0, 9 }, /* U */
  1284. { 2, 1, 1, 0, 9 }, /* V */
  1285. },
  1286. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1287. },
  1288. [AV_PIX_FMT_YUV444P10BE] = {
  1289. .name = "yuv444p10be",
  1290. .nb_components = 3,
  1291. .log2_chroma_w = 0,
  1292. .log2_chroma_h = 0,
  1293. .comp = {
  1294. { 0, 1, 1, 0, 9 }, /* Y */
  1295. { 1, 1, 1, 0, 9 }, /* U */
  1296. { 2, 1, 1, 0, 9 }, /* V */
  1297. },
  1298. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1299. },
  1300. [AV_PIX_FMT_YUV444P9LE] = {
  1301. .name = "yuv444p9le",
  1302. .nb_components = 3,
  1303. .log2_chroma_w = 0,
  1304. .log2_chroma_h = 0,
  1305. .comp = {
  1306. { 0, 1, 1, 0, 8 }, /* Y */
  1307. { 1, 1, 1, 0, 8 }, /* U */
  1308. { 2, 1, 1, 0, 8 }, /* V */
  1309. },
  1310. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1311. },
  1312. [AV_PIX_FMT_YUV444P9BE] = {
  1313. .name = "yuv444p9be",
  1314. .nb_components = 3,
  1315. .log2_chroma_w = 0,
  1316. .log2_chroma_h = 0,
  1317. .comp = {
  1318. { 0, 1, 1, 0, 8 }, /* Y */
  1319. { 1, 1, 1, 0, 8 }, /* U */
  1320. { 2, 1, 1, 0, 8 }, /* V */
  1321. },
  1322. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR,
  1323. },
  1324. [AV_PIX_FMT_D3D11VA_VLD] = {
  1325. .name = "d3d11va_vld",
  1326. .log2_chroma_w = 1,
  1327. .log2_chroma_h = 1,
  1328. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1329. },
  1330. [AV_PIX_FMT_DXVA2_VLD] = {
  1331. .name = "dxva2_vld",
  1332. .log2_chroma_w = 1,
  1333. .log2_chroma_h = 1,
  1334. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1335. },
  1336. [AV_PIX_FMT_YA8] = {
  1337. .name = "ya8",
  1338. .nb_components = 2,
  1339. .comp = {
  1340. { 0, 1, 1, 0, 7 }, /* Y */
  1341. { 0, 1, 2, 0, 7 }, /* A */
  1342. },
  1343. .flags = AV_PIX_FMT_FLAG_ALPHA,
  1344. .alias = "gray8a",
  1345. },
  1346. [AV_PIX_FMT_YA16LE] = {
  1347. .name = "ya16le",
  1348. .nb_components = 2,
  1349. .comp = {
  1350. { 0, 3, 1, 0, 15 }, /* Y */
  1351. { 0, 3, 3, 0, 15 }, /* A */
  1352. },
  1353. .flags = AV_PIX_FMT_FLAG_ALPHA,
  1354. },
  1355. [AV_PIX_FMT_YA16BE] = {
  1356. .name = "ya16be",
  1357. .nb_components = 2,
  1358. .comp = {
  1359. { 0, 3, 1, 0, 15 }, /* Y */
  1360. { 0, 3, 3, 0, 15 }, /* A */
  1361. },
  1362. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA,
  1363. },
  1364. [AV_PIX_FMT_GBRP] = {
  1365. .name = "gbrp",
  1366. .nb_components = 3,
  1367. .log2_chroma_w = 0,
  1368. .log2_chroma_h = 0,
  1369. .comp = {
  1370. { 0, 0, 1, 0, 7 }, /* G */
  1371. { 1, 0, 1, 0, 7 }, /* B */
  1372. { 2, 0, 1, 0, 7 }, /* R */
  1373. },
  1374. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1375. },
  1376. [AV_PIX_FMT_GBRP9LE] = {
  1377. .name = "gbrp9le",
  1378. .nb_components = 3,
  1379. .log2_chroma_w = 0,
  1380. .log2_chroma_h = 0,
  1381. .comp = {
  1382. { 0, 1, 1, 0, 8 }, /* G */
  1383. { 1, 1, 1, 0, 8 }, /* B */
  1384. { 2, 1, 1, 0, 8 }, /* R */
  1385. },
  1386. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1387. },
  1388. [AV_PIX_FMT_GBRP9BE] = {
  1389. .name = "gbrp9be",
  1390. .nb_components = 3,
  1391. .log2_chroma_w = 0,
  1392. .log2_chroma_h = 0,
  1393. .comp = {
  1394. { 0, 1, 1, 0, 8 }, /* G */
  1395. { 1, 1, 1, 0, 8 }, /* B */
  1396. { 2, 1, 1, 0, 8 }, /* R */
  1397. },
  1398. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1399. },
  1400. [AV_PIX_FMT_GBRP10LE] = {
  1401. .name = "gbrp10le",
  1402. .nb_components = 3,
  1403. .log2_chroma_w = 0,
  1404. .log2_chroma_h = 0,
  1405. .comp = {
  1406. { 0, 1, 1, 0, 9 }, /* G */
  1407. { 1, 1, 1, 0, 9 }, /* B */
  1408. { 2, 1, 1, 0, 9 }, /* R */
  1409. },
  1410. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1411. },
  1412. [AV_PIX_FMT_GBRP10BE] = {
  1413. .name = "gbrp10be",
  1414. .nb_components = 3,
  1415. .log2_chroma_w = 0,
  1416. .log2_chroma_h = 0,
  1417. .comp = {
  1418. { 0, 1, 1, 0, 9 }, /* G */
  1419. { 1, 1, 1, 0, 9 }, /* B */
  1420. { 2, 1, 1, 0, 9 }, /* R */
  1421. },
  1422. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1423. },
  1424. [AV_PIX_FMT_GBRP16LE] = {
  1425. .name = "gbrp16le",
  1426. .nb_components = 3,
  1427. .log2_chroma_w = 0,
  1428. .log2_chroma_h = 0,
  1429. .comp = {
  1430. { 0, 1, 1, 0, 15 }, /* G */
  1431. { 1, 1, 1, 0, 15 }, /* B */
  1432. { 2, 1, 1, 0, 15 }, /* R */
  1433. },
  1434. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1435. },
  1436. [AV_PIX_FMT_GBRP16BE] = {
  1437. .name = "gbrp16be",
  1438. .nb_components = 3,
  1439. .log2_chroma_w = 0,
  1440. .log2_chroma_h = 0,
  1441. .comp = {
  1442. { 0, 1, 1, 0, 15 }, /* G */
  1443. { 1, 1, 1, 0, 15 }, /* B */
  1444. { 2, 1, 1, 0, 15 }, /* R */
  1445. },
  1446. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB,
  1447. },
  1448. [AV_PIX_FMT_GBRAP] = {
  1449. .name = "gbrap",
  1450. .nb_components = 4,
  1451. .log2_chroma_w = 0,
  1452. .log2_chroma_h = 0,
  1453. .comp = {
  1454. { 0, 0, 1, 0, 7 }, /* G */
  1455. { 1, 0, 1, 0, 7 }, /* B */
  1456. { 2, 0, 1, 0, 7 }, /* R */
  1457. { 3, 0, 1, 0, 7 }, /* A */
  1458. },
  1459. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1460. AV_PIX_FMT_FLAG_ALPHA,
  1461. },
  1462. [AV_PIX_FMT_GBRAP16LE] = {
  1463. .name = "gbrap16le",
  1464. .nb_components = 4,
  1465. .log2_chroma_w = 0,
  1466. .log2_chroma_h = 0,
  1467. .comp = {
  1468. { 0, 1, 1, 0, 15 }, /* G */
  1469. { 1, 1, 1, 0, 15 }, /* B */
  1470. { 2, 1, 1, 0, 15 }, /* R */
  1471. { 3, 1, 1, 0, 15 }, /* A */
  1472. },
  1473. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB |
  1474. AV_PIX_FMT_FLAG_ALPHA,
  1475. },
  1476. [AV_PIX_FMT_GBRAP16BE] = {
  1477. .name = "gbrap16be",
  1478. .nb_components = 4,
  1479. .log2_chroma_w = 0,
  1480. .log2_chroma_h = 0,
  1481. .comp = {
  1482. { 0, 1, 1, 0, 15 }, /* G */
  1483. { 1, 1, 1, 0, 15 }, /* B */
  1484. { 2, 1, 1, 0, 15 }, /* R */
  1485. { 3, 1, 1, 0, 15 }, /* A */
  1486. },
  1487. .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR |
  1488. AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA,
  1489. },
  1490. [AV_PIX_FMT_VDPAU] = {
  1491. .name = "vdpau",
  1492. .log2_chroma_w = 1,
  1493. .log2_chroma_h = 1,
  1494. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1495. },
  1496. [AV_PIX_FMT_XYZ12LE] = {
  1497. .name = "xyz12le",
  1498. .nb_components = 3,
  1499. .log2_chroma_w = 0,
  1500. .log2_chroma_h = 0,
  1501. .comp = {
  1502. { 0, 5, 1, 4, 11 }, /* X */
  1503. { 0, 5, 3, 4, 11 }, /* Y */
  1504. { 0, 5, 5, 4, 11 }, /* Z */
  1505. },
  1506. /*.flags = -- not used*/
  1507. },
  1508. [AV_PIX_FMT_XYZ12BE] = {
  1509. .name = "xyz12be",
  1510. .nb_components = 3,
  1511. .log2_chroma_w = 0,
  1512. .log2_chroma_h = 0,
  1513. .comp = {
  1514. { 0, 5, 1, 4, 11 }, /* X */
  1515. { 0, 5, 3, 4, 11 }, /* Y */
  1516. { 0, 5, 5, 4, 11 }, /* Z */
  1517. },
  1518. .flags = AV_PIX_FMT_FLAG_BE,
  1519. },
  1520. [AV_PIX_FMT_NV16] = {
  1521. .name = "nv16",
  1522. .nb_components = 3,
  1523. .log2_chroma_w = 1,
  1524. .log2_chroma_h = 0,
  1525. .comp = {
  1526. { 0, 0, 1, 0, 7 }, /* Y */
  1527. { 1, 1, 1, 0, 7 }, /* U */
  1528. { 1, 1, 2, 0, 7 }, /* V */
  1529. },
  1530. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1531. },
  1532. [AV_PIX_FMT_NV20LE] = {
  1533. .name = "nv20le",
  1534. .nb_components = 3,
  1535. .log2_chroma_w = 1,
  1536. .log2_chroma_h = 0,
  1537. .comp = {
  1538. { 0, 1, 1, 0, 9 }, /* Y */
  1539. { 1, 3, 1, 0, 9 }, /* U */
  1540. { 1, 3, 3, 0, 9 }, /* V */
  1541. },
  1542. .flags = AV_PIX_FMT_FLAG_PLANAR,
  1543. },
  1544. [AV_PIX_FMT_NV20BE] = {
  1545. .name = "nv20be",
  1546. .nb_components = 3,
  1547. .log2_chroma_w = 1,
  1548. .log2_chroma_h = 0,
  1549. .comp = {
  1550. { 0, 1, 1, 0, 9 }, /* Y */
  1551. { 1, 3, 1, 0, 9 }, /* U */
  1552. { 1, 3, 3, 0, 9 }, /* V */
  1553. },
  1554. .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE,
  1555. },
  1556. [AV_PIX_FMT_VDA] = {
  1557. .name = "vda",
  1558. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1559. },
  1560. [AV_PIX_FMT_QSV] = {
  1561. .name = "qsv",
  1562. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1563. },
  1564. [AV_PIX_FMT_MMAL] = {
  1565. .name = "mmal",
  1566. .flags = AV_PIX_FMT_FLAG_HWACCEL,
  1567. },
  1568. };
  1569. static const char *color_range_names[AVCOL_RANGE_NB] = {
  1570. "unknown", "tv", "pc",
  1571. };
  1572. static const char *color_primaries_names[AVCOL_PRI_NB] = {
  1573. "reserved", "bt709", "unknown", "reserved", "bt470m",
  1574. "bt470bg", "smpte170m", "smpte240m", "film", "bt2020",
  1575. };
  1576. static const char *color_transfer_names[AVCOL_TRC_NB] = {
  1577. "reserved", "bt709", "unknown", "reserved", "bt470m",
  1578. "bt470bg", "smpte170m", "smpte240m", "linear", "log100",
  1579. "log316", "iec61966-2-4", "bt1361e", "iec61966-2-1",
  1580. "bt2020-10", "bt2020-20",
  1581. };
  1582. static const char *color_space_names[AVCOL_SPC_NB] = {
  1583. "gbr", "bt709", "unknown", "reserved", "fcc",
  1584. "bt470bg", "smpte170m", "smpte240m", "ycgco",
  1585. "bt2020nc", "bt2020c",
  1586. };
  1587. static const char *chroma_location_names[AVCHROMA_LOC_NB] = {
  1588. "unspecified", "left", "center", "topleft",
  1589. "top", "bottomleft", "bottom",
  1590. };
  1591. FF_DISABLE_DEPRECATION_WARNINGS
  1592. static enum AVPixelFormat get_pix_fmt_internal(const char *name)
  1593. {
  1594. enum AVPixelFormat pix_fmt;
  1595. for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++)
  1596. if (av_pix_fmt_descriptors[pix_fmt].name &&
  1597. (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) ||
  1598. av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias)))
  1599. return pix_fmt;
  1600. return AV_PIX_FMT_NONE;
  1601. }
  1602. const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
  1603. {
  1604. return (unsigned)pix_fmt < AV_PIX_FMT_NB ?
  1605. av_pix_fmt_descriptors[pix_fmt].name : NULL;
  1606. }
  1607. #if HAVE_BIGENDIAN
  1608. # define X_NE(be, le) be
  1609. #else
  1610. # define X_NE(be, le) le
  1611. #endif
  1612. enum AVPixelFormat av_get_pix_fmt(const char *name)
  1613. {
  1614. enum AVPixelFormat pix_fmt;
  1615. if (!strcmp(name, "rgb32"))
  1616. name = X_NE("argb", "bgra");
  1617. else if (!strcmp(name, "bgr32"))
  1618. name = X_NE("abgr", "rgba");
  1619. pix_fmt = get_pix_fmt_internal(name);
  1620. if (pix_fmt == AV_PIX_FMT_NONE) {
  1621. char name2[32];
  1622. snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
  1623. pix_fmt = get_pix_fmt_internal(name2);
  1624. }
  1625. return pix_fmt;
  1626. }
  1627. int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
  1628. {
  1629. int c, bits = 0;
  1630. int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
  1631. for (c = 0; c < pixdesc->nb_components; c++) {
  1632. int s = c == 1 || c == 2 ? 0 : log2_pixels;
  1633. bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
  1634. }
  1635. return bits >> log2_pixels;
  1636. }
  1637. char *av_get_pix_fmt_string(char *buf, int buf_size,
  1638. enum AVPixelFormat pix_fmt)
  1639. {
  1640. /* print header */
  1641. if (pix_fmt < 0) {
  1642. snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
  1643. } else {
  1644. const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
  1645. snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
  1646. pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
  1647. }
  1648. return buf;
  1649. }
  1650. const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
  1651. {
  1652. if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
  1653. return NULL;
  1654. return &av_pix_fmt_descriptors[pix_fmt];
  1655. }
  1656. const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev)
  1657. {
  1658. if (!prev)
  1659. return &av_pix_fmt_descriptors[0];
  1660. if (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1)
  1661. return prev + 1;
  1662. return NULL;
  1663. }
  1664. enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc)
  1665. {
  1666. if (desc < av_pix_fmt_descriptors ||
  1667. desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors))
  1668. return AV_PIX_FMT_NONE;
  1669. return desc - av_pix_fmt_descriptors;
  1670. }
  1671. FF_ENABLE_DEPRECATION_WARNINGS
  1672. int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt,
  1673. int *h_shift, int *v_shift)
  1674. {
  1675. const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
  1676. if (!desc)
  1677. return AVERROR(ENOSYS);
  1678. *h_shift = desc->log2_chroma_w;
  1679. *v_shift = desc->log2_chroma_h;
  1680. return 0;
  1681. }
  1682. int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
  1683. {
  1684. const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt);
  1685. int i, planes[4] = { 0 }, ret = 0;
  1686. if (!desc)
  1687. return AVERROR(EINVAL);
  1688. for (i = 0; i < desc->nb_components; i++)
  1689. planes[desc->comp[i].plane] = 1;
  1690. for (i = 0; i < FF_ARRAY_ELEMS(planes); i++)
  1691. ret += planes[i];
  1692. return ret;
  1693. }
  1694. enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt)
  1695. {
  1696. #define PIX_FMT_SWAP_ENDIANNESS(fmt) \
  1697. case AV_PIX_FMT_ ## fmt ## BE: return AV_PIX_FMT_ ## fmt ## LE; \
  1698. case AV_PIX_FMT_ ## fmt ## LE: return AV_PIX_FMT_ ## fmt ## BE
  1699. switch (pix_fmt) {
  1700. PIX_FMT_SWAP_ENDIANNESS(GRAY16);
  1701. PIX_FMT_SWAP_ENDIANNESS(YA16);
  1702. PIX_FMT_SWAP_ENDIANNESS(RGB48);
  1703. PIX_FMT_SWAP_ENDIANNESS(RGB565);
  1704. PIX_FMT_SWAP_ENDIANNESS(RGB555);
  1705. PIX_FMT_SWAP_ENDIANNESS(RGB444);
  1706. PIX_FMT_SWAP_ENDIANNESS(BGR48);
  1707. PIX_FMT_SWAP_ENDIANNESS(BGR565);
  1708. PIX_FMT_SWAP_ENDIANNESS(BGR555);
  1709. PIX_FMT_SWAP_ENDIANNESS(BGR444);
  1710. PIX_FMT_SWAP_ENDIANNESS(YUV420P9);
  1711. PIX_FMT_SWAP_ENDIANNESS(YUV422P9);
  1712. PIX_FMT_SWAP_ENDIANNESS(YUV444P9);
  1713. PIX_FMT_SWAP_ENDIANNESS(YUV420P10);
  1714. PIX_FMT_SWAP_ENDIANNESS(YUV422P10);
  1715. PIX_FMT_SWAP_ENDIANNESS(YUV444P10);
  1716. PIX_FMT_SWAP_ENDIANNESS(YUV420P16);
  1717. PIX_FMT_SWAP_ENDIANNESS(YUV422P16);
  1718. PIX_FMT_SWAP_ENDIANNESS(YUV444P16);
  1719. PIX_FMT_SWAP_ENDIANNESS(GBRP9);
  1720. PIX_FMT_SWAP_ENDIANNESS(GBRP10);
  1721. PIX_FMT_SWAP_ENDIANNESS(GBRP16);
  1722. PIX_FMT_SWAP_ENDIANNESS(YUVA420P9);
  1723. PIX_FMT_SWAP_ENDIANNESS(YUVA422P9);
  1724. PIX_FMT_SWAP_ENDIANNESS(YUVA444P9);
  1725. PIX_FMT_SWAP_ENDIANNESS(YUVA420P10);
  1726. PIX_FMT_SWAP_ENDIANNESS(YUVA422P10);
  1727. PIX_FMT_SWAP_ENDIANNESS(YUVA444P10);
  1728. PIX_FMT_SWAP_ENDIANNESS(YUVA420P16);
  1729. PIX_FMT_SWAP_ENDIANNESS(YUVA422P16);
  1730. PIX_FMT_SWAP_ENDIANNESS(YUVA444P16);
  1731. PIX_FMT_SWAP_ENDIANNESS(XYZ12);
  1732. PIX_FMT_SWAP_ENDIANNESS(NV20);
  1733. PIX_FMT_SWAP_ENDIANNESS(RGBA64);
  1734. PIX_FMT_SWAP_ENDIANNESS(BGRA64);
  1735. default:
  1736. return AV_PIX_FMT_NONE;
  1737. }
  1738. #undef PIX_FMT_SWAP_ENDIANNESS
  1739. }
  1740. const char *av_color_range_name(enum AVColorRange range)
  1741. {
  1742. return (unsigned) range < AVCOL_RANGE_NB ?
  1743. color_range_names[range] : NULL;
  1744. }
  1745. const char *av_color_primaries_name(enum AVColorPrimaries primaries)
  1746. {
  1747. return (unsigned) primaries < AVCOL_PRI_NB ?
  1748. color_primaries_names[primaries] : NULL;
  1749. }
  1750. const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer)
  1751. {
  1752. return (unsigned) transfer < AVCOL_TRC_NB ?
  1753. color_transfer_names[transfer] : NULL;
  1754. }
  1755. const char *av_color_space_name(enum AVColorSpace space)
  1756. {
  1757. return (unsigned) space < AVCOL_SPC_NB ?
  1758. color_space_names[space] : NULL;
  1759. }
  1760. const char *av_chroma_location_name(enum AVChromaLocation location)
  1761. {
  1762. return (unsigned) location < AVCHROMA_LOC_NB ?
  1763. chroma_location_names[location] : NULL;
  1764. }