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.

1677 lines
50KB

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