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