1/* 2 * pixel format descriptor 3 * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at> 4 * 5 * This file is part of FFmpeg. 6 * 7 * FFmpeg 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 * FFmpeg 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 FFmpeg; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 22#include <stdio.h> 23#include <string.h> 24 25#include "avassert.h" 26#include "avstring.h" 27#include "common.h" 28#include "pixfmt.h" 29#include "pixdesc.h" 30#include "internal.h" 31#include "intreadwrite.h" 32 33void av_read_image_line2(void *dst, 34 const uint8_t *data[4], const int linesize[4], 35 const AVPixFmtDescriptor *desc, 36 int x, int y, int c, int w, 37 int read_pal_component, 38 int dst_element_size) 39{ 40 AVComponentDescriptor comp = desc->comp[c]; 41 int plane = comp.plane; 42 int depth = comp.depth; 43 unsigned mask = (1ULL << depth) - 1; 44 int shift = comp.shift; 45 int step = comp.step; 46 int flags = desc->flags; 47 uint16_t *dst16 = dst; 48 uint32_t *dst32 = dst; 49 50 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) { 51 int skip = x * step + comp.offset; 52 const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); 53 int shift = 8 - depth - (skip & 7); 54 55 while (w--) { 56 int val = (*p >> shift) & mask; 57 if (read_pal_component) 58 val = data[1][4*val + c]; 59 shift -= step; 60 p -= shift >> 3; 61 shift &= 7; 62 if (dst_element_size == 4) *dst32++ = val; 63 else *dst16++ = val; 64 } 65 } else { 66 const uint8_t *p = data[plane] + y * linesize[plane] + 67 x * step + comp.offset; 68 int is_8bit = shift + depth <= 8; 69 int is_16bit= shift + depth <=16; 70 71 if (is_8bit) 72 p += !!(flags & AV_PIX_FMT_FLAG_BE); 73 74 while (w--) { 75 unsigned val; 76 if (is_8bit) val = *p; 77 else if(is_16bit) val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB16(p) : AV_RL16(p); 78 else val = flags & AV_PIX_FMT_FLAG_BE ? AV_RB32(p) : AV_RL32(p); 79 val = (val >> shift) & mask; 80 if (read_pal_component) 81 val = data[1][4 * val + c]; 82 p += step; 83 if (dst_element_size == 4) *dst32++ = val; 84 else *dst16++ = val; 85 } 86 } 87} 88 89void av_read_image_line(uint16_t *dst, 90 const uint8_t *data[4], const int linesize[4], 91 const AVPixFmtDescriptor *desc, 92 int x, int y, int c, int w, 93 int read_pal_component) 94{ 95 av_read_image_line2(dst, data, linesize, desc,x, y, c, w, 96 read_pal_component, 97 2); 98} 99 100void av_write_image_line2(const void *src, 101 uint8_t *data[4], const int linesize[4], 102 const AVPixFmtDescriptor *desc, 103 int x, int y, int c, int w, int src_element_size) 104{ 105 AVComponentDescriptor comp = desc->comp[c]; 106 int plane = comp.plane; 107 int depth = comp.depth; 108 int step = comp.step; 109 int flags = desc->flags; 110 const uint32_t *src32 = src; 111 const uint16_t *src16 = src; 112 113 if (flags & AV_PIX_FMT_FLAG_BITSTREAM) { 114 int skip = x * step + comp.offset; 115 uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3); 116 int shift = 8 - depth - (skip & 7); 117 118 while (w--) { 119 *p |= (src_element_size == 4 ? *src32++ : *src16++) << shift; 120 shift -= step; 121 p -= shift >> 3; 122 shift &= 7; 123 } 124 } else { 125 int shift = comp.shift; 126 uint8_t *p = data[plane] + y * linesize[plane] + 127 x * step + comp.offset; 128 129 if (shift + depth <= 8) { 130 p += !!(flags & AV_PIX_FMT_FLAG_BE); 131 while (w--) { 132 *p |= ((src_element_size == 4 ? *src32++ : *src16++) << shift); 133 p += step; 134 } 135 } else { 136 while (w--) { 137 unsigned s = (src_element_size == 4 ? *src32++ : *src16++); 138 if (shift + depth <= 16) { 139 if (flags & AV_PIX_FMT_FLAG_BE) { 140 uint16_t val = AV_RB16(p) | (s << shift); 141 AV_WB16(p, val); 142 } else { 143 uint16_t val = AV_RL16(p) | (s << shift); 144 AV_WL16(p, val); 145 } 146 } else { 147 if (flags & AV_PIX_FMT_FLAG_BE) { 148 uint32_t val = AV_RB32(p) | (s << shift); 149 AV_WB32(p, val); 150 } else { 151 uint32_t val = AV_RL32(p) | (s << shift); 152 AV_WL32(p, val); 153 } 154 } 155 p += step; 156 } 157 } 158 } 159} 160 161void av_write_image_line(const uint16_t *src, 162 uint8_t *data[4], const int linesize[4], 163 const AVPixFmtDescriptor *desc, 164 int x, int y, int c, int w) 165{ 166 av_write_image_line2(src, data, linesize, desc, x, y, c, w, 2); 167} 168 169static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { 170 [AV_PIX_FMT_YUV420P] = { 171 .name = "yuv420p", 172 .nb_components = 3, 173 .log2_chroma_w = 1, 174 .log2_chroma_h = 1, 175 .comp = { 176 { 0, 1, 0, 0, 8 }, /* Y */ 177 { 1, 1, 0, 0, 8 }, /* U */ 178 { 2, 1, 0, 0, 8 }, /* V */ 179 }, 180 .flags = AV_PIX_FMT_FLAG_PLANAR, 181 }, 182 [AV_PIX_FMT_YUYV422] = { 183 .name = "yuyv422", 184 .nb_components = 3, 185 .log2_chroma_w = 1, 186 .log2_chroma_h = 0, 187 .comp = { 188 { 0, 2, 0, 0, 8 }, /* Y */ 189 { 0, 4, 1, 0, 8 }, /* U */ 190 { 0, 4, 3, 0, 8 }, /* V */ 191 }, 192 }, 193 [AV_PIX_FMT_YVYU422] = { 194 .name = "yvyu422", 195 .nb_components = 3, 196 .log2_chroma_w = 1, 197 .log2_chroma_h = 0, 198 .comp = { 199 { 0, 2, 0, 0, 8 }, /* Y */ 200 { 0, 4, 3, 0, 8 }, /* U */ 201 { 0, 4, 1, 0, 8 }, /* V */ 202 }, 203 }, 204 [AV_PIX_FMT_Y210LE] = { 205 .name = "y210le", 206 .nb_components = 3, 207 .log2_chroma_w = 1, 208 .log2_chroma_h = 0, 209 .comp = { 210 { 0, 4, 0, 6, 10 }, /* Y */ 211 { 0, 8, 2, 6, 10 }, /* U */ 212 { 0, 8, 6, 6, 10 }, /* V */ 213 }, 214 }, 215 [AV_PIX_FMT_Y210BE] = { 216 .name = "y210be", 217 .nb_components = 3, 218 .log2_chroma_w = 1, 219 .log2_chroma_h = 0, 220 .comp = { 221 { 0, 4, 0, 6, 10 }, /* Y */ 222 { 0, 8, 2, 6, 10 }, /* U */ 223 { 0, 8, 6, 6, 10 }, /* V */ 224 }, 225 .flags = AV_PIX_FMT_FLAG_BE, 226 }, 227 [AV_PIX_FMT_RGB24] = { 228 .name = "rgb24", 229 .nb_components = 3, 230 .log2_chroma_w = 0, 231 .log2_chroma_h = 0, 232 .comp = { 233 { 0, 3, 0, 0, 8 }, /* R */ 234 { 0, 3, 1, 0, 8 }, /* G */ 235 { 0, 3, 2, 0, 8 }, /* B */ 236 }, 237 .flags = AV_PIX_FMT_FLAG_RGB, 238 }, 239 [AV_PIX_FMT_BGR24] = { 240 .name = "bgr24", 241 .nb_components = 3, 242 .log2_chroma_w = 0, 243 .log2_chroma_h = 0, 244 .comp = { 245 { 0, 3, 2, 0, 8 }, /* R */ 246 { 0, 3, 1, 0, 8 }, /* G */ 247 { 0, 3, 0, 0, 8 }, /* B */ 248 }, 249 .flags = AV_PIX_FMT_FLAG_RGB, 250 }, 251 [AV_PIX_FMT_X2RGB10LE] = { 252 .name = "x2rgb10le", 253 .nb_components= 3, 254 .log2_chroma_w= 0, 255 .log2_chroma_h= 0, 256 .comp = { 257 { 0, 4, 2, 4, 10 }, /* R */ 258 { 0, 4, 1, 2, 10 }, /* G */ 259 { 0, 4, 0, 0, 10 }, /* B */ 260 }, 261 .flags = AV_PIX_FMT_FLAG_RGB, 262 }, 263 [AV_PIX_FMT_X2RGB10BE] = { 264 .name = "x2rgb10be", 265 .nb_components= 3, 266 .log2_chroma_w= 0, 267 .log2_chroma_h= 0, 268 .comp = { 269 { 0, 4, 0, 4, 10 }, /* R */ 270 { 0, 4, 1, 2, 10 }, /* G */ 271 { 0, 4, 2, 0, 10 }, /* B */ 272 }, 273 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, 274 }, 275 [AV_PIX_FMT_X2BGR10LE] = { 276 .name = "x2bgr10le", 277 .nb_components= 3, 278 .log2_chroma_w= 0, 279 .log2_chroma_h= 0, 280 .comp = { 281 { 0, 4, 0, 0, 10 }, /* R */ 282 { 0, 4, 1, 2, 10 }, /* G */ 283 { 0, 4, 2, 4, 10 }, /* B */ 284 }, 285 .flags = AV_PIX_FMT_FLAG_RGB, 286 }, 287 [AV_PIX_FMT_X2BGR10BE] = { 288 .name = "x2bgr10be", 289 .nb_components= 3, 290 .log2_chroma_w= 0, 291 .log2_chroma_h= 0, 292 .comp = { 293 { 0, 4, 2, 0, 10 }, /* R */ 294 { 0, 4, 1, 2, 10 }, /* G */ 295 { 0, 4, 0, 4, 10 }, /* B */ 296 }, 297 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, 298 }, 299 [AV_PIX_FMT_YUV422P] = { 300 .name = "yuv422p", 301 .nb_components = 3, 302 .log2_chroma_w = 1, 303 .log2_chroma_h = 0, 304 .comp = { 305 { 0, 1, 0, 0, 8 }, /* Y */ 306 { 1, 1, 0, 0, 8 }, /* U */ 307 { 2, 1, 0, 0, 8 }, /* V */ 308 }, 309 .flags = AV_PIX_FMT_FLAG_PLANAR, 310 }, 311 [AV_PIX_FMT_YUV444P] = { 312 .name = "yuv444p", 313 .nb_components = 3, 314 .log2_chroma_w = 0, 315 .log2_chroma_h = 0, 316 .comp = { 317 { 0, 1, 0, 0, 8 }, /* Y */ 318 { 1, 1, 0, 0, 8 }, /* U */ 319 { 2, 1, 0, 0, 8 }, /* V */ 320 }, 321 .flags = AV_PIX_FMT_FLAG_PLANAR, 322 }, 323 [AV_PIX_FMT_YUV410P] = { 324 .name = "yuv410p", 325 .nb_components = 3, 326 .log2_chroma_w = 2, 327 .log2_chroma_h = 2, 328 .comp = { 329 { 0, 1, 0, 0, 8 }, /* Y */ 330 { 1, 1, 0, 0, 8 }, /* U */ 331 { 2, 1, 0, 0, 8 }, /* V */ 332 }, 333 .flags = AV_PIX_FMT_FLAG_PLANAR, 334 }, 335 [AV_PIX_FMT_YUV411P] = { 336 .name = "yuv411p", 337 .nb_components = 3, 338 .log2_chroma_w = 2, 339 .log2_chroma_h = 0, 340 .comp = { 341 { 0, 1, 0, 0, 8 }, /* Y */ 342 { 1, 1, 0, 0, 8 }, /* U */ 343 { 2, 1, 0, 0, 8 }, /* V */ 344 }, 345 .flags = AV_PIX_FMT_FLAG_PLANAR, 346 }, 347 [AV_PIX_FMT_YUVJ411P] = { 348 .name = "yuvj411p", 349 .nb_components = 3, 350 .log2_chroma_w = 2, 351 .log2_chroma_h = 0, 352 .comp = { 353 { 0, 1, 0, 0, 8 }, /* Y */ 354 { 1, 1, 0, 0, 8 }, /* U */ 355 { 2, 1, 0, 0, 8 }, /* V */ 356 }, 357 .flags = AV_PIX_FMT_FLAG_PLANAR, 358 }, 359 [AV_PIX_FMT_GRAY8] = { 360 .name = "gray", 361 .nb_components = 1, 362 .log2_chroma_w = 0, 363 .log2_chroma_h = 0, 364 .comp = { 365 { 0, 1, 0, 0, 8 }, /* Y */ 366 }, 367 .alias = "gray8,y8", 368 }, 369 [AV_PIX_FMT_MONOWHITE] = { 370 .name = "monow", 371 .nb_components = 1, 372 .log2_chroma_w = 0, 373 .log2_chroma_h = 0, 374 .comp = { 375 { 0, 1, 0, 0, 1 }, /* Y */ 376 }, 377 .flags = AV_PIX_FMT_FLAG_BITSTREAM, 378 }, 379 [AV_PIX_FMT_MONOBLACK] = { 380 .name = "monob", 381 .nb_components = 1, 382 .log2_chroma_w = 0, 383 .log2_chroma_h = 0, 384 .comp = { 385 { 0, 1, 0, 7, 1 }, /* Y */ 386 }, 387 .flags = AV_PIX_FMT_FLAG_BITSTREAM, 388 }, 389 [AV_PIX_FMT_PAL8] = { 390 .name = "pal8", 391 .nb_components = 1, 392 .log2_chroma_w = 0, 393 .log2_chroma_h = 0, 394 .comp = { 395 { 0, 1, 0, 0, 8 }, 396 }, 397 .flags = AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_ALPHA, 398 }, 399 [AV_PIX_FMT_YUVJ420P] = { 400 .name = "yuvj420p", 401 .nb_components = 3, 402 .log2_chroma_w = 1, 403 .log2_chroma_h = 1, 404 .comp = { 405 { 0, 1, 0, 0, 8 }, /* Y */ 406 { 1, 1, 0, 0, 8 }, /* U */ 407 { 2, 1, 0, 0, 8 }, /* V */ 408 }, 409 .flags = AV_PIX_FMT_FLAG_PLANAR, 410 }, 411 [AV_PIX_FMT_YUVJ422P] = { 412 .name = "yuvj422p", 413 .nb_components = 3, 414 .log2_chroma_w = 1, 415 .log2_chroma_h = 0, 416 .comp = { 417 { 0, 1, 0, 0, 8 }, /* Y */ 418 { 1, 1, 0, 0, 8 }, /* U */ 419 { 2, 1, 0, 0, 8 }, /* V */ 420 }, 421 .flags = AV_PIX_FMT_FLAG_PLANAR, 422 }, 423 [AV_PIX_FMT_YUVJ444P] = { 424 .name = "yuvj444p", 425 .nb_components = 3, 426 .log2_chroma_w = 0, 427 .log2_chroma_h = 0, 428 .comp = { 429 { 0, 1, 0, 0, 8 }, /* Y */ 430 { 1, 1, 0, 0, 8 }, /* U */ 431 { 2, 1, 0, 0, 8 }, /* V */ 432 }, 433 .flags = AV_PIX_FMT_FLAG_PLANAR, 434 }, 435#if FF_API_XVMC 436 [AV_PIX_FMT_XVMC] = { 437 .name = "xvmc", 438 .flags = AV_PIX_FMT_FLAG_HWACCEL, 439 }, 440#endif 441 [AV_PIX_FMT_UYVY422] = { 442 .name = "uyvy422", 443 .nb_components = 3, 444 .log2_chroma_w = 1, 445 .log2_chroma_h = 0, 446 .comp = { 447 { 0, 2, 1, 0, 8 }, /* Y */ 448 { 0, 4, 0, 0, 8 }, /* U */ 449 { 0, 4, 2, 0, 8 }, /* V */ 450 }, 451 }, 452 [AV_PIX_FMT_UYYVYY411] = { 453 .name = "uyyvyy411", 454 .nb_components = 3, 455 .log2_chroma_w = 2, 456 .log2_chroma_h = 0, 457 .comp = { 458 { 0, 4, 1, 0, 8 }, /* Y */ 459 { 0, 6, 0, 0, 8 }, /* U */ 460 { 0, 6, 3, 0, 8 }, /* V */ 461 }, 462 }, 463 [AV_PIX_FMT_BGR8] = { 464 .name = "bgr8", 465 .nb_components = 3, 466 .log2_chroma_w = 0, 467 .log2_chroma_h = 0, 468 .comp = { 469 { 0, 1, 0, 0, 3 }, /* R */ 470 { 0, 1, 0, 3, 3 }, /* G */ 471 { 0, 1, 0, 6, 2 }, /* B */ 472 }, 473 .flags = AV_PIX_FMT_FLAG_RGB, 474 }, 475 [AV_PIX_FMT_BGR4] = { 476 .name = "bgr4", 477 .nb_components = 3, 478 .log2_chroma_w = 0, 479 .log2_chroma_h = 0, 480 .comp = { 481 { 0, 4, 3, 0, 1 }, /* R */ 482 { 0, 4, 1, 0, 2 }, /* G */ 483 { 0, 4, 0, 0, 1 }, /* B */ 484 }, 485 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB, 486 }, 487 [AV_PIX_FMT_BGR4_BYTE] = { 488 .name = "bgr4_byte", 489 .nb_components = 3, 490 .log2_chroma_w = 0, 491 .log2_chroma_h = 0, 492 .comp = { 493 { 0, 1, 0, 0, 1 }, /* R */ 494 { 0, 1, 0, 1, 2 }, /* G */ 495 { 0, 1, 0, 3, 1 }, /* B */ 496 }, 497 .flags = AV_PIX_FMT_FLAG_RGB, 498 }, 499 [AV_PIX_FMT_RGB8] = { 500 .name = "rgb8", 501 .nb_components = 3, 502 .log2_chroma_w = 0, 503 .log2_chroma_h = 0, 504 .comp = { 505 { 0, 1, 0, 6, 2 }, /* R */ 506 { 0, 1, 0, 3, 3 }, /* G */ 507 { 0, 1, 0, 0, 3 }, /* B */ 508 }, 509 .flags = AV_PIX_FMT_FLAG_RGB, 510 }, 511 [AV_PIX_FMT_RGB4] = { 512 .name = "rgb4", 513 .nb_components = 3, 514 .log2_chroma_w = 0, 515 .log2_chroma_h = 0, 516 .comp = { 517 { 0, 4, 0, 0, 1 }, /* R */ 518 { 0, 4, 1, 0, 2 }, /* G */ 519 { 0, 4, 3, 0, 1 }, /* B */ 520 }, 521 .flags = AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_RGB, 522 }, 523 [AV_PIX_FMT_RGB4_BYTE] = { 524 .name = "rgb4_byte", 525 .nb_components = 3, 526 .log2_chroma_w = 0, 527 .log2_chroma_h = 0, 528 .comp = { 529 { 0, 1, 0, 3, 1 }, /* R */ 530 { 0, 1, 0, 1, 2 }, /* G */ 531 { 0, 1, 0, 0, 1 }, /* B */ 532 }, 533 .flags = AV_PIX_FMT_FLAG_RGB, 534 }, 535 [AV_PIX_FMT_NV12] = { 536 .name = "nv12", 537 .nb_components = 3, 538 .log2_chroma_w = 1, 539 .log2_chroma_h = 1, 540 .comp = { 541 { 0, 1, 0, 0, 8 }, /* Y */ 542 { 1, 2, 0, 0, 8 }, /* U */ 543 { 1, 2, 1, 0, 8 }, /* V */ 544 }, 545 .flags = AV_PIX_FMT_FLAG_PLANAR, 546 }, 547 [AV_PIX_FMT_NV21] = { 548 .name = "nv21", 549 .nb_components = 3, 550 .log2_chroma_w = 1, 551 .log2_chroma_h = 1, 552 .comp = { 553 { 0, 1, 0, 0, 8 }, /* Y */ 554 { 1, 2, 1, 0, 8 }, /* U */ 555 { 1, 2, 0, 0, 8 }, /* V */ 556 }, 557 .flags = AV_PIX_FMT_FLAG_PLANAR, 558 }, 559 [AV_PIX_FMT_ARGB] = { 560 .name = "argb", 561 .nb_components = 4, 562 .log2_chroma_w = 0, 563 .log2_chroma_h = 0, 564 .comp = { 565 { 0, 4, 1, 0, 8 }, /* R */ 566 { 0, 4, 2, 0, 8 }, /* G */ 567 { 0, 4, 3, 0, 8 }, /* B */ 568 { 0, 4, 0, 0, 8 }, /* A */ 569 }, 570 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 571 }, 572 [AV_PIX_FMT_RGBA] = { 573 .name = "rgba", 574 .nb_components = 4, 575 .log2_chroma_w = 0, 576 .log2_chroma_h = 0, 577 .comp = { 578 { 0, 4, 0, 0, 8 }, /* R */ 579 { 0, 4, 1, 0, 8 }, /* G */ 580 { 0, 4, 2, 0, 8 }, /* B */ 581 { 0, 4, 3, 0, 8 }, /* A */ 582 }, 583 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 584 }, 585 [AV_PIX_FMT_ABGR] = { 586 .name = "abgr", 587 .nb_components = 4, 588 .log2_chroma_w = 0, 589 .log2_chroma_h = 0, 590 .comp = { 591 { 0, 4, 3, 0, 8 }, /* R */ 592 { 0, 4, 2, 0, 8 }, /* G */ 593 { 0, 4, 1, 0, 8 }, /* B */ 594 { 0, 4, 0, 0, 8 }, /* A */ 595 }, 596 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 597 }, 598 [AV_PIX_FMT_BGRA] = { 599 .name = "bgra", 600 .nb_components = 4, 601 .log2_chroma_w = 0, 602 .log2_chroma_h = 0, 603 .comp = { 604 { 0, 4, 2, 0, 8 }, /* R */ 605 { 0, 4, 1, 0, 8 }, /* G */ 606 { 0, 4, 0, 0, 8 }, /* B */ 607 { 0, 4, 3, 0, 8 }, /* A */ 608 }, 609 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 610 }, 611 [AV_PIX_FMT_0RGB] = { 612 .name = "0rgb", 613 .nb_components= 3, 614 .log2_chroma_w= 0, 615 .log2_chroma_h= 0, 616 .comp = { 617 { 0, 4, 1, 0, 8 }, /* R */ 618 { 0, 4, 2, 0, 8 }, /* G */ 619 { 0, 4, 3, 0, 8 }, /* B */ 620 }, 621 .flags = AV_PIX_FMT_FLAG_RGB, 622 }, 623 [AV_PIX_FMT_RGB0] = { 624 .name = "rgb0", 625 .nb_components= 3, 626 .log2_chroma_w= 0, 627 .log2_chroma_h= 0, 628 .comp = { 629 { 0, 4, 0, 0, 8 }, /* R */ 630 { 0, 4, 1, 0, 8 }, /* G */ 631 { 0, 4, 2, 0, 8 }, /* B */ 632 }, 633 .flags = AV_PIX_FMT_FLAG_RGB, 634 }, 635 [AV_PIX_FMT_0BGR] = { 636 .name = "0bgr", 637 .nb_components= 3, 638 .log2_chroma_w= 0, 639 .log2_chroma_h= 0, 640 .comp = { 641 { 0, 4, 3, 0, 8 }, /* R */ 642 { 0, 4, 2, 0, 8 }, /* G */ 643 { 0, 4, 1, 0, 8 }, /* B */ 644 }, 645 .flags = AV_PIX_FMT_FLAG_RGB, 646 }, 647 [AV_PIX_FMT_BGR0] = { 648 .name = "bgr0", 649 .nb_components= 3, 650 .log2_chroma_w= 0, 651 .log2_chroma_h= 0, 652 .comp = { 653 { 0, 4, 2, 0, 8 }, /* R */ 654 { 0, 4, 1, 0, 8 }, /* G */ 655 { 0, 4, 0, 0, 8 }, /* B */ 656 }, 657 .flags = AV_PIX_FMT_FLAG_RGB, 658 }, 659 [AV_PIX_FMT_GRAY9BE] = { 660 .name = "gray9be", 661 .nb_components = 1, 662 .log2_chroma_w = 0, 663 .log2_chroma_h = 0, 664 .comp = { 665 { 0, 2, 0, 0, 9 }, /* Y */ 666 }, 667 .flags = AV_PIX_FMT_FLAG_BE, 668 .alias = "y9be", 669 }, 670 [AV_PIX_FMT_GRAY9LE] = { 671 .name = "gray9le", 672 .nb_components = 1, 673 .log2_chroma_w = 0, 674 .log2_chroma_h = 0, 675 .comp = { 676 { 0, 2, 0, 0, 9 }, /* Y */ 677 }, 678 .alias = "y9le", 679 }, 680 [AV_PIX_FMT_GRAY10BE] = { 681 .name = "gray10be", 682 .nb_components = 1, 683 .log2_chroma_w = 0, 684 .log2_chroma_h = 0, 685 .comp = { 686 { 0, 2, 0, 0, 10 }, /* Y */ 687 }, 688 .flags = AV_PIX_FMT_FLAG_BE, 689 .alias = "y10be", 690 }, 691 [AV_PIX_FMT_GRAY10LE] = { 692 .name = "gray10le", 693 .nb_components = 1, 694 .log2_chroma_w = 0, 695 .log2_chroma_h = 0, 696 .comp = { 697 { 0, 2, 0, 0, 10 }, /* Y */ 698 }, 699 .alias = "y10le", 700 }, 701 [AV_PIX_FMT_GRAY12BE] = { 702 .name = "gray12be", 703 .nb_components = 1, 704 .log2_chroma_w = 0, 705 .log2_chroma_h = 0, 706 .comp = { 707 { 0, 2, 0, 0, 12 }, /* Y */ 708 }, 709 .flags = AV_PIX_FMT_FLAG_BE, 710 .alias = "y12be", 711 }, 712 [AV_PIX_FMT_GRAY12LE] = { 713 .name = "gray12le", 714 .nb_components = 1, 715 .log2_chroma_w = 0, 716 .log2_chroma_h = 0, 717 .comp = { 718 { 0, 2, 0, 0, 12 }, /* Y */ 719 }, 720 .alias = "y12le", 721 }, 722 [AV_PIX_FMT_GRAY14BE] = { 723 .name = "gray14be", 724 .nb_components = 1, 725 .log2_chroma_w = 0, 726 .log2_chroma_h = 0, 727 .comp = { 728 { 0, 2, 0, 0, 14 }, /* Y */ 729 }, 730 .flags = AV_PIX_FMT_FLAG_BE, 731 .alias = "y14be", 732 }, 733 [AV_PIX_FMT_GRAY14LE] = { 734 .name = "gray14le", 735 .nb_components = 1, 736 .log2_chroma_w = 0, 737 .log2_chroma_h = 0, 738 .comp = { 739 { 0, 2, 0, 0, 14 }, /* Y */ 740 }, 741 .alias = "y14le", 742 }, 743 [AV_PIX_FMT_GRAY16BE] = { 744 .name = "gray16be", 745 .nb_components = 1, 746 .log2_chroma_w = 0, 747 .log2_chroma_h = 0, 748 .comp = { 749 { 0, 2, 0, 0, 16 }, /* Y */ 750 }, 751 .flags = AV_PIX_FMT_FLAG_BE, 752 .alias = "y16be", 753 }, 754 [AV_PIX_FMT_GRAY16LE] = { 755 .name = "gray16le", 756 .nb_components = 1, 757 .log2_chroma_w = 0, 758 .log2_chroma_h = 0, 759 .comp = { 760 { 0, 2, 0, 0, 16 }, /* Y */ 761 }, 762 .alias = "y16le", 763 }, 764 [AV_PIX_FMT_YUV440P] = { 765 .name = "yuv440p", 766 .nb_components = 3, 767 .log2_chroma_w = 0, 768 .log2_chroma_h = 1, 769 .comp = { 770 { 0, 1, 0, 0, 8 }, /* Y */ 771 { 1, 1, 0, 0, 8 }, /* U */ 772 { 2, 1, 0, 0, 8 }, /* V */ 773 }, 774 .flags = AV_PIX_FMT_FLAG_PLANAR, 775 }, 776 [AV_PIX_FMT_YUVJ440P] = { 777 .name = "yuvj440p", 778 .nb_components = 3, 779 .log2_chroma_w = 0, 780 .log2_chroma_h = 1, 781 .comp = { 782 { 0, 1, 0, 0, 8 }, /* Y */ 783 { 1, 1, 0, 0, 8 }, /* U */ 784 { 2, 1, 0, 0, 8 }, /* V */ 785 }, 786 .flags = AV_PIX_FMT_FLAG_PLANAR, 787 }, 788 [AV_PIX_FMT_YUV440P10LE] = { 789 .name = "yuv440p10le", 790 .nb_components = 3, 791 .log2_chroma_w = 0, 792 .log2_chroma_h = 1, 793 .comp = { 794 { 0, 2, 0, 0, 10 }, /* Y */ 795 { 1, 2, 0, 0, 10 }, /* U */ 796 { 2, 2, 0, 0, 10 }, /* V */ 797 }, 798 .flags = AV_PIX_FMT_FLAG_PLANAR, 799 }, 800 [AV_PIX_FMT_YUV440P10BE] = { 801 .name = "yuv440p10be", 802 .nb_components = 3, 803 .log2_chroma_w = 0, 804 .log2_chroma_h = 1, 805 .comp = { 806 { 0, 2, 0, 0, 10 }, /* Y */ 807 { 1, 2, 0, 0, 10 }, /* U */ 808 { 2, 2, 0, 0, 10 }, /* V */ 809 }, 810 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 811 }, 812 [AV_PIX_FMT_YUV440P12LE] = { 813 .name = "yuv440p12le", 814 .nb_components = 3, 815 .log2_chroma_w = 0, 816 .log2_chroma_h = 1, 817 .comp = { 818 { 0, 2, 0, 0, 12 }, /* Y */ 819 { 1, 2, 0, 0, 12 }, /* U */ 820 { 2, 2, 0, 0, 12 }, /* V */ 821 }, 822 .flags = AV_PIX_FMT_FLAG_PLANAR, 823 }, 824 [AV_PIX_FMT_YUV440P12BE] = { 825 .name = "yuv440p12be", 826 .nb_components = 3, 827 .log2_chroma_w = 0, 828 .log2_chroma_h = 1, 829 .comp = { 830 { 0, 2, 0, 0, 12 }, /* Y */ 831 { 1, 2, 0, 0, 12 }, /* U */ 832 { 2, 2, 0, 0, 12 }, /* V */ 833 }, 834 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 835 }, 836 [AV_PIX_FMT_YUVA420P] = { 837 .name = "yuva420p", 838 .nb_components = 4, 839 .log2_chroma_w = 1, 840 .log2_chroma_h = 1, 841 .comp = { 842 { 0, 1, 0, 0, 8 }, /* Y */ 843 { 1, 1, 0, 0, 8 }, /* U */ 844 { 2, 1, 0, 0, 8 }, /* V */ 845 { 3, 1, 0, 0, 8 }, /* A */ 846 }, 847 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 848 }, 849 [AV_PIX_FMT_YUVA422P] = { 850 .name = "yuva422p", 851 .nb_components = 4, 852 .log2_chroma_w = 1, 853 .log2_chroma_h = 0, 854 .comp = { 855 { 0, 1, 0, 0, 8 }, /* Y */ 856 { 1, 1, 0, 0, 8 }, /* U */ 857 { 2, 1, 0, 0, 8 }, /* V */ 858 { 3, 1, 0, 0, 8 }, /* A */ 859 }, 860 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 861 }, 862 [AV_PIX_FMT_YUVA444P] = { 863 .name = "yuva444p", 864 .nb_components = 4, 865 .log2_chroma_w = 0, 866 .log2_chroma_h = 0, 867 .comp = { 868 { 0, 1, 0, 0, 8 }, /* Y */ 869 { 1, 1, 0, 0, 8 }, /* U */ 870 { 2, 1, 0, 0, 8 }, /* V */ 871 { 3, 1, 0, 0, 8 }, /* A */ 872 }, 873 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 874 }, 875 [AV_PIX_FMT_YUVA420P9BE] = { 876 .name = "yuva420p9be", 877 .nb_components = 4, 878 .log2_chroma_w = 1, 879 .log2_chroma_h = 1, 880 .comp = { 881 { 0, 2, 0, 0, 9 }, /* Y */ 882 { 1, 2, 0, 0, 9 }, /* U */ 883 { 2, 2, 0, 0, 9 }, /* V */ 884 { 3, 2, 0, 0, 9 }, /* A */ 885 }, 886 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 887 }, 888 [AV_PIX_FMT_YUVA420P9LE] = { 889 .name = "yuva420p9le", 890 .nb_components = 4, 891 .log2_chroma_w = 1, 892 .log2_chroma_h = 1, 893 .comp = { 894 { 0, 2, 0, 0, 9 }, /* Y */ 895 { 1, 2, 0, 0, 9 }, /* U */ 896 { 2, 2, 0, 0, 9 }, /* V */ 897 { 3, 2, 0, 0, 9 }, /* A */ 898 }, 899 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 900 }, 901 [AV_PIX_FMT_YUVA422P9BE] = { 902 .name = "yuva422p9be", 903 .nb_components = 4, 904 .log2_chroma_w = 1, 905 .log2_chroma_h = 0, 906 .comp = { 907 { 0, 2, 0, 0, 9 }, /* Y */ 908 { 1, 2, 0, 0, 9 }, /* U */ 909 { 2, 2, 0, 0, 9 }, /* V */ 910 { 3, 2, 0, 0, 9 }, /* A */ 911 }, 912 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 913 }, 914 [AV_PIX_FMT_YUVA422P9LE] = { 915 .name = "yuva422p9le", 916 .nb_components = 4, 917 .log2_chroma_w = 1, 918 .log2_chroma_h = 0, 919 .comp = { 920 { 0, 2, 0, 0, 9 }, /* Y */ 921 { 1, 2, 0, 0, 9 }, /* U */ 922 { 2, 2, 0, 0, 9 }, /* V */ 923 { 3, 2, 0, 0, 9 }, /* A */ 924 }, 925 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 926 }, 927 [AV_PIX_FMT_YUVA444P9BE] = { 928 .name = "yuva444p9be", 929 .nb_components = 4, 930 .log2_chroma_w = 0, 931 .log2_chroma_h = 0, 932 .comp = { 933 { 0, 2, 0, 0, 9 }, /* Y */ 934 { 1, 2, 0, 0, 9 }, /* U */ 935 { 2, 2, 0, 0, 9 }, /* V */ 936 { 3, 2, 0, 0, 9 }, /* A */ 937 }, 938 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 939 }, 940 [AV_PIX_FMT_YUVA444P9LE] = { 941 .name = "yuva444p9le", 942 .nb_components = 4, 943 .log2_chroma_w = 0, 944 .log2_chroma_h = 0, 945 .comp = { 946 { 0, 2, 0, 0, 9 }, /* Y */ 947 { 1, 2, 0, 0, 9 }, /* U */ 948 { 2, 2, 0, 0, 9 }, /* V */ 949 { 3, 2, 0, 0, 9 }, /* A */ 950 }, 951 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 952 }, 953 [AV_PIX_FMT_YUVA420P10BE] = { 954 .name = "yuva420p10be", 955 .nb_components = 4, 956 .log2_chroma_w = 1, 957 .log2_chroma_h = 1, 958 .comp = { 959 { 0, 2, 0, 0, 10 }, /* Y */ 960 { 1, 2, 0, 0, 10 }, /* U */ 961 { 2, 2, 0, 0, 10 }, /* V */ 962 { 3, 2, 0, 0, 10 }, /* A */ 963 }, 964 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 965 }, 966 [AV_PIX_FMT_YUVA420P10LE] = { 967 .name = "yuva420p10le", 968 .nb_components = 4, 969 .log2_chroma_w = 1, 970 .log2_chroma_h = 1, 971 .comp = { 972 { 0, 2, 0, 0, 10 }, /* Y */ 973 { 1, 2, 0, 0, 10 }, /* U */ 974 { 2, 2, 0, 0, 10 }, /* V */ 975 { 3, 2, 0, 0, 10 }, /* A */ 976 }, 977 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 978 }, 979 [AV_PIX_FMT_YUVA422P10BE] = { 980 .name = "yuva422p10be", 981 .nb_components = 4, 982 .log2_chroma_w = 1, 983 .log2_chroma_h = 0, 984 .comp = { 985 { 0, 2, 0, 0, 10 }, /* Y */ 986 { 1, 2, 0, 0, 10 }, /* U */ 987 { 2, 2, 0, 0, 10 }, /* V */ 988 { 3, 2, 0, 0, 10 }, /* A */ 989 }, 990 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 991 }, 992 [AV_PIX_FMT_YUVA422P10LE] = { 993 .name = "yuva422p10le", 994 .nb_components = 4, 995 .log2_chroma_w = 1, 996 .log2_chroma_h = 0, 997 .comp = { 998 { 0, 2, 0, 0, 10 }, /* Y */ 999 { 1, 2, 0, 0, 10 }, /* U */ 1000 { 2, 2, 0, 0, 10 }, /* V */ 1001 { 3, 2, 0, 0, 10 }, /* A */ 1002 }, 1003 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1004 }, 1005 [AV_PIX_FMT_YUVA444P10BE] = { 1006 .name = "yuva444p10be", 1007 .nb_components = 4, 1008 .log2_chroma_w = 0, 1009 .log2_chroma_h = 0, 1010 .comp = { 1011 { 0, 2, 0, 0, 10 }, /* Y */ 1012 { 1, 2, 0, 0, 10 }, /* U */ 1013 { 2, 2, 0, 0, 10 }, /* V */ 1014 { 3, 2, 0, 0, 10 }, /* A */ 1015 }, 1016 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1017 }, 1018 [AV_PIX_FMT_YUVA444P10LE] = { 1019 .name = "yuva444p10le", 1020 .nb_components = 4, 1021 .log2_chroma_w = 0, 1022 .log2_chroma_h = 0, 1023 .comp = { 1024 { 0, 2, 0, 0, 10 }, /* Y */ 1025 { 1, 2, 0, 0, 10 }, /* U */ 1026 { 2, 2, 0, 0, 10 }, /* V */ 1027 { 3, 2, 0, 0, 10 }, /* A */ 1028 }, 1029 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1030 }, 1031 [AV_PIX_FMT_YUVA420P16BE] = { 1032 .name = "yuva420p16be", 1033 .nb_components = 4, 1034 .log2_chroma_w = 1, 1035 .log2_chroma_h = 1, 1036 .comp = { 1037 { 0, 2, 0, 0, 16 }, /* Y */ 1038 { 1, 2, 0, 0, 16 }, /* U */ 1039 { 2, 2, 0, 0, 16 }, /* V */ 1040 { 3, 2, 0, 0, 16 }, /* A */ 1041 }, 1042 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1043 }, 1044 [AV_PIX_FMT_YUVA420P16LE] = { 1045 .name = "yuva420p16le", 1046 .nb_components = 4, 1047 .log2_chroma_w = 1, 1048 .log2_chroma_h = 1, 1049 .comp = { 1050 { 0, 2, 0, 0, 16 }, /* Y */ 1051 { 1, 2, 0, 0, 16 }, /* U */ 1052 { 2, 2, 0, 0, 16 }, /* V */ 1053 { 3, 2, 0, 0, 16 }, /* A */ 1054 }, 1055 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1056 }, 1057 [AV_PIX_FMT_YUVA422P16BE] = { 1058 .name = "yuva422p16be", 1059 .nb_components = 4, 1060 .log2_chroma_w = 1, 1061 .log2_chroma_h = 0, 1062 .comp = { 1063 { 0, 2, 0, 0, 16 }, /* Y */ 1064 { 1, 2, 0, 0, 16 }, /* U */ 1065 { 2, 2, 0, 0, 16 }, /* V */ 1066 { 3, 2, 0, 0, 16 }, /* A */ 1067 }, 1068 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1069 }, 1070 [AV_PIX_FMT_YUVA422P16LE] = { 1071 .name = "yuva422p16le", 1072 .nb_components = 4, 1073 .log2_chroma_w = 1, 1074 .log2_chroma_h = 0, 1075 .comp = { 1076 { 0, 2, 0, 0, 16 }, /* Y */ 1077 { 1, 2, 0, 0, 16 }, /* U */ 1078 { 2, 2, 0, 0, 16 }, /* V */ 1079 { 3, 2, 0, 0, 16 }, /* A */ 1080 }, 1081 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1082 }, 1083 [AV_PIX_FMT_YUVA444P16BE] = { 1084 .name = "yuva444p16be", 1085 .nb_components = 4, 1086 .log2_chroma_w = 0, 1087 .log2_chroma_h = 0, 1088 .comp = { 1089 { 0, 2, 0, 0, 16 }, /* Y */ 1090 { 1, 2, 0, 0, 16 }, /* U */ 1091 { 2, 2, 0, 0, 16 }, /* V */ 1092 { 3, 2, 0, 0, 16 }, /* A */ 1093 }, 1094 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1095 }, 1096 [AV_PIX_FMT_YUVA444P16LE] = { 1097 .name = "yuva444p16le", 1098 .nb_components = 4, 1099 .log2_chroma_w = 0, 1100 .log2_chroma_h = 0, 1101 .comp = { 1102 { 0, 2, 0, 0, 16 }, /* Y */ 1103 { 1, 2, 0, 0, 16 }, /* U */ 1104 { 2, 2, 0, 0, 16 }, /* V */ 1105 { 3, 2, 0, 0, 16 }, /* A */ 1106 }, 1107 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 1108 }, 1109 [AV_PIX_FMT_RGB48BE] = { 1110 .name = "rgb48be", 1111 .nb_components = 3, 1112 .log2_chroma_w = 0, 1113 .log2_chroma_h = 0, 1114 .comp = { 1115 { 0, 6, 0, 0, 16 }, /* R */ 1116 { 0, 6, 2, 0, 16 }, /* G */ 1117 { 0, 6, 4, 0, 16 }, /* B */ 1118 }, 1119 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BE, 1120 }, 1121 [AV_PIX_FMT_RGB48LE] = { 1122 .name = "rgb48le", 1123 .nb_components = 3, 1124 .log2_chroma_w = 0, 1125 .log2_chroma_h = 0, 1126 .comp = { 1127 { 0, 6, 0, 0, 16 }, /* R */ 1128 { 0, 6, 2, 0, 16 }, /* G */ 1129 { 0, 6, 4, 0, 16 }, /* B */ 1130 }, 1131 .flags = AV_PIX_FMT_FLAG_RGB, 1132 }, 1133 [AV_PIX_FMT_RGBA64BE] = { 1134 .name = "rgba64be", 1135 .nb_components = 4, 1136 .log2_chroma_w = 0, 1137 .log2_chroma_h = 0, 1138 .comp = { 1139 { 0, 8, 0, 0, 16 }, /* R */ 1140 { 0, 8, 2, 0, 16 }, /* G */ 1141 { 0, 8, 4, 0, 16 }, /* B */ 1142 { 0, 8, 6, 0, 16 }, /* A */ 1143 }, 1144 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 1145 }, 1146 [AV_PIX_FMT_RGBA64LE] = { 1147 .name = "rgba64le", 1148 .nb_components = 4, 1149 .log2_chroma_w = 0, 1150 .log2_chroma_h = 0, 1151 .comp = { 1152 { 0, 8, 0, 0, 16 }, /* R */ 1153 { 0, 8, 2, 0, 16 }, /* G */ 1154 { 0, 8, 4, 0, 16 }, /* B */ 1155 { 0, 8, 6, 0, 16 }, /* A */ 1156 }, 1157 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 1158 }, 1159 [AV_PIX_FMT_RGB565BE] = { 1160 .name = "rgb565be", 1161 .nb_components = 3, 1162 .log2_chroma_w = 0, 1163 .log2_chroma_h = 0, 1164 .comp = { 1165 { 0, 2, -1, 3, 5 }, /* R */ 1166 { 0, 2, 0, 5, 6 }, /* G */ 1167 { 0, 2, 0, 0, 5 }, /* B */ 1168 }, 1169 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1170 }, 1171 [AV_PIX_FMT_RGB565LE] = { 1172 .name = "rgb565le", 1173 .nb_components = 3, 1174 .log2_chroma_w = 0, 1175 .log2_chroma_h = 0, 1176 .comp = { 1177 { 0, 2, 1, 3, 5 }, /* R */ 1178 { 0, 2, 0, 5, 6 }, /* G */ 1179 { 0, 2, 0, 0, 5 }, /* B */ 1180 }, 1181 .flags = AV_PIX_FMT_FLAG_RGB, 1182 }, 1183 [AV_PIX_FMT_RGB555BE] = { 1184 .name = "rgb555be", 1185 .nb_components = 3, 1186 .log2_chroma_w = 0, 1187 .log2_chroma_h = 0, 1188 .comp = { 1189 { 0, 2, -1, 2, 5 }, /* R */ 1190 { 0, 2, 0, 5, 5 }, /* G */ 1191 { 0, 2, 0, 0, 5 }, /* B */ 1192 }, 1193 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1194 }, 1195 [AV_PIX_FMT_RGB555LE] = { 1196 .name = "rgb555le", 1197 .nb_components = 3, 1198 .log2_chroma_w = 0, 1199 .log2_chroma_h = 0, 1200 .comp = { 1201 { 0, 2, 1, 2, 5 }, /* R */ 1202 { 0, 2, 0, 5, 5 }, /* G */ 1203 { 0, 2, 0, 0, 5 }, /* B */ 1204 }, 1205 .flags = AV_PIX_FMT_FLAG_RGB, 1206 }, 1207 [AV_PIX_FMT_RGB444BE] = { 1208 .name = "rgb444be", 1209 .nb_components = 3, 1210 .log2_chroma_w = 0, 1211 .log2_chroma_h = 0, 1212 .comp = { 1213 { 0, 2, -1, 0, 4 }, /* R */ 1214 { 0, 2, 0, 4, 4 }, /* G */ 1215 { 0, 2, 0, 0, 4 }, /* B */ 1216 }, 1217 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1218 }, 1219 [AV_PIX_FMT_RGB444LE] = { 1220 .name = "rgb444le", 1221 .nb_components = 3, 1222 .log2_chroma_w = 0, 1223 .log2_chroma_h = 0, 1224 .comp = { 1225 { 0, 2, 1, 0, 4 }, /* R */ 1226 { 0, 2, 0, 4, 4 }, /* G */ 1227 { 0, 2, 0, 0, 4 }, /* B */ 1228 }, 1229 .flags = AV_PIX_FMT_FLAG_RGB, 1230 }, 1231 [AV_PIX_FMT_BGR48BE] = { 1232 .name = "bgr48be", 1233 .nb_components = 3, 1234 .log2_chroma_w = 0, 1235 .log2_chroma_h = 0, 1236 .comp = { 1237 { 0, 6, 4, 0, 16 }, /* R */ 1238 { 0, 6, 2, 0, 16 }, /* G */ 1239 { 0, 6, 0, 0, 16 }, /* B */ 1240 }, 1241 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1242 }, 1243 [AV_PIX_FMT_BGR48LE] = { 1244 .name = "bgr48le", 1245 .nb_components = 3, 1246 .log2_chroma_w = 0, 1247 .log2_chroma_h = 0, 1248 .comp = { 1249 { 0, 6, 4, 0, 16 }, /* R */ 1250 { 0, 6, 2, 0, 16 }, /* G */ 1251 { 0, 6, 0, 0, 16 }, /* B */ 1252 }, 1253 .flags = AV_PIX_FMT_FLAG_RGB, 1254 }, 1255 [AV_PIX_FMT_BGRA64BE] = { 1256 .name = "bgra64be", 1257 .nb_components = 4, 1258 .log2_chroma_w = 0, 1259 .log2_chroma_h = 0, 1260 .comp = { 1261 { 0, 8, 4, 0, 16 }, /* R */ 1262 { 0, 8, 2, 0, 16 }, /* G */ 1263 { 0, 8, 0, 0, 16 }, /* B */ 1264 { 0, 8, 6, 0, 16 }, /* A */ 1265 }, 1266 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 1267 }, 1268 [AV_PIX_FMT_BGRA64LE] = { 1269 .name = "bgra64le", 1270 .nb_components = 4, 1271 .log2_chroma_w = 0, 1272 .log2_chroma_h = 0, 1273 .comp = { 1274 { 0, 8, 4, 0, 16 }, /* R */ 1275 { 0, 8, 2, 0, 16 }, /* G */ 1276 { 0, 8, 0, 0, 16 }, /* B */ 1277 { 0, 8, 6, 0, 16 }, /* A */ 1278 }, 1279 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 1280 }, 1281 [AV_PIX_FMT_BGR565BE] = { 1282 .name = "bgr565be", 1283 .nb_components = 3, 1284 .log2_chroma_w = 0, 1285 .log2_chroma_h = 0, 1286 .comp = { 1287 { 0, 2, 0, 0, 5 }, /* R */ 1288 { 0, 2, 0, 5, 6 }, /* G */ 1289 { 0, 2, -1, 3, 5 }, /* B */ 1290 }, 1291 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1292 }, 1293 [AV_PIX_FMT_BGR565LE] = { 1294 .name = "bgr565le", 1295 .nb_components = 3, 1296 .log2_chroma_w = 0, 1297 .log2_chroma_h = 0, 1298 .comp = { 1299 { 0, 2, 0, 0, 5 }, /* R */ 1300 { 0, 2, 0, 5, 6 }, /* G */ 1301 { 0, 2, 1, 3, 5 }, /* B */ 1302 }, 1303 .flags = AV_PIX_FMT_FLAG_RGB, 1304 }, 1305 [AV_PIX_FMT_BGR555BE] = { 1306 .name = "bgr555be", 1307 .nb_components = 3, 1308 .log2_chroma_w = 0, 1309 .log2_chroma_h = 0, 1310 .comp = { 1311 { 0, 2, 0, 0, 5 }, /* R */ 1312 { 0, 2, 0, 5, 5 }, /* G */ 1313 { 0, 2, -1, 2, 5 }, /* B */ 1314 }, 1315 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1316 }, 1317 [AV_PIX_FMT_BGR555LE] = { 1318 .name = "bgr555le", 1319 .nb_components = 3, 1320 .log2_chroma_w = 0, 1321 .log2_chroma_h = 0, 1322 .comp = { 1323 { 0, 2, 0, 0, 5 }, /* R */ 1324 { 0, 2, 0, 5, 5 }, /* G */ 1325 { 0, 2, 1, 2, 5 }, /* B */ 1326 }, 1327 .flags = AV_PIX_FMT_FLAG_RGB, 1328 }, 1329 [AV_PIX_FMT_BGR444BE] = { 1330 .name = "bgr444be", 1331 .nb_components = 3, 1332 .log2_chroma_w = 0, 1333 .log2_chroma_h = 0, 1334 .comp = { 1335 { 0, 2, 0, 0, 4 }, /* R */ 1336 { 0, 2, 0, 4, 4 }, /* G */ 1337 { 0, 2, -1, 0, 4 }, /* B */ 1338 }, 1339 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, 1340 }, 1341 [AV_PIX_FMT_BGR444LE] = { 1342 .name = "bgr444le", 1343 .nb_components = 3, 1344 .log2_chroma_w = 0, 1345 .log2_chroma_h = 0, 1346 .comp = { 1347 { 0, 2, 0, 0, 4 }, /* R */ 1348 { 0, 2, 0, 4, 4 }, /* G */ 1349 { 0, 2, 1, 0, 4 }, /* B */ 1350 }, 1351 .flags = AV_PIX_FMT_FLAG_RGB, 1352 }, 1353 [AV_PIX_FMT_VAAPI] = { 1354 .name = "vaapi", 1355 .log2_chroma_w = 1, 1356 .log2_chroma_h = 1, 1357 .flags = AV_PIX_FMT_FLAG_HWACCEL, 1358 }, 1359 [AV_PIX_FMT_YUV420P9LE] = { 1360 .name = "yuv420p9le", 1361 .nb_components = 3, 1362 .log2_chroma_w = 1, 1363 .log2_chroma_h = 1, 1364 .comp = { 1365 { 0, 2, 0, 0, 9 }, /* Y */ 1366 { 1, 2, 0, 0, 9 }, /* U */ 1367 { 2, 2, 0, 0, 9 }, /* V */ 1368 }, 1369 .flags = AV_PIX_FMT_FLAG_PLANAR, 1370 }, 1371 [AV_PIX_FMT_YUV420P9BE] = { 1372 .name = "yuv420p9be", 1373 .nb_components = 3, 1374 .log2_chroma_w = 1, 1375 .log2_chroma_h = 1, 1376 .comp = { 1377 { 0, 2, 0, 0, 9 }, /* Y */ 1378 { 1, 2, 0, 0, 9 }, /* U */ 1379 { 2, 2, 0, 0, 9 }, /* V */ 1380 }, 1381 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1382 }, 1383 [AV_PIX_FMT_YUV420P10LE] = { 1384 .name = "yuv420p10le", 1385 .nb_components = 3, 1386 .log2_chroma_w = 1, 1387 .log2_chroma_h = 1, 1388 .comp = { 1389 { 0, 2, 0, 0, 10 }, /* Y */ 1390 { 1, 2, 0, 0, 10 }, /* U */ 1391 { 2, 2, 0, 0, 10 }, /* V */ 1392 }, 1393 .flags = AV_PIX_FMT_FLAG_PLANAR, 1394 }, 1395 [AV_PIX_FMT_YUV420P10BE] = { 1396 .name = "yuv420p10be", 1397 .nb_components = 3, 1398 .log2_chroma_w = 1, 1399 .log2_chroma_h = 1, 1400 .comp = { 1401 { 0, 2, 0, 0, 10 }, /* Y */ 1402 { 1, 2, 0, 0, 10 }, /* U */ 1403 { 2, 2, 0, 0, 10 }, /* V */ 1404 }, 1405 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1406 }, 1407 [AV_PIX_FMT_YUV420P12LE] = { 1408 .name = "yuv420p12le", 1409 .nb_components = 3, 1410 .log2_chroma_w = 1, 1411 .log2_chroma_h = 1, 1412 .comp = { 1413 { 0, 2, 0, 0, 12 }, /* Y */ 1414 { 1, 2, 0, 0, 12 }, /* U */ 1415 { 2, 2, 0, 0, 12 }, /* V */ 1416 }, 1417 .flags = AV_PIX_FMT_FLAG_PLANAR, 1418 }, 1419 [AV_PIX_FMT_YUV420P12BE] = { 1420 .name = "yuv420p12be", 1421 .nb_components = 3, 1422 .log2_chroma_w = 1, 1423 .log2_chroma_h = 1, 1424 .comp = { 1425 { 0, 2, 0, 0, 12 }, /* Y */ 1426 { 1, 2, 0, 0, 12 }, /* U */ 1427 { 2, 2, 0, 0, 12 }, /* V */ 1428 }, 1429 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1430 }, 1431 [AV_PIX_FMT_YUV420P14LE] = { 1432 .name = "yuv420p14le", 1433 .nb_components = 3, 1434 .log2_chroma_w = 1, 1435 .log2_chroma_h = 1, 1436 .comp = { 1437 { 0, 2, 0, 0, 14 }, /* Y */ 1438 { 1, 2, 0, 0, 14 }, /* U */ 1439 { 2, 2, 0, 0, 14 }, /* V */ 1440 }, 1441 .flags = AV_PIX_FMT_FLAG_PLANAR, 1442 }, 1443 [AV_PIX_FMT_YUV420P14BE] = { 1444 .name = "yuv420p14be", 1445 .nb_components = 3, 1446 .log2_chroma_w = 1, 1447 .log2_chroma_h = 1, 1448 .comp = { 1449 { 0, 2, 0, 0, 14 }, /* Y */ 1450 { 1, 2, 0, 0, 14 }, /* U */ 1451 { 2, 2, 0, 0, 14 }, /* V */ 1452 }, 1453 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1454 }, 1455 [AV_PIX_FMT_YUV420P16LE] = { 1456 .name = "yuv420p16le", 1457 .nb_components = 3, 1458 .log2_chroma_w = 1, 1459 .log2_chroma_h = 1, 1460 .comp = { 1461 { 0, 2, 0, 0, 16 }, /* Y */ 1462 { 1, 2, 0, 0, 16 }, /* U */ 1463 { 2, 2, 0, 0, 16 }, /* V */ 1464 }, 1465 .flags = AV_PIX_FMT_FLAG_PLANAR, 1466 }, 1467 [AV_PIX_FMT_YUV420P16BE] = { 1468 .name = "yuv420p16be", 1469 .nb_components = 3, 1470 .log2_chroma_w = 1, 1471 .log2_chroma_h = 1, 1472 .comp = { 1473 { 0, 2, 0, 0, 16 }, /* Y */ 1474 { 1, 2, 0, 0, 16 }, /* U */ 1475 { 2, 2, 0, 0, 16 }, /* V */ 1476 }, 1477 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1478 }, 1479 [AV_PIX_FMT_YUV422P9LE] = { 1480 .name = "yuv422p9le", 1481 .nb_components = 3, 1482 .log2_chroma_w = 1, 1483 .log2_chroma_h = 0, 1484 .comp = { 1485 { 0, 2, 0, 0, 9 }, /* Y */ 1486 { 1, 2, 0, 0, 9 }, /* U */ 1487 { 2, 2, 0, 0, 9 }, /* V */ 1488 }, 1489 .flags = AV_PIX_FMT_FLAG_PLANAR, 1490 }, 1491 [AV_PIX_FMT_YUV422P9BE] = { 1492 .name = "yuv422p9be", 1493 .nb_components = 3, 1494 .log2_chroma_w = 1, 1495 .log2_chroma_h = 0, 1496 .comp = { 1497 { 0, 2, 0, 0, 9 }, /* Y */ 1498 { 1, 2, 0, 0, 9 }, /* U */ 1499 { 2, 2, 0, 0, 9 }, /* V */ 1500 }, 1501 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1502 }, 1503 [AV_PIX_FMT_YUV422P10LE] = { 1504 .name = "yuv422p10le", 1505 .nb_components = 3, 1506 .log2_chroma_w = 1, 1507 .log2_chroma_h = 0, 1508 .comp = { 1509 { 0, 2, 0, 0, 10 }, /* Y */ 1510 { 1, 2, 0, 0, 10 }, /* U */ 1511 { 2, 2, 0, 0, 10 }, /* V */ 1512 }, 1513 .flags = AV_PIX_FMT_FLAG_PLANAR, 1514 }, 1515 [AV_PIX_FMT_YUV422P10BE] = { 1516 .name = "yuv422p10be", 1517 .nb_components = 3, 1518 .log2_chroma_w = 1, 1519 .log2_chroma_h = 0, 1520 .comp = { 1521 { 0, 2, 0, 0, 10 }, /* Y */ 1522 { 1, 2, 0, 0, 10 }, /* U */ 1523 { 2, 2, 0, 0, 10 }, /* V */ 1524 }, 1525 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1526 }, 1527 [AV_PIX_FMT_YUV422P12LE] = { 1528 .name = "yuv422p12le", 1529 .nb_components = 3, 1530 .log2_chroma_w = 1, 1531 .log2_chroma_h = 0, 1532 .comp = { 1533 { 0, 2, 0, 0, 12 }, /* Y */ 1534 { 1, 2, 0, 0, 12 }, /* U */ 1535 { 2, 2, 0, 0, 12 }, /* V */ 1536 }, 1537 .flags = AV_PIX_FMT_FLAG_PLANAR, 1538 }, 1539 [AV_PIX_FMT_YUV422P12BE] = { 1540 .name = "yuv422p12be", 1541 .nb_components = 3, 1542 .log2_chroma_w = 1, 1543 .log2_chroma_h = 0, 1544 .comp = { 1545 { 0, 2, 0, 0, 12 }, /* Y */ 1546 { 1, 2, 0, 0, 12 }, /* U */ 1547 { 2, 2, 0, 0, 12 }, /* V */ 1548 }, 1549 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1550 }, 1551 [AV_PIX_FMT_YUV422P14LE] = { 1552 .name = "yuv422p14le", 1553 .nb_components = 3, 1554 .log2_chroma_w = 1, 1555 .log2_chroma_h = 0, 1556 .comp = { 1557 { 0, 2, 0, 0, 14 }, /* Y */ 1558 { 1, 2, 0, 0, 14 }, /* U */ 1559 { 2, 2, 0, 0, 14 }, /* V */ 1560 }, 1561 .flags = AV_PIX_FMT_FLAG_PLANAR, 1562 }, 1563 [AV_PIX_FMT_YUV422P14BE] = { 1564 .name = "yuv422p14be", 1565 .nb_components = 3, 1566 .log2_chroma_w = 1, 1567 .log2_chroma_h = 0, 1568 .comp = { 1569 { 0, 2, 0, 0, 14 }, /* Y */ 1570 { 1, 2, 0, 0, 14 }, /* U */ 1571 { 2, 2, 0, 0, 14 }, /* V */ 1572 }, 1573 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1574 }, 1575 [AV_PIX_FMT_YUV422P16LE] = { 1576 .name = "yuv422p16le", 1577 .nb_components = 3, 1578 .log2_chroma_w = 1, 1579 .log2_chroma_h = 0, 1580 .comp = { 1581 { 0, 2, 0, 0, 16 }, /* Y */ 1582 { 1, 2, 0, 0, 16 }, /* U */ 1583 { 2, 2, 0, 0, 16 }, /* V */ 1584 }, 1585 .flags = AV_PIX_FMT_FLAG_PLANAR, 1586 }, 1587 [AV_PIX_FMT_YUV422P16BE] = { 1588 .name = "yuv422p16be", 1589 .nb_components = 3, 1590 .log2_chroma_w = 1, 1591 .log2_chroma_h = 0, 1592 .comp = { 1593 { 0, 2, 0, 0, 16 }, /* Y */ 1594 { 1, 2, 0, 0, 16 }, /* U */ 1595 { 2, 2, 0, 0, 16 }, /* V */ 1596 }, 1597 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1598 }, 1599 [AV_PIX_FMT_YUV444P16LE] = { 1600 .name = "yuv444p16le", 1601 .nb_components = 3, 1602 .log2_chroma_w = 0, 1603 .log2_chroma_h = 0, 1604 .comp = { 1605 { 0, 2, 0, 0, 16 }, /* Y */ 1606 { 1, 2, 0, 0, 16 }, /* U */ 1607 { 2, 2, 0, 0, 16 }, /* V */ 1608 }, 1609 .flags = AV_PIX_FMT_FLAG_PLANAR, 1610 }, 1611 [AV_PIX_FMT_YUV444P16BE] = { 1612 .name = "yuv444p16be", 1613 .nb_components = 3, 1614 .log2_chroma_w = 0, 1615 .log2_chroma_h = 0, 1616 .comp = { 1617 { 0, 2, 0, 0, 16 }, /* Y */ 1618 { 1, 2, 0, 0, 16 }, /* U */ 1619 { 2, 2, 0, 0, 16 }, /* V */ 1620 }, 1621 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1622 }, 1623 [AV_PIX_FMT_YUV444P10LE] = { 1624 .name = "yuv444p10le", 1625 .nb_components = 3, 1626 .log2_chroma_w = 0, 1627 .log2_chroma_h = 0, 1628 .comp = { 1629 { 0, 2, 0, 0, 10 }, /* Y */ 1630 { 1, 2, 0, 0, 10 }, /* U */ 1631 { 2, 2, 0, 0, 10 }, /* V */ 1632 }, 1633 .flags = AV_PIX_FMT_FLAG_PLANAR, 1634 }, 1635 [AV_PIX_FMT_YUV444P10BE] = { 1636 .name = "yuv444p10be", 1637 .nb_components = 3, 1638 .log2_chroma_w = 0, 1639 .log2_chroma_h = 0, 1640 .comp = { 1641 { 0, 2, 0, 0, 10 }, /* Y */ 1642 { 1, 2, 0, 0, 10 }, /* U */ 1643 { 2, 2, 0, 0, 10 }, /* V */ 1644 }, 1645 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1646 }, 1647 [AV_PIX_FMT_YUV444P9LE] = { 1648 .name = "yuv444p9le", 1649 .nb_components = 3, 1650 .log2_chroma_w = 0, 1651 .log2_chroma_h = 0, 1652 .comp = { 1653 { 0, 2, 0, 0, 9 }, /* Y */ 1654 { 1, 2, 0, 0, 9 }, /* U */ 1655 { 2, 2, 0, 0, 9 }, /* V */ 1656 }, 1657 .flags = AV_PIX_FMT_FLAG_PLANAR, 1658 }, 1659 [AV_PIX_FMT_YUV444P9BE] = { 1660 .name = "yuv444p9be", 1661 .nb_components = 3, 1662 .log2_chroma_w = 0, 1663 .log2_chroma_h = 0, 1664 .comp = { 1665 { 0, 2, 0, 0, 9 }, /* Y */ 1666 { 1, 2, 0, 0, 9 }, /* U */ 1667 { 2, 2, 0, 0, 9 }, /* V */ 1668 }, 1669 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1670 }, 1671 [AV_PIX_FMT_YUV444P12LE] = { 1672 .name = "yuv444p12le", 1673 .nb_components = 3, 1674 .log2_chroma_w = 0, 1675 .log2_chroma_h = 0, 1676 .comp = { 1677 { 0, 2, 0, 0, 12 }, /* Y */ 1678 { 1, 2, 0, 0, 12 }, /* U */ 1679 { 2, 2, 0, 0, 12 }, /* V */ 1680 }, 1681 .flags = AV_PIX_FMT_FLAG_PLANAR, 1682 }, 1683 [AV_PIX_FMT_YUV444P12BE] = { 1684 .name = "yuv444p12be", 1685 .nb_components = 3, 1686 .log2_chroma_w = 0, 1687 .log2_chroma_h = 0, 1688 .comp = { 1689 { 0, 2, 0, 0, 12 }, /* Y */ 1690 { 1, 2, 0, 0, 12 }, /* U */ 1691 { 2, 2, 0, 0, 12 }, /* V */ 1692 }, 1693 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1694 }, 1695 [AV_PIX_FMT_YUV444P14LE] = { 1696 .name = "yuv444p14le", 1697 .nb_components = 3, 1698 .log2_chroma_w = 0, 1699 .log2_chroma_h = 0, 1700 .comp = { 1701 { 0, 2, 0, 0, 14 }, /* Y */ 1702 { 1, 2, 0, 0, 14 }, /* U */ 1703 { 2, 2, 0, 0, 14 }, /* V */ 1704 }, 1705 .flags = AV_PIX_FMT_FLAG_PLANAR, 1706 }, 1707 [AV_PIX_FMT_YUV444P14BE] = { 1708 .name = "yuv444p14be", 1709 .nb_components = 3, 1710 .log2_chroma_w = 0, 1711 .log2_chroma_h = 0, 1712 .comp = { 1713 { 0, 2, 0, 0, 14 }, /* Y */ 1714 { 1, 2, 0, 0, 14 }, /* U */ 1715 { 2, 2, 0, 0, 14 }, /* V */ 1716 }, 1717 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR, 1718 }, 1719 [AV_PIX_FMT_D3D11VA_VLD] = { 1720 .name = "d3d11va_vld", 1721 .log2_chroma_w = 1, 1722 .log2_chroma_h = 1, 1723 .flags = AV_PIX_FMT_FLAG_HWACCEL, 1724 }, 1725 [AV_PIX_FMT_DXVA2_VLD] = { 1726 .name = "dxva2_vld", 1727 .log2_chroma_w = 1, 1728 .log2_chroma_h = 1, 1729 .flags = AV_PIX_FMT_FLAG_HWACCEL, 1730 }, 1731 [AV_PIX_FMT_YA8] = { 1732 .name = "ya8", 1733 .nb_components = 2, 1734 .comp = { 1735 { 0, 2, 0, 0, 8 }, /* Y */ 1736 { 0, 2, 1, 0, 8 }, /* A */ 1737 }, 1738 .flags = AV_PIX_FMT_FLAG_ALPHA, 1739 .alias = "gray8a", 1740 }, 1741 [AV_PIX_FMT_YA16LE] = { 1742 .name = "ya16le", 1743 .nb_components = 2, 1744 .comp = { 1745 { 0, 4, 0, 0, 16 }, /* Y */ 1746 { 0, 4, 2, 0, 16 }, /* A */ 1747 }, 1748 .flags = AV_PIX_FMT_FLAG_ALPHA, 1749 }, 1750 [AV_PIX_FMT_YA16BE] = { 1751 .name = "ya16be", 1752 .nb_components = 2, 1753 .comp = { 1754 { 0, 4, 0, 0, 16 }, /* Y */ 1755 { 0, 4, 2, 0, 16 }, /* A */ 1756 }, 1757 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA, 1758 }, 1759 [AV_PIX_FMT_VIDEOTOOLBOX] = { 1760 .name = "videotoolbox_vld", 1761 .flags = AV_PIX_FMT_FLAG_HWACCEL, 1762 }, 1763 [AV_PIX_FMT_GBRP] = { 1764 .name = "gbrp", 1765 .nb_components = 3, 1766 .log2_chroma_w = 0, 1767 .log2_chroma_h = 0, 1768 .comp = { 1769 { 2, 1, 0, 0, 8 }, /* R */ 1770 { 0, 1, 0, 0, 8 }, /* G */ 1771 { 1, 1, 0, 0, 8 }, /* B */ 1772 }, 1773 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1774 }, 1775 [AV_PIX_FMT_GBRP9LE] = { 1776 .name = "gbrp9le", 1777 .nb_components = 3, 1778 .log2_chroma_w = 0, 1779 .log2_chroma_h = 0, 1780 .comp = { 1781 { 2, 2, 0, 0, 9 }, /* R */ 1782 { 0, 2, 0, 0, 9 }, /* G */ 1783 { 1, 2, 0, 0, 9 }, /* B */ 1784 }, 1785 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1786 }, 1787 [AV_PIX_FMT_GBRP9BE] = { 1788 .name = "gbrp9be", 1789 .nb_components = 3, 1790 .log2_chroma_w = 0, 1791 .log2_chroma_h = 0, 1792 .comp = { 1793 { 2, 2, 0, 0, 9 }, /* R */ 1794 { 0, 2, 0, 0, 9 }, /* G */ 1795 { 1, 2, 0, 0, 9 }, /* B */ 1796 }, 1797 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1798 }, 1799 [AV_PIX_FMT_GBRP10LE] = { 1800 .name = "gbrp10le", 1801 .nb_components = 3, 1802 .log2_chroma_w = 0, 1803 .log2_chroma_h = 0, 1804 .comp = { 1805 { 2, 2, 0, 0, 10 }, /* R */ 1806 { 0, 2, 0, 0, 10 }, /* G */ 1807 { 1, 2, 0, 0, 10 }, /* B */ 1808 }, 1809 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1810 }, 1811 [AV_PIX_FMT_GBRP10BE] = { 1812 .name = "gbrp10be", 1813 .nb_components = 3, 1814 .log2_chroma_w = 0, 1815 .log2_chroma_h = 0, 1816 .comp = { 1817 { 2, 2, 0, 0, 10 }, /* R */ 1818 { 0, 2, 0, 0, 10 }, /* G */ 1819 { 1, 2, 0, 0, 10 }, /* B */ 1820 }, 1821 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1822 }, 1823 [AV_PIX_FMT_GBRP12LE] = { 1824 .name = "gbrp12le", 1825 .nb_components = 3, 1826 .log2_chroma_w = 0, 1827 .log2_chroma_h = 0, 1828 .comp = { 1829 { 2, 2, 0, 0, 12 }, /* R */ 1830 { 0, 2, 0, 0, 12 }, /* G */ 1831 { 1, 2, 0, 0, 12 }, /* B */ 1832 }, 1833 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1834 }, 1835 [AV_PIX_FMT_GBRP12BE] = { 1836 .name = "gbrp12be", 1837 .nb_components = 3, 1838 .log2_chroma_w = 0, 1839 .log2_chroma_h = 0, 1840 .comp = { 1841 { 2, 2, 0, 0, 12 }, /* R */ 1842 { 0, 2, 0, 0, 12 }, /* G */ 1843 { 1, 2, 0, 0, 12 }, /* B */ 1844 }, 1845 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1846 }, 1847 [AV_PIX_FMT_GBRP14LE] = { 1848 .name = "gbrp14le", 1849 .nb_components = 3, 1850 .log2_chroma_w = 0, 1851 .log2_chroma_h = 0, 1852 .comp = { 1853 { 2, 2, 0, 0, 14 }, /* R */ 1854 { 0, 2, 0, 0, 14 }, /* G */ 1855 { 1, 2, 0, 0, 14 }, /* B */ 1856 }, 1857 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1858 }, 1859 [AV_PIX_FMT_GBRP14BE] = { 1860 .name = "gbrp14be", 1861 .nb_components = 3, 1862 .log2_chroma_w = 0, 1863 .log2_chroma_h = 0, 1864 .comp = { 1865 { 2, 2, 0, 0, 14 }, /* R */ 1866 { 0, 2, 0, 0, 14 }, /* G */ 1867 { 1, 2, 0, 0, 14 }, /* B */ 1868 }, 1869 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1870 }, 1871 [AV_PIX_FMT_GBRP16LE] = { 1872 .name = "gbrp16le", 1873 .nb_components = 3, 1874 .log2_chroma_w = 0, 1875 .log2_chroma_h = 0, 1876 .comp = { 1877 { 2, 2, 0, 0, 16 }, /* R */ 1878 { 0, 2, 0, 0, 16 }, /* G */ 1879 { 1, 2, 0, 0, 16 }, /* B */ 1880 }, 1881 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1882 }, 1883 [AV_PIX_FMT_GBRP16BE] = { 1884 .name = "gbrp16be", 1885 .nb_components = 3, 1886 .log2_chroma_w = 0, 1887 .log2_chroma_h = 0, 1888 .comp = { 1889 { 2, 2, 0, 0, 16 }, /* R */ 1890 { 0, 2, 0, 0, 16 }, /* G */ 1891 { 1, 2, 0, 0, 16 }, /* B */ 1892 }, 1893 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB, 1894 }, 1895 [AV_PIX_FMT_GBRAP] = { 1896 .name = "gbrap", 1897 .nb_components = 4, 1898 .log2_chroma_w = 0, 1899 .log2_chroma_h = 0, 1900 .comp = { 1901 { 2, 1, 0, 0, 8 }, /* R */ 1902 { 0, 1, 0, 0, 8 }, /* G */ 1903 { 1, 1, 0, 0, 8 }, /* B */ 1904 { 3, 1, 0, 0, 8 }, /* A */ 1905 }, 1906 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | 1907 AV_PIX_FMT_FLAG_ALPHA, 1908 }, 1909 [AV_PIX_FMT_GBRAP16LE] = { 1910 .name = "gbrap16le", 1911 .nb_components = 4, 1912 .log2_chroma_w = 0, 1913 .log2_chroma_h = 0, 1914 .comp = { 1915 { 2, 2, 0, 0, 16 }, /* R */ 1916 { 0, 2, 0, 0, 16 }, /* G */ 1917 { 1, 2, 0, 0, 16 }, /* B */ 1918 { 3, 2, 0, 0, 16 }, /* A */ 1919 }, 1920 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | 1921 AV_PIX_FMT_FLAG_ALPHA, 1922 }, 1923 [AV_PIX_FMT_GBRAP16BE] = { 1924 .name = "gbrap16be", 1925 .nb_components = 4, 1926 .log2_chroma_w = 0, 1927 .log2_chroma_h = 0, 1928 .comp = { 1929 { 2, 2, 0, 0, 16 }, /* R */ 1930 { 0, 2, 0, 0, 16 }, /* G */ 1931 { 1, 2, 0, 0, 16 }, /* B */ 1932 { 3, 2, 0, 0, 16 }, /* A */ 1933 }, 1934 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | 1935 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 1936 }, 1937 [AV_PIX_FMT_VDPAU] = { 1938 .name = "vdpau", 1939 .log2_chroma_w = 1, 1940 .log2_chroma_h = 1, 1941 .flags = AV_PIX_FMT_FLAG_HWACCEL, 1942 }, 1943 [AV_PIX_FMT_XYZ12LE] = { 1944 .name = "xyz12le", 1945 .nb_components = 3, 1946 .log2_chroma_w = 0, 1947 .log2_chroma_h = 0, 1948 .comp = { 1949 { 0, 6, 0, 4, 12 }, /* X */ 1950 { 0, 6, 2, 4, 12 }, /* Y */ 1951 { 0, 6, 4, 4, 12 }, /* Z */ 1952 }, 1953 /*.flags = -- not used*/ 1954 }, 1955 [AV_PIX_FMT_XYZ12BE] = { 1956 .name = "xyz12be", 1957 .nb_components = 3, 1958 .log2_chroma_w = 0, 1959 .log2_chroma_h = 0, 1960 .comp = { 1961 { 0, 6, 0, 4, 12 }, /* X */ 1962 { 0, 6, 2, 4, 12 }, /* Y */ 1963 { 0, 6, 4, 4, 12 }, /* Z */ 1964 }, 1965 .flags = AV_PIX_FMT_FLAG_BE, 1966 }, 1967 1968#define BAYER8_DESC_COMMON \ 1969 .nb_components= 3, \ 1970 .log2_chroma_w= 0, \ 1971 .log2_chroma_h= 0, \ 1972 .comp = { \ 1973 { 0, 1, 0, 0, 2 }, \ 1974 { 0, 1, 0, 0, 4 }, \ 1975 { 0, 1, 0, 0, 2 }, \ 1976 }, \ 1977 1978#define BAYER16_DESC_COMMON \ 1979 .nb_components= 3, \ 1980 .log2_chroma_w= 0, \ 1981 .log2_chroma_h= 0, \ 1982 .comp = { \ 1983 { 0, 2, 0, 0, 4 }, \ 1984 { 0, 2, 0, 0, 8 }, \ 1985 { 0, 2, 0, 0, 4 }, \ 1986 }, \ 1987 1988 [AV_PIX_FMT_BAYER_BGGR8] = { 1989 .name = "bayer_bggr8", 1990 BAYER8_DESC_COMMON 1991 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 1992 }, 1993 [AV_PIX_FMT_BAYER_BGGR16LE] = { 1994 .name = "bayer_bggr16le", 1995 BAYER16_DESC_COMMON 1996 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 1997 }, 1998 [AV_PIX_FMT_BAYER_BGGR16BE] = { 1999 .name = "bayer_bggr16be", 2000 BAYER16_DESC_COMMON 2001 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2002 }, 2003 [AV_PIX_FMT_BAYER_RGGB8] = { 2004 .name = "bayer_rggb8", 2005 BAYER8_DESC_COMMON 2006 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2007 }, 2008 [AV_PIX_FMT_BAYER_RGGB16LE] = { 2009 .name = "bayer_rggb16le", 2010 BAYER16_DESC_COMMON 2011 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2012 }, 2013 [AV_PIX_FMT_BAYER_RGGB16BE] = { 2014 .name = "bayer_rggb16be", 2015 BAYER16_DESC_COMMON 2016 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2017 }, 2018 [AV_PIX_FMT_BAYER_GBRG8] = { 2019 .name = "bayer_gbrg8", 2020 BAYER8_DESC_COMMON 2021 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2022 }, 2023 [AV_PIX_FMT_BAYER_GBRG16LE] = { 2024 .name = "bayer_gbrg16le", 2025 BAYER16_DESC_COMMON 2026 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2027 }, 2028 [AV_PIX_FMT_BAYER_GBRG16BE] = { 2029 .name = "bayer_gbrg16be", 2030 BAYER16_DESC_COMMON 2031 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2032 }, 2033 [AV_PIX_FMT_BAYER_GRBG8] = { 2034 .name = "bayer_grbg8", 2035 BAYER8_DESC_COMMON 2036 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2037 }, 2038 [AV_PIX_FMT_BAYER_GRBG16LE] = { 2039 .name = "bayer_grbg16le", 2040 BAYER16_DESC_COMMON 2041 .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2042 }, 2043 [AV_PIX_FMT_BAYER_GRBG16BE] = { 2044 .name = "bayer_grbg16be", 2045 BAYER16_DESC_COMMON 2046 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, 2047 }, 2048 [AV_PIX_FMT_NV16] = { 2049 .name = "nv16", 2050 .nb_components = 3, 2051 .log2_chroma_w = 1, 2052 .log2_chroma_h = 0, 2053 .comp = { 2054 { 0, 1, 0, 0, 8 }, /* Y */ 2055 { 1, 2, 0, 0, 8 }, /* U */ 2056 { 1, 2, 1, 0, 8 }, /* V */ 2057 }, 2058 .flags = AV_PIX_FMT_FLAG_PLANAR, 2059 }, 2060 [AV_PIX_FMT_NV20LE] = { 2061 .name = "nv20le", 2062 .nb_components = 3, 2063 .log2_chroma_w = 1, 2064 .log2_chroma_h = 0, 2065 .comp = { 2066 { 0, 2, 0, 0, 10 }, /* Y */ 2067 { 1, 4, 0, 0, 10 }, /* U */ 2068 { 1, 4, 2, 0, 10 }, /* V */ 2069 }, 2070 .flags = AV_PIX_FMT_FLAG_PLANAR, 2071 }, 2072 [AV_PIX_FMT_NV20BE] = { 2073 .name = "nv20be", 2074 .nb_components = 3, 2075 .log2_chroma_w = 1, 2076 .log2_chroma_h = 0, 2077 .comp = { 2078 { 0, 2, 0, 0, 10 }, /* Y */ 2079 { 1, 4, 0, 0, 10 }, /* U */ 2080 { 1, 4, 2, 0, 10 }, /* V */ 2081 }, 2082 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2083 }, 2084 [AV_PIX_FMT_QSV] = { 2085 .name = "qsv", 2086 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2087 }, 2088 [AV_PIX_FMT_MEDIACODEC] = { 2089 .name = "mediacodec", 2090 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2091 }, 2092 [AV_PIX_FMT_MMAL] = { 2093 .name = "mmal", 2094 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2095 }, 2096 [AV_PIX_FMT_CUDA] = { 2097 .name = "cuda", 2098 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2099 }, 2100 [AV_PIX_FMT_AYUV64LE] = { 2101 .name = "ayuv64le", 2102 .nb_components = 4, 2103 .log2_chroma_w = 0, 2104 .log2_chroma_h = 0, 2105 .comp = { 2106 { 0, 8, 2, 0, 16 }, /* Y */ 2107 { 0, 8, 4, 0, 16 }, /* U */ 2108 { 0, 8, 6, 0, 16 }, /* V */ 2109 { 0, 8, 0, 0, 16 }, /* A */ 2110 }, 2111 .flags = AV_PIX_FMT_FLAG_ALPHA, 2112 }, 2113 [AV_PIX_FMT_AYUV64BE] = { 2114 .name = "ayuv64be", 2115 .nb_components = 4, 2116 .log2_chroma_w = 0, 2117 .log2_chroma_h = 0, 2118 .comp = { 2119 { 0, 8, 2, 0, 16 }, /* Y */ 2120 { 0, 8, 4, 0, 16 }, /* U */ 2121 { 0, 8, 6, 0, 16 }, /* V */ 2122 { 0, 8, 0, 0, 16 }, /* A */ 2123 }, 2124 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_ALPHA, 2125 }, 2126 [AV_PIX_FMT_P010LE] = { 2127 .name = "p010le", 2128 .nb_components = 3, 2129 .log2_chroma_w = 1, 2130 .log2_chroma_h = 1, 2131 .comp = { 2132 { 0, 2, 0, 6, 10 }, /* Y */ 2133 { 1, 4, 0, 6, 10 }, /* U */ 2134 { 1, 4, 2, 6, 10 }, /* V */ 2135 }, 2136 .flags = AV_PIX_FMT_FLAG_PLANAR, 2137 }, 2138 [AV_PIX_FMT_P010BE] = { 2139 .name = "p010be", 2140 .nb_components = 3, 2141 .log2_chroma_w = 1, 2142 .log2_chroma_h = 1, 2143 .comp = { 2144 { 0, 2, 0, 6, 10 }, /* Y */ 2145 { 1, 4, 0, 6, 10 }, /* U */ 2146 { 1, 4, 2, 6, 10 }, /* V */ 2147 }, 2148 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2149 }, 2150 [AV_PIX_FMT_P016LE] = { 2151 .name = "p016le", 2152 .nb_components = 3, 2153 .log2_chroma_w = 1, 2154 .log2_chroma_h = 1, 2155 .comp = { 2156 { 0, 2, 0, 0, 16 }, /* Y */ 2157 { 1, 4, 0, 0, 16 }, /* U */ 2158 { 1, 4, 2, 0, 16 }, /* V */ 2159 }, 2160 .flags = AV_PIX_FMT_FLAG_PLANAR, 2161 }, 2162 [AV_PIX_FMT_P016BE] = { 2163 .name = "p016be", 2164 .nb_components = 3, 2165 .log2_chroma_w = 1, 2166 .log2_chroma_h = 1, 2167 .comp = { 2168 { 0, 2, 0, 0, 16 }, /* Y */ 2169 { 1, 4, 0, 0, 16 }, /* U */ 2170 { 1, 4, 2, 0, 16 }, /* V */ 2171 }, 2172 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2173 }, 2174 [AV_PIX_FMT_GBRAP12LE] = { 2175 .name = "gbrap12le", 2176 .nb_components = 4, 2177 .log2_chroma_w = 0, 2178 .log2_chroma_h = 0, 2179 .comp = { 2180 { 2, 2, 0, 0, 12 }, /* R */ 2181 { 0, 2, 0, 0, 12 }, /* G */ 2182 { 1, 2, 0, 0, 12 }, /* B */ 2183 { 3, 2, 0, 0, 12 }, /* A */ 2184 }, 2185 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | 2186 AV_PIX_FMT_FLAG_ALPHA, 2187 }, 2188 [AV_PIX_FMT_GBRAP12BE] = { 2189 .name = "gbrap12be", 2190 .nb_components = 4, 2191 .log2_chroma_w = 0, 2192 .log2_chroma_h = 0, 2193 .comp = { 2194 { 2, 2, 0, 0, 12 }, /* R */ 2195 { 0, 2, 0, 0, 12 }, /* G */ 2196 { 1, 2, 0, 0, 12 }, /* B */ 2197 { 3, 2, 0, 0, 12 }, /* A */ 2198 }, 2199 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | 2200 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 2201 }, 2202 [AV_PIX_FMT_GBRAP10LE] = { 2203 .name = "gbrap10le", 2204 .nb_components = 4, 2205 .log2_chroma_w = 0, 2206 .log2_chroma_h = 0, 2207 .comp = { 2208 { 2, 2, 0, 0, 10 }, /* R */ 2209 { 0, 2, 0, 0, 10 }, /* G */ 2210 { 1, 2, 0, 0, 10 }, /* B */ 2211 { 3, 2, 0, 0, 10 }, /* A */ 2212 }, 2213 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | 2214 AV_PIX_FMT_FLAG_ALPHA, 2215 }, 2216 [AV_PIX_FMT_GBRAP10BE] = { 2217 .name = "gbrap10be", 2218 .nb_components = 4, 2219 .log2_chroma_w = 0, 2220 .log2_chroma_h = 0, 2221 .comp = { 2222 { 2, 2, 0, 0, 10 }, /* R */ 2223 { 0, 2, 0, 0, 10 }, /* G */ 2224 { 1, 2, 0, 0, 10 }, /* B */ 2225 { 3, 2, 0, 0, 10 }, /* A */ 2226 }, 2227 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | 2228 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, 2229 }, 2230 [AV_PIX_FMT_D3D11] = { 2231 .name = "d3d11", 2232 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2233 }, 2234 [AV_PIX_FMT_GBRPF32BE] = { 2235 .name = "gbrpf32be", 2236 .nb_components = 3, 2237 .log2_chroma_w = 0, 2238 .log2_chroma_h = 0, 2239 .comp = { 2240 { 2, 4, 0, 0, 32 }, /* R */ 2241 { 0, 4, 0, 0, 32 }, /* G */ 2242 { 1, 4, 0, 0, 32 }, /* B */ 2243 }, 2244 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | 2245 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, 2246 }, 2247 [AV_PIX_FMT_GBRPF32LE] = { 2248 .name = "gbrpf32le", 2249 .nb_components = 3, 2250 .log2_chroma_w = 0, 2251 .log2_chroma_h = 0, 2252 .comp = { 2253 { 2, 4, 0, 0, 32 }, /* R */ 2254 { 0, 4, 0, 0, 32 }, /* G */ 2255 { 1, 4, 0, 0, 32 }, /* B */ 2256 }, 2257 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB, 2258 }, 2259 [AV_PIX_FMT_GBRAPF32BE] = { 2260 .name = "gbrapf32be", 2261 .nb_components = 4, 2262 .log2_chroma_w = 0, 2263 .log2_chroma_h = 0, 2264 .comp = { 2265 { 2, 4, 0, 0, 32 }, /* R */ 2266 { 0, 4, 0, 0, 32 }, /* G */ 2267 { 1, 4, 0, 0, 32 }, /* B */ 2268 { 3, 4, 0, 0, 32 }, /* A */ 2269 }, 2270 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | 2271 AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB | 2272 AV_PIX_FMT_FLAG_FLOAT, 2273 }, 2274 [AV_PIX_FMT_GBRAPF32LE] = { 2275 .name = "gbrapf32le", 2276 .nb_components = 4, 2277 .log2_chroma_w = 0, 2278 .log2_chroma_h = 0, 2279 .comp = { 2280 { 2, 4, 0, 0, 32 }, /* R */ 2281 { 0, 4, 0, 0, 32 }, /* G */ 2282 { 1, 4, 0, 0, 32 }, /* B */ 2283 { 3, 4, 0, 0, 32 }, /* A */ 2284 }, 2285 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA | 2286 AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, 2287 }, 2288 [AV_PIX_FMT_DRM_PRIME] = { 2289 .name = "drm_prime", 2290 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2291 }, 2292 [AV_PIX_FMT_OPENCL] = { 2293 .name = "opencl", 2294 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2295 }, 2296 [AV_PIX_FMT_GRAYF32BE] = { 2297 .name = "grayf32be", 2298 .nb_components = 1, 2299 .log2_chroma_w = 0, 2300 .log2_chroma_h = 0, 2301 .comp = { 2302 { 0, 4, 0, 0, 32 }, /* Y */ 2303 }, 2304 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_FLOAT, 2305 .alias = "yf32be", 2306 }, 2307 [AV_PIX_FMT_GRAYF32LE] = { 2308 .name = "grayf32le", 2309 .nb_components = 1, 2310 .log2_chroma_w = 0, 2311 .log2_chroma_h = 0, 2312 .comp = { 2313 { 0, 4, 0, 0, 32 }, /* Y */ 2314 }, 2315 .flags = AV_PIX_FMT_FLAG_FLOAT, 2316 .alias = "yf32le", 2317 }, 2318 [AV_PIX_FMT_YUVA422P12BE] = { 2319 .name = "yuva422p12be", 2320 .nb_components = 4, 2321 .log2_chroma_w = 1, 2322 .log2_chroma_h = 0, 2323 .comp = { 2324 { 0, 2, 0, 0, 12 }, /* Y */ 2325 { 1, 2, 0, 0, 12 }, /* U */ 2326 { 2, 2, 0, 0, 12 }, /* V */ 2327 { 3, 2, 0, 0, 12 }, /* A */ 2328 }, 2329 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 2330 }, 2331 [AV_PIX_FMT_YUVA422P12LE] = { 2332 .name = "yuva422p12le", 2333 .nb_components = 4, 2334 .log2_chroma_w = 1, 2335 .log2_chroma_h = 0, 2336 .comp = { 2337 { 0, 2, 0, 0, 12 }, /* Y */ 2338 { 1, 2, 0, 0, 12 }, /* U */ 2339 { 2, 2, 0, 0, 12 }, /* V */ 2340 { 3, 2, 0, 0, 12 }, /* A */ 2341 }, 2342 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 2343 }, 2344 [AV_PIX_FMT_YUVA444P12BE] = { 2345 .name = "yuva444p12be", 2346 .nb_components = 4, 2347 .log2_chroma_w = 0, 2348 .log2_chroma_h = 0, 2349 .comp = { 2350 { 0, 2, 0, 0, 12 }, /* Y */ 2351 { 1, 2, 0, 0, 12 }, /* U */ 2352 { 2, 2, 0, 0, 12 }, /* V */ 2353 { 3, 2, 0, 0, 12 }, /* A */ 2354 }, 2355 .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 2356 }, 2357 [AV_PIX_FMT_YUVA444P12LE] = { 2358 .name = "yuva444p12le", 2359 .nb_components = 4, 2360 .log2_chroma_w = 0, 2361 .log2_chroma_h = 0, 2362 .comp = { 2363 { 0, 2, 0, 0, 12 }, /* Y */ 2364 { 1, 2, 0, 0, 12 }, /* U */ 2365 { 2, 2, 0, 0, 12 }, /* V */ 2366 { 3, 2, 0, 0, 12 }, /* A */ 2367 }, 2368 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA, 2369 }, 2370 [AV_PIX_FMT_NV24] = { 2371 .name = "nv24", 2372 .nb_components = 3, 2373 .log2_chroma_w = 0, 2374 .log2_chroma_h = 0, 2375 .comp = { 2376 { 0, 1, 0, 0, 8 }, /* Y */ 2377 { 1, 2, 0, 0, 8 }, /* U */ 2378 { 1, 2, 1, 0, 8 }, /* V */ 2379 }, 2380 .flags = AV_PIX_FMT_FLAG_PLANAR, 2381 }, 2382 [AV_PIX_FMT_NV42] = { 2383 .name = "nv42", 2384 .nb_components = 3, 2385 .log2_chroma_w = 0, 2386 .log2_chroma_h = 0, 2387 .comp = { 2388 { 0, 1, 0, 0, 8 }, /* Y */ 2389 { 1, 2, 1, 0, 8 }, /* U */ 2390 { 1, 2, 0, 0, 8 }, /* V */ 2391 }, 2392 .flags = AV_PIX_FMT_FLAG_PLANAR, 2393 }, 2394 [AV_PIX_FMT_VULKAN] = { 2395 .name = "vulkan", 2396 .flags = AV_PIX_FMT_FLAG_HWACCEL, 2397 }, 2398 [AV_PIX_FMT_P210BE] = { 2399 .name = "p210be", 2400 .nb_components = 3, 2401 .log2_chroma_w = 1, 2402 .log2_chroma_h = 0, 2403 .comp = { 2404 { 0, 2, 0, 6, 10 }, /* Y */ 2405 { 1, 4, 0, 6, 10 }, /* U */ 2406 { 1, 4, 2, 6, 10 }, /* V */ 2407 }, 2408 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2409 }, 2410 [AV_PIX_FMT_P210LE] = { 2411 .name = "p210le", 2412 .nb_components = 3, 2413 .log2_chroma_w = 1, 2414 .log2_chroma_h = 0, 2415 .comp = { 2416 { 0, 2, 0, 6, 10 }, /* Y */ 2417 { 1, 4, 0, 6, 10 }, /* U */ 2418 { 1, 4, 2, 6, 10 }, /* V */ 2419 }, 2420 .flags = AV_PIX_FMT_FLAG_PLANAR, 2421 }, 2422 [AV_PIX_FMT_P410BE] = { 2423 .name = "p410be", 2424 .nb_components = 3, 2425 .log2_chroma_w = 0, 2426 .log2_chroma_h = 0, 2427 .comp = { 2428 { 0, 2, 0, 6, 10 }, /* Y */ 2429 { 1, 4, 0, 6, 10 }, /* U */ 2430 { 1, 4, 2, 6, 10 }, /* V */ 2431 }, 2432 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2433 }, 2434 [AV_PIX_FMT_P410LE] = { 2435 .name = "p410le", 2436 .nb_components = 3, 2437 .log2_chroma_w = 0, 2438 .log2_chroma_h = 0, 2439 .comp = { 2440 { 0, 2, 0, 6, 10 }, /* Y */ 2441 { 1, 4, 0, 6, 10 }, /* U */ 2442 { 1, 4, 2, 6, 10 }, /* V */ 2443 }, 2444 .flags = AV_PIX_FMT_FLAG_PLANAR, 2445 }, 2446 [AV_PIX_FMT_P216BE] = { 2447 .name = "p216be", 2448 .nb_components = 3, 2449 .log2_chroma_w = 1, 2450 .log2_chroma_h = 0, 2451 .comp = { 2452 { 0, 2, 0, 0, 16 }, /* Y */ 2453 { 1, 4, 0, 0, 16 }, /* U */ 2454 { 1, 4, 2, 0, 16 }, /* V */ 2455 }, 2456 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2457 }, 2458 [AV_PIX_FMT_P216LE] = { 2459 .name = "p216le", 2460 .nb_components = 3, 2461 .log2_chroma_w = 1, 2462 .log2_chroma_h = 0, 2463 .comp = { 2464 { 0, 2, 0, 0, 16 }, /* Y */ 2465 { 1, 4, 0, 0, 16 }, /* U */ 2466 { 1, 4, 2, 0, 16 }, /* V */ 2467 }, 2468 .flags = AV_PIX_FMT_FLAG_PLANAR, 2469 }, 2470 [AV_PIX_FMT_P416BE] = { 2471 .name = "p416be", 2472 .nb_components = 3, 2473 .log2_chroma_w = 0, 2474 .log2_chroma_h = 0, 2475 .comp = { 2476 { 0, 2, 0, 0, 16 }, /* Y */ 2477 { 1, 4, 0, 0, 16 }, /* U */ 2478 { 1, 4, 2, 0, 16 }, /* V */ 2479 }, 2480 .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, 2481 }, 2482 [AV_PIX_FMT_P416LE] = { 2483 .name = "p416le", 2484 .nb_components = 3, 2485 .log2_chroma_w = 0, 2486 .log2_chroma_h = 0, 2487 .comp = { 2488 { 0, 2, 0, 0, 16 }, /* Y */ 2489 { 1, 4, 0, 0, 16 }, /* U */ 2490 { 1, 4, 2, 0, 16 }, /* V */ 2491 }, 2492 .flags = AV_PIX_FMT_FLAG_PLANAR, 2493 }, 2494}; 2495 2496static const char * const color_range_names[] = { 2497 [AVCOL_RANGE_UNSPECIFIED] = "unknown", 2498 [AVCOL_RANGE_MPEG] = "tv", 2499 [AVCOL_RANGE_JPEG] = "pc", 2500}; 2501 2502static const char * const color_primaries_names[AVCOL_PRI_NB] = { 2503 [AVCOL_PRI_RESERVED0] = "reserved", 2504 [AVCOL_PRI_BT709] = "bt709", 2505 [AVCOL_PRI_UNSPECIFIED] = "unknown", 2506 [AVCOL_PRI_RESERVED] = "reserved", 2507 [AVCOL_PRI_BT470M] = "bt470m", 2508 [AVCOL_PRI_BT470BG] = "bt470bg", 2509 [AVCOL_PRI_SMPTE170M] = "smpte170m", 2510 [AVCOL_PRI_SMPTE240M] = "smpte240m", 2511 [AVCOL_PRI_FILM] = "film", 2512 [AVCOL_PRI_BT2020] = "bt2020", 2513 [AVCOL_PRI_SMPTE428] = "smpte428", 2514 [AVCOL_PRI_SMPTE431] = "smpte431", 2515 [AVCOL_PRI_SMPTE432] = "smpte432", 2516 [AVCOL_PRI_EBU3213] = "ebu3213", 2517}; 2518 2519static const char * const color_transfer_names[] = { 2520 [AVCOL_TRC_RESERVED0] = "reserved", 2521 [AVCOL_TRC_BT709] = "bt709", 2522 [AVCOL_TRC_UNSPECIFIED] = "unknown", 2523 [AVCOL_TRC_RESERVED] = "reserved", 2524 [AVCOL_TRC_GAMMA22] = "bt470m", 2525 [AVCOL_TRC_GAMMA28] = "bt470bg", 2526 [AVCOL_TRC_SMPTE170M] = "smpte170m", 2527 [AVCOL_TRC_SMPTE240M] = "smpte240m", 2528 [AVCOL_TRC_LINEAR] = "linear", 2529 [AVCOL_TRC_LOG] = "log100", 2530 [AVCOL_TRC_LOG_SQRT] = "log316", 2531 [AVCOL_TRC_IEC61966_2_4] = "iec61966-2-4", 2532 [AVCOL_TRC_BT1361_ECG] = "bt1361e", 2533 [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1", 2534 [AVCOL_TRC_BT2020_10] = "bt2020-10", 2535 [AVCOL_TRC_BT2020_12] = "bt2020-12", 2536 [AVCOL_TRC_SMPTE2084] = "smpte2084", 2537 [AVCOL_TRC_SMPTE428] = "smpte428", 2538 [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67", 2539}; 2540 2541static const char * const color_space_names[] = { 2542 [AVCOL_SPC_RGB] = "gbr", 2543 [AVCOL_SPC_BT709] = "bt709", 2544 [AVCOL_SPC_UNSPECIFIED] = "unknown", 2545 [AVCOL_SPC_RESERVED] = "reserved", 2546 [AVCOL_SPC_FCC] = "fcc", 2547 [AVCOL_SPC_BT470BG] = "bt470bg", 2548 [AVCOL_SPC_SMPTE170M] = "smpte170m", 2549 [AVCOL_SPC_SMPTE240M] = "smpte240m", 2550 [AVCOL_SPC_YCGCO] = "ycgco", 2551 [AVCOL_SPC_BT2020_NCL] = "bt2020nc", 2552 [AVCOL_SPC_BT2020_CL] = "bt2020c", 2553 [AVCOL_SPC_SMPTE2085] = "smpte2085", 2554 [AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc", 2555 [AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c", 2556 [AVCOL_SPC_ICTCP] = "ictcp", 2557}; 2558 2559static const char * const chroma_location_names[] = { 2560 [AVCHROMA_LOC_UNSPECIFIED] = "unspecified", 2561 [AVCHROMA_LOC_LEFT] = "left", 2562 [AVCHROMA_LOC_CENTER] = "center", 2563 [AVCHROMA_LOC_TOPLEFT] = "topleft", 2564 [AVCHROMA_LOC_TOP] = "top", 2565 [AVCHROMA_LOC_BOTTOMLEFT] = "bottomleft", 2566 [AVCHROMA_LOC_BOTTOM] = "bottom", 2567}; 2568 2569static enum AVPixelFormat get_pix_fmt_internal(const char *name) 2570{ 2571 enum AVPixelFormat pix_fmt; 2572 2573 for (pix_fmt = 0; pix_fmt < AV_PIX_FMT_NB; pix_fmt++) 2574 if (av_pix_fmt_descriptors[pix_fmt].name && 2575 (!strcmp(av_pix_fmt_descriptors[pix_fmt].name, name) || 2576 av_match_name(name, av_pix_fmt_descriptors[pix_fmt].alias))) 2577 return pix_fmt; 2578 2579 return AV_PIX_FMT_NONE; 2580} 2581 2582const char *av_get_pix_fmt_name(enum AVPixelFormat pix_fmt) 2583{ 2584 return (unsigned)pix_fmt < AV_PIX_FMT_NB ? 2585 av_pix_fmt_descriptors[pix_fmt].name : NULL; 2586} 2587 2588#if HAVE_BIGENDIAN 2589# define X_NE(be, le) be 2590#else 2591# define X_NE(be, le) le 2592#endif 2593 2594enum AVPixelFormat av_get_pix_fmt(const char *name) 2595{ 2596 enum AVPixelFormat pix_fmt; 2597 2598 if (!strcmp(name, "rgb32")) 2599 name = X_NE("argb", "bgra"); 2600 else if (!strcmp(name, "bgr32")) 2601 name = X_NE("abgr", "rgba"); 2602 2603 pix_fmt = get_pix_fmt_internal(name); 2604 if (pix_fmt == AV_PIX_FMT_NONE) { 2605 char name2[32]; 2606 2607 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le")); 2608 pix_fmt = get_pix_fmt_internal(name2); 2609 } 2610 2611 return pix_fmt; 2612} 2613 2614int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc) 2615{ 2616 int c, bits = 0; 2617 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h; 2618 2619 for (c = 0; c < pixdesc->nb_components; c++) { 2620 int s = c == 1 || c == 2 ? 0 : log2_pixels; 2621 bits += pixdesc->comp[c].depth << s; 2622 } 2623 2624 return bits >> log2_pixels; 2625} 2626 2627int av_get_padded_bits_per_pixel(const AVPixFmtDescriptor *pixdesc) 2628{ 2629 int c, bits = 0; 2630 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h; 2631 int steps[4] = {0}; 2632 2633 for (c = 0; c < pixdesc->nb_components; c++) { 2634 const AVComponentDescriptor *comp = &pixdesc->comp[c]; 2635 int s = c == 1 || c == 2 ? 0 : log2_pixels; 2636 steps[comp->plane] = comp->step << s; 2637 } 2638 for (c = 0; c < 4; c++) 2639 bits += steps[c]; 2640 2641 if(!(pixdesc->flags & AV_PIX_FMT_FLAG_BITSTREAM)) 2642 bits *= 8; 2643 2644 return bits >> log2_pixels; 2645} 2646 2647char *av_get_pix_fmt_string(char *buf, int buf_size, 2648 enum AVPixelFormat pix_fmt) 2649{ 2650 /* print header */ 2651 if (pix_fmt < 0) { 2652 snprintf (buf, buf_size, "name" " nb_components" " nb_bits"); 2653 } else { 2654 const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt]; 2655 snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name, 2656 pixdesc->nb_components, av_get_bits_per_pixel(pixdesc)); 2657 } 2658 2659 return buf; 2660} 2661 2662const AVPixFmtDescriptor *av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt) 2663{ 2664 if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB) 2665 return NULL; 2666 return &av_pix_fmt_descriptors[pix_fmt]; 2667} 2668 2669const AVPixFmtDescriptor *av_pix_fmt_desc_next(const AVPixFmtDescriptor *prev) 2670{ 2671 if (!prev) 2672 return &av_pix_fmt_descriptors[0]; 2673 while (prev - av_pix_fmt_descriptors < FF_ARRAY_ELEMS(av_pix_fmt_descriptors) - 1) { 2674 prev++; 2675 if (prev->name) 2676 return prev; 2677 } 2678 return NULL; 2679} 2680 2681enum AVPixelFormat av_pix_fmt_desc_get_id(const AVPixFmtDescriptor *desc) 2682{ 2683 if (desc < av_pix_fmt_descriptors || 2684 desc >= av_pix_fmt_descriptors + FF_ARRAY_ELEMS(av_pix_fmt_descriptors)) 2685 return AV_PIX_FMT_NONE; 2686 2687 return desc - av_pix_fmt_descriptors; 2688} 2689 2690int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, 2691 int *h_shift, int *v_shift) 2692{ 2693 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); 2694 if (!desc) 2695 return AVERROR(ENOSYS); 2696 *h_shift = desc->log2_chroma_w; 2697 *v_shift = desc->log2_chroma_h; 2698 2699 return 0; 2700} 2701 2702int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt) 2703{ 2704 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); 2705 int i, planes[4] = { 0 }, ret = 0; 2706 2707 if (!desc) 2708 return AVERROR(EINVAL); 2709 2710 for (i = 0; i < desc->nb_components; i++) 2711 planes[desc->comp[i].plane] = 1; 2712 for (i = 0; i < FF_ARRAY_ELEMS(planes); i++) 2713 ret += planes[i]; 2714 return ret; 2715} 2716 2717void ff_check_pixfmt_descriptors(void){ 2718 int i, j; 2719 2720 for (i=0; i<FF_ARRAY_ELEMS(av_pix_fmt_descriptors); i++) { 2721 const AVPixFmtDescriptor *d = &av_pix_fmt_descriptors[i]; 2722 uint8_t fill[4][8+6+3] = {{0}}; 2723 uint8_t *data[4] = {fill[0], fill[1], fill[2], fill[3]}; 2724 int linesize[4] = {0,0,0,0}; 2725 uint16_t tmp[2]; 2726 2727 if (!d->name && !d->nb_components && !d->log2_chroma_w && !d->log2_chroma_h && !d->flags) 2728 continue; 2729// av_log(NULL, AV_LOG_DEBUG, "Checking: %s\n", d->name); 2730 av_assert0(d->log2_chroma_w <= 3); 2731 av_assert0(d->log2_chroma_h <= 3); 2732 av_assert0(d->nb_components <= 4); 2733 av_assert0(d->name && d->name[0]); 2734 av_assert2(av_get_pix_fmt(d->name) == i); 2735 2736 for (j=0; j<FF_ARRAY_ELEMS(d->comp); j++) { 2737 const AVComponentDescriptor *c = &d->comp[j]; 2738 if(j>=d->nb_components) { 2739 av_assert0(!c->plane && !c->step && !c->offset && !c->shift && !c->depth); 2740 continue; 2741 } 2742 if (d->flags & AV_PIX_FMT_FLAG_BITSTREAM) { 2743 av_assert0(c->step >= c->depth); 2744 } else { 2745 av_assert0(8*c->step >= c->depth); 2746 } 2747 if (d->flags & AV_PIX_FMT_FLAG_BAYER) 2748 continue; 2749 av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0); 2750 av_assert0(tmp[0] == 0 && tmp[1] == 0); 2751 tmp[0] = tmp[1] = (1ULL << c->depth) - 1; 2752 av_write_image_line(tmp, data, linesize, d, 0, 0, j, 2); 2753 } 2754 } 2755} 2756 2757 2758enum AVPixelFormat av_pix_fmt_swap_endianness(enum AVPixelFormat pix_fmt) 2759{ 2760 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); 2761 char name[16]; 2762 int i; 2763 2764 if (!desc || strlen(desc->name) < 2) 2765 return AV_PIX_FMT_NONE; 2766 av_strlcpy(name, desc->name, sizeof(name)); 2767 i = strlen(name) - 2; 2768 if (strcmp(name + i, "be") && strcmp(name + i, "le")) 2769 return AV_PIX_FMT_NONE; 2770 2771 name[i] ^= 'b' ^ 'l'; 2772 2773 return get_pix_fmt_internal(name); 2774} 2775 2776#define FF_COLOR_NA -1 2777#define FF_COLOR_RGB 0 /**< RGB color space */ 2778#define FF_COLOR_GRAY 1 /**< gray color space */ 2779#define FF_COLOR_YUV 2 /**< YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */ 2780#define FF_COLOR_YUV_JPEG 3 /**< YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */ 2781#define FF_COLOR_XYZ 4 2782 2783#define pixdesc_has_alpha(pixdesc) \ 2784 ((pixdesc)->flags & AV_PIX_FMT_FLAG_ALPHA) 2785 2786 2787static int get_color_type(const AVPixFmtDescriptor *desc) { 2788 if (desc->flags & AV_PIX_FMT_FLAG_PAL) 2789 return FF_COLOR_RGB; 2790 2791 if(desc->nb_components == 1 || desc->nb_components == 2) 2792 return FF_COLOR_GRAY; 2793 2794 if (desc->name) { 2795 if (av_strstart(desc->name, "yuvj", NULL)) 2796 return FF_COLOR_YUV_JPEG; 2797 2798 if (av_strstart(desc->name, "xyz", NULL)) 2799 return FF_COLOR_XYZ; 2800 } 2801 2802 if(desc->flags & AV_PIX_FMT_FLAG_RGB) 2803 return FF_COLOR_RGB; 2804 2805 if(desc->nb_components == 0) 2806 return FF_COLOR_NA; 2807 2808 return FF_COLOR_YUV; 2809} 2810 2811static int get_pix_fmt_depth(int *min, int *max, enum AVPixelFormat pix_fmt) 2812{ 2813 const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); 2814 int i; 2815 2816 if (!desc || !desc->nb_components) { 2817 *min = *max = 0; 2818 return AVERROR(EINVAL); 2819 } 2820 2821 *min = INT_MAX, *max = -INT_MAX; 2822 for (i = 0; i < desc->nb_components; i++) { 2823 *min = FFMIN(desc->comp[i].depth, *min); 2824 *max = FFMAX(desc->comp[i].depth, *max); 2825 } 2826 return 0; 2827} 2828 2829static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt, 2830 enum AVPixelFormat src_pix_fmt, 2831 unsigned *lossp, unsigned consider) 2832{ 2833 const AVPixFmtDescriptor *src_desc = av_pix_fmt_desc_get(src_pix_fmt); 2834 const AVPixFmtDescriptor *dst_desc = av_pix_fmt_desc_get(dst_pix_fmt); 2835 int src_color, dst_color; 2836 int src_min_depth, src_max_depth, dst_min_depth, dst_max_depth; 2837 int ret, loss, i, nb_components; 2838 int score = INT_MAX - 1; 2839 2840 if (!src_desc || !dst_desc) 2841 return -4; 2842 2843 if ((src_desc->flags & AV_PIX_FMT_FLAG_HWACCEL) || 2844 (dst_desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { 2845 if (dst_pix_fmt == src_pix_fmt) 2846 return -1; 2847 else 2848 return -2; 2849 } 2850 2851 /* compute loss */ 2852 *lossp = loss = 0; 2853 2854 if (dst_pix_fmt == src_pix_fmt) 2855 return INT_MAX; 2856 2857 if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0) 2858 return -3; 2859 if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0) 2860 return -3; 2861 2862 src_color = get_color_type(src_desc); 2863 dst_color = get_color_type(dst_desc); 2864 if (dst_pix_fmt == AV_PIX_FMT_PAL8) 2865 nb_components = FFMIN(src_desc->nb_components, 4); 2866 else 2867 nb_components = FFMIN(src_desc->nb_components, dst_desc->nb_components); 2868 2869 for (i = 0; i < nb_components; i++) { 2870 int depth_minus1 = (dst_pix_fmt == AV_PIX_FMT_PAL8) ? 7/nb_components : (dst_desc->comp[i].depth - 1); 2871 if (src_desc->comp[i].depth - 1 > depth_minus1 && (consider & FF_LOSS_DEPTH)) { 2872 loss |= FF_LOSS_DEPTH; 2873 score -= 65536 >> depth_minus1; 2874 } 2875 } 2876 2877 if (consider & FF_LOSS_RESOLUTION) { 2878 if (dst_desc->log2_chroma_w > src_desc->log2_chroma_w) { 2879 loss |= FF_LOSS_RESOLUTION; 2880 score -= 256 << dst_desc->log2_chroma_w; 2881 } 2882 if (dst_desc->log2_chroma_h > src_desc->log2_chroma_h) { 2883 loss |= FF_LOSS_RESOLUTION; 2884 score -= 256 << dst_desc->log2_chroma_h; 2885 } 2886 // don't favor 422 over 420 if downsampling is needed, because 420 has much better support on the decoder side 2887 if (dst_desc->log2_chroma_w == 1 && src_desc->log2_chroma_w == 0 && 2888 dst_desc->log2_chroma_h == 1 && src_desc->log2_chroma_h == 0 ) { 2889 score += 512; 2890 } 2891 } 2892 2893 if(consider & FF_LOSS_COLORSPACE) 2894 switch(dst_color) { 2895 case FF_COLOR_RGB: 2896 if (src_color != FF_COLOR_RGB && 2897 src_color != FF_COLOR_GRAY) 2898 loss |= FF_LOSS_COLORSPACE; 2899 break; 2900 case FF_COLOR_GRAY: 2901 if (src_color != FF_COLOR_GRAY) 2902 loss |= FF_LOSS_COLORSPACE; 2903 break; 2904 case FF_COLOR_YUV: 2905 if (src_color != FF_COLOR_YUV) 2906 loss |= FF_LOSS_COLORSPACE; 2907 break; 2908 case FF_COLOR_YUV_JPEG: 2909 if (src_color != FF_COLOR_YUV_JPEG && 2910 src_color != FF_COLOR_YUV && 2911 src_color != FF_COLOR_GRAY) 2912 loss |= FF_LOSS_COLORSPACE; 2913 break; 2914 default: 2915 /* fail safe test */ 2916 if (src_color != dst_color) 2917 loss |= FF_LOSS_COLORSPACE; 2918 break; 2919 } 2920 if(loss & FF_LOSS_COLORSPACE) 2921 score -= (nb_components * 65536) >> FFMIN(dst_desc->comp[0].depth - 1, src_desc->comp[0].depth - 1); 2922 2923 if (dst_color == FF_COLOR_GRAY && 2924 src_color != FF_COLOR_GRAY && (consider & FF_LOSS_CHROMA)) { 2925 loss |= FF_LOSS_CHROMA; 2926 score -= 2 * 65536; 2927 } 2928 if (!pixdesc_has_alpha(dst_desc) && (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))) { 2929 loss |= FF_LOSS_ALPHA; 2930 score -= 65536; 2931 } 2932 if (dst_pix_fmt == AV_PIX_FMT_PAL8 && (consider & FF_LOSS_COLORQUANT) && 2933 (src_pix_fmt != AV_PIX_FMT_PAL8 && (src_color != FF_COLOR_GRAY || (pixdesc_has_alpha(src_desc) && (consider & FF_LOSS_ALPHA))))) { 2934 loss |= FF_LOSS_COLORQUANT; 2935 score -= 65536; 2936 } 2937 2938 *lossp = loss; 2939 return score; 2940} 2941 2942int av_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, 2943 enum AVPixelFormat src_pix_fmt, 2944 int has_alpha) 2945{ 2946 int loss; 2947 int ret = get_pix_fmt_score(dst_pix_fmt, src_pix_fmt, &loss, has_alpha ? ~0 : ~FF_LOSS_ALPHA); 2948 if (ret < 0) 2949 return ret; 2950 return loss; 2951} 2952 2953enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2, 2954 enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr) 2955{ 2956 enum AVPixelFormat dst_pix_fmt; 2957 int loss1, loss2, loss_mask; 2958 const AVPixFmtDescriptor *desc1 = av_pix_fmt_desc_get(dst_pix_fmt1); 2959 const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2); 2960 int score1, score2; 2961 2962 if (!desc1) { 2963 dst_pix_fmt = dst_pix_fmt2; 2964 } else if (!desc2) { 2965 dst_pix_fmt = dst_pix_fmt1; 2966 } else { 2967 loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */ 2968 if(!has_alpha) 2969 loss_mask &= ~FF_LOSS_ALPHA; 2970 2971 score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask); 2972 score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask); 2973 2974 if (score1 == score2) { 2975 if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) { 2976 dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1; 2977 } else { 2978 dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1; 2979 } 2980 } else { 2981 dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1; 2982 } 2983 } 2984 2985 if (loss_ptr) 2986 *loss_ptr = av_get_pix_fmt_loss(dst_pix_fmt, src_pix_fmt, has_alpha); 2987 return dst_pix_fmt; 2988} 2989 2990const char *av_color_range_name(enum AVColorRange range) 2991{ 2992 return (unsigned) range < AVCOL_RANGE_NB ? 2993 color_range_names[range] : NULL; 2994} 2995 2996int av_color_range_from_name(const char *name) 2997{ 2998 int i; 2999 3000 for (i = 0; i < FF_ARRAY_ELEMS(color_range_names); i++) { 3001 if (av_strstart(name, color_range_names[i], NULL)) 3002 return i; 3003 } 3004 3005 return AVERROR(EINVAL); 3006} 3007 3008const char *av_color_primaries_name(enum AVColorPrimaries primaries) 3009{ 3010 return (unsigned) primaries < AVCOL_PRI_NB ? 3011 color_primaries_names[primaries] : NULL; 3012} 3013 3014int av_color_primaries_from_name(const char *name) 3015{ 3016 int i; 3017 3018 for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names); i++) { 3019 if (!color_primaries_names[i]) 3020 continue; 3021 3022 if (av_strstart(name, color_primaries_names[i], NULL)) 3023 return i; 3024 } 3025 3026 return AVERROR(EINVAL); 3027} 3028 3029const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer) 3030{ 3031 return (unsigned) transfer < AVCOL_TRC_NB ? 3032 color_transfer_names[transfer] : NULL; 3033} 3034 3035int av_color_transfer_from_name(const char *name) 3036{ 3037 int i; 3038 3039 for (i = 0; i < FF_ARRAY_ELEMS(color_transfer_names); i++) { 3040 if (!color_transfer_names[i]) 3041 continue; 3042 3043 if (av_strstart(name, color_transfer_names[i], NULL)) 3044 return i; 3045 } 3046 3047 return AVERROR(EINVAL); 3048} 3049 3050const char *av_color_space_name(enum AVColorSpace space) 3051{ 3052 return (unsigned) space < AVCOL_SPC_NB ? 3053 color_space_names[space] : NULL; 3054} 3055 3056int av_color_space_from_name(const char *name) 3057{ 3058 int i; 3059 3060 for (i = 0; i < FF_ARRAY_ELEMS(color_space_names); i++) { 3061 if (!color_space_names[i]) 3062 continue; 3063 3064 if (av_strstart(name, color_space_names[i], NULL)) 3065 return i; 3066 } 3067 3068 return AVERROR(EINVAL); 3069} 3070 3071const char *av_chroma_location_name(enum AVChromaLocation location) 3072{ 3073 return (unsigned) location < AVCHROMA_LOC_NB ? 3074 chroma_location_names[location] : NULL; 3075} 3076 3077int av_chroma_location_from_name(const char *name) 3078{ 3079 int i; 3080 3081 for (i = 0; i < FF_ARRAY_ELEMS(chroma_location_names); i++) { 3082 if (!chroma_location_names[i]) 3083 continue; 3084 3085 if (av_strstart(name, chroma_location_names[i], NULL)) 3086 return i; 3087 } 3088 3089 return AVERROR(EINVAL); 3090} 3091