00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "pixfmt.h"
00023 #include "pixdesc.h"
00024
00025 #include "intreadwrite.h"
00026
00027 void read_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4],
00028 const AVPixFmtDescriptor *desc, int x, int y, int c, int w, int read_pal_component)
00029 {
00030 AVComponentDescriptor comp= desc->comp[c];
00031 int plane= comp.plane;
00032 int depth= comp.depth_minus1+1;
00033 int mask = (1<<depth)-1;
00034 int shift= comp.shift;
00035 int step = comp.step_minus1+1;
00036 int flags= desc->flags;
00037
00038 if (flags & PIX_FMT_BITSTREAM){
00039 int skip = x*step + comp.offset_plus1-1;
00040 const uint8_t *p = data[plane] + y*linesize[plane] + (skip>>3);
00041 int shift = 8 - depth - (skip&7);
00042
00043 while(w--){
00044 int val = (*p >> shift) & mask;
00045 if(read_pal_component)
00046 val= data[1][4*val + c];
00047 shift -= step;
00048 p -= shift>>3;
00049 shift &= 7;
00050 *dst++= val;
00051 }
00052 } else {
00053 const uint8_t *p = data[plane]+ y*linesize[plane] + x*step + comp.offset_plus1-1;
00054
00055 while(w--){
00056 int val;
00057 if(flags & PIX_FMT_BE) val= AV_RB16(p);
00058 else val= AV_RL16(p);
00059 val = (val>>shift) & mask;
00060 if(read_pal_component)
00061 val= data[1][4*val + c];
00062 p+= step;
00063 *dst++= val;
00064 }
00065 }
00066 }
00067
00068 void write_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
00069 const AVPixFmtDescriptor *desc, int x, int y, int c, int w)
00070 {
00071 AVComponentDescriptor comp = desc->comp[c];
00072 int plane = comp.plane;
00073 int depth = comp.depth_minus1+1;
00074 int step = comp.step_minus1+1;
00075 int flags = desc->flags;
00076
00077 if (flags & PIX_FMT_BITSTREAM) {
00078 int skip = x*step + comp.offset_plus1-1;
00079 uint8_t *p = data[plane] + y*linesize[plane] + (skip>>3);
00080 int shift = 8 - depth - (skip&7);
00081
00082 while (w--) {
00083 *p |= *src++ << shift;
00084 shift -= step;
00085 p -= shift>>3;
00086 shift &= 7;
00087 }
00088 } else {
00089 int shift = comp.shift;
00090 uint8_t *p = data[plane]+ y*linesize[plane] + x*step + comp.offset_plus1-1;
00091
00092 while (w--) {
00093 if (flags & PIX_FMT_BE) {
00094 uint16_t val = AV_RB16(p) | (*src++<<shift);
00095 AV_WB16(p, val);
00096 } else {
00097 uint16_t val = AV_RL16(p) | (*src++<<shift);
00098 AV_WL16(p, val);
00099 }
00100 p+= step;
00101 }
00102 }
00103 }
00104
00105 const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
00106 [PIX_FMT_YUV420P] = {
00107 .name = "yuv420p",
00108 .nb_components= 3,
00109 .log2_chroma_w= 1,
00110 .log2_chroma_h= 1,
00111 .comp = {
00112 {0,0,1,0,7},
00113 {1,0,1,0,7},
00114 {2,0,1,0,7},
00115 },
00116 },
00117 [PIX_FMT_YUYV422] = {
00118 .name = "yuyv422",
00119 .nb_components= 3,
00120 .log2_chroma_w= 1,
00121 .log2_chroma_h= 0,
00122 .comp = {
00123 {0,1,1,0,7},
00124 {0,3,2,0,7},
00125 {0,3,4,0,7},
00126 },
00127 },
00128 [PIX_FMT_RGB24] = {
00129 .name = "rgb24",
00130 .nb_components= 3,
00131 .log2_chroma_w= 0,
00132 .log2_chroma_h= 0,
00133 .comp = {
00134 {0,2,1,0,7},
00135 {0,2,2,0,7},
00136 {0,2,3,0,7},
00137 },
00138 },
00139 [PIX_FMT_BGR24] = {
00140 .name = "bgr24",
00141 .nb_components= 3,
00142 .log2_chroma_w= 0,
00143 .log2_chroma_h= 0,
00144 .comp = {
00145 {0,2,1,0,7},
00146 {0,2,2,0,7},
00147 {0,2,3,0,7},
00148 },
00149 },
00150 [PIX_FMT_YUV422P] = {
00151 .name = "yuv422p",
00152 .nb_components= 3,
00153 .log2_chroma_w= 1,
00154 .log2_chroma_h= 0,
00155 .comp = {
00156 {0,0,1,0,7},
00157 {1,0,1,0,7},
00158 {2,0,1,0,7},
00159 },
00160 },
00161 [PIX_FMT_YUV444P] = {
00162 .name = "yuv444p",
00163 .nb_components= 3,
00164 .log2_chroma_w= 0,
00165 .log2_chroma_h= 0,
00166 .comp = {
00167 {0,0,1,0,7},
00168 {1,0,1,0,7},
00169 {2,0,1,0,7},
00170 },
00171 },
00172 [PIX_FMT_YUV410P] = {
00173 .name = "yuv410p",
00174 .nb_components= 3,
00175 .log2_chroma_w= 2,
00176 .log2_chroma_h= 2,
00177 .comp = {
00178 {0,0,1,0,7},
00179 {1,0,1,0,7},
00180 {2,0,1,0,7},
00181 },
00182 },
00183 [PIX_FMT_YUV411P] = {
00184 .name = "yuv411p",
00185 .nb_components= 3,
00186 .log2_chroma_w= 2,
00187 .log2_chroma_h= 0,
00188 .comp = {
00189 {0,0,1,0,7},
00190 {1,0,1,0,7},
00191 {2,0,1,0,7},
00192 },
00193 },
00194 [PIX_FMT_GRAY8] = {
00195 .name = "gray",
00196 .nb_components= 1,
00197 .log2_chroma_w= 0,
00198 .log2_chroma_h= 0,
00199 .comp = {
00200 {0,0,1,0,7},
00201 },
00202 .flags = PIX_FMT_PAL,
00203 },
00204 [PIX_FMT_MONOWHITE] = {
00205 .name = "monow",
00206 .nb_components= 1,
00207 .log2_chroma_w= 0,
00208 .log2_chroma_h= 0,
00209 .comp = {
00210 {0,0,1,0,0},
00211 },
00212 .flags = PIX_FMT_BITSTREAM,
00213 },
00214 [PIX_FMT_MONOBLACK] = {
00215 .name = "monob",
00216 .nb_components= 1,
00217 .log2_chroma_w= 0,
00218 .log2_chroma_h= 0,
00219 .comp = {
00220 {0,0,1,7,0},
00221 },
00222 .flags = PIX_FMT_BITSTREAM,
00223 },
00224 [PIX_FMT_PAL8] = {
00225 .name = "pal8",
00226 .nb_components= 1,
00227 .log2_chroma_w= 0,
00228 .log2_chroma_h= 0,
00229 .comp = {
00230 {0,0,1,0,7},
00231 },
00232 .flags = PIX_FMT_PAL,
00233 },
00234 [PIX_FMT_YUVJ420P] = {
00235 .name = "yuvj420p",
00236 .nb_components= 3,
00237 .log2_chroma_w= 1,
00238 .log2_chroma_h= 1,
00239 .comp = {
00240 {0,0,1,0,7},
00241 {1,0,1,0,7},
00242 {2,0,1,0,7},
00243 },
00244 },
00245 [PIX_FMT_YUVJ422P] = {
00246 .name = "yuvj422p",
00247 .nb_components= 3,
00248 .log2_chroma_w= 1,
00249 .log2_chroma_h= 0,
00250 .comp = {
00251 {0,0,1,0,7},
00252 {1,0,1,0,7},
00253 {2,0,1,0,7},
00254 },
00255 },
00256 [PIX_FMT_YUVJ444P] = {
00257 .name = "yuvj444p",
00258 .nb_components= 3,
00259 .log2_chroma_w= 0,
00260 .log2_chroma_h= 0,
00261 .comp = {
00262 {0,0,1,0,7},
00263 {1,0,1,0,7},
00264 {2,0,1,0,7},
00265 },
00266 },
00267 [PIX_FMT_XVMC_MPEG2_MC] = {
00268 .name = "xvmcmc",
00269 .flags = PIX_FMT_HWACCEL,
00270 },
00271 [PIX_FMT_XVMC_MPEG2_IDCT] = {
00272 .name = "xvmcidct",
00273 .flags = PIX_FMT_HWACCEL,
00274 },
00275 [PIX_FMT_UYVY422] = {
00276 .name = "uyvy422",
00277 .nb_components= 3,
00278 .log2_chroma_w= 1,
00279 .log2_chroma_h= 0,
00280 .comp = {
00281 {0,1,2,0,7},
00282 {0,3,1,0,7},
00283 {0,3,3,0,7},
00284 },
00285 },
00286 [PIX_FMT_UYYVYY411] = {
00287 .name = "uyyvyy411",
00288 .nb_components= 3,
00289 .log2_chroma_w= 2,
00290 .log2_chroma_h= 0,
00291 .comp = {
00292 {0,3,2,0,7},
00293 {0,5,1,0,7},
00294 {0,5,4,0,7},
00295 },
00296 },
00297 [PIX_FMT_BGR8] = {
00298 .name = "bgr8",
00299 .nb_components= 3,
00300 .log2_chroma_w= 0,
00301 .log2_chroma_h= 0,
00302 .comp = {
00303 {0,0,1,6,1},
00304 {0,0,1,3,2},
00305 {0,0,1,0,2},
00306 },
00307 .flags = PIX_FMT_PAL,
00308 },
00309 [PIX_FMT_BGR4] = {
00310 .name = "bgr4",
00311 .nb_components= 3,
00312 .log2_chroma_w= 0,
00313 .log2_chroma_h= 0,
00314 .comp = {
00315 {0,3,1,0,0},
00316 {0,3,2,0,1},
00317 {0,3,4,0,0},
00318 },
00319 .flags = PIX_FMT_BITSTREAM,
00320 },
00321 [PIX_FMT_BGR4_BYTE] = {
00322 .name = "bgr4_byte",
00323 .nb_components= 3,
00324 .log2_chroma_w= 0,
00325 .log2_chroma_h= 0,
00326 .comp = {
00327 {0,0,1,3,0},
00328 {0,0,1,1,1},
00329 {0,0,1,0,0},
00330 },
00331 .flags = PIX_FMT_PAL,
00332 },
00333 [PIX_FMT_RGB8] = {
00334 .name = "rgb8",
00335 .nb_components= 3,
00336 .log2_chroma_w= 0,
00337 .log2_chroma_h= 0,
00338 .comp = {
00339 {0,0,1,6,1},
00340 {0,0,1,3,2},
00341 {0,0,1,0,2},
00342 },
00343 .flags = PIX_FMT_PAL,
00344 },
00345 [PIX_FMT_RGB4] = {
00346 .name = "rgb4",
00347 .nb_components= 3,
00348 .log2_chroma_w= 0,
00349 .log2_chroma_h= 0,
00350 .comp = {
00351 {0,3,1,0,0},
00352 {0,3,2,0,1},
00353 {0,3,4,0,0},
00354 },
00355 .flags = PIX_FMT_BITSTREAM,
00356 },
00357 [PIX_FMT_RGB4_BYTE] = {
00358 .name = "rgb4_byte",
00359 .nb_components= 3,
00360 .log2_chroma_w= 0,
00361 .log2_chroma_h= 0,
00362 .comp = {
00363 {0,0,1,3,0},
00364 {0,0,1,1,1},
00365 {0,0,1,0,0},
00366 },
00367 .flags = PIX_FMT_PAL,
00368 },
00369 [PIX_FMT_NV12] = {
00370 .name = "nv12",
00371 .nb_components= 3,
00372 .log2_chroma_w= 1,
00373 .log2_chroma_h= 1,
00374 .comp = {
00375 {0,0,1,0,7},
00376 {1,1,1,0,7},
00377 {1,1,2,0,7},
00378 },
00379 },
00380 [PIX_FMT_NV21] = {
00381 .name = "nv21",
00382 .nb_components= 3,
00383 .log2_chroma_w= 1,
00384 .log2_chroma_h= 1,
00385 .comp = {
00386 {0,0,1,0,7},
00387 {1,1,1,0,7},
00388 {1,1,2,0,7},
00389 },
00390 },
00391 [PIX_FMT_ARGB] = {
00392 .name = "argb",
00393 .nb_components= 4,
00394 .log2_chroma_w= 0,
00395 .log2_chroma_h= 0,
00396 .comp = {
00397 {0,3,1,0,7},
00398 {0,3,2,0,7},
00399 {0,3,3,0,7},
00400 {0,3,4,0,7},
00401 },
00402 },
00403 [PIX_FMT_RGBA] = {
00404 .name = "rgba",
00405 .nb_components= 4,
00406 .log2_chroma_w= 0,
00407 .log2_chroma_h= 0,
00408 .comp = {
00409 {0,3,1,0,7},
00410 {0,3,2,0,7},
00411 {0,3,3,0,7},
00412 {0,3,4,0,7},
00413 },
00414 },
00415 [PIX_FMT_ABGR] = {
00416 .name = "abgr",
00417 .nb_components= 4,
00418 .log2_chroma_w= 0,
00419 .log2_chroma_h= 0,
00420 .comp = {
00421 {0,3,1,0,7},
00422 {0,3,2,0,7},
00423 {0,3,3,0,7},
00424 {0,3,4,0,7},
00425 },
00426 },
00427 [PIX_FMT_BGRA] = {
00428 .name = "bgra",
00429 .nb_components= 4,
00430 .log2_chroma_w= 0,
00431 .log2_chroma_h= 0,
00432 .comp = {
00433 {0,3,1,0,7},
00434 {0,3,2,0,7},
00435 {0,3,3,0,7},
00436 {0,3,4,0,7},
00437 },
00438 },
00439 [PIX_FMT_GRAY16BE] = {
00440 .name = "gray16be",
00441 .nb_components= 1,
00442 .log2_chroma_w= 0,
00443 .log2_chroma_h= 0,
00444 .comp = {
00445 {0,1,1,0,15},
00446 },
00447 .flags = PIX_FMT_BE,
00448 },
00449 [PIX_FMT_GRAY16LE] = {
00450 .name = "gray16le",
00451 .nb_components= 1,
00452 .log2_chroma_w= 0,
00453 .log2_chroma_h= 0,
00454 .comp = {
00455 {0,1,1,0,15},
00456 },
00457 },
00458 [PIX_FMT_YUV440P] = {
00459 .name = "yuv440p",
00460 .nb_components= 3,
00461 .log2_chroma_w= 0,
00462 .log2_chroma_h= 1,
00463 .comp = {
00464 {0,0,1,0,7},
00465 {1,0,1,0,7},
00466 {2,0,1,0,7},
00467 },
00468 },
00469 [PIX_FMT_YUVJ440P] = {
00470 .name = "yuvj440p",
00471 .nb_components= 3,
00472 .log2_chroma_w= 0,
00473 .log2_chroma_h= 1,
00474 .comp = {
00475 {0,0,1,0,7},
00476 {1,0,1,0,7},
00477 {2,0,1,0,7},
00478 },
00479 },
00480 [PIX_FMT_YUVA420P] = {
00481 .name = "yuva420p",
00482 .nb_components= 4,
00483 .log2_chroma_w= 1,
00484 .log2_chroma_h= 1,
00485 .comp = {
00486 {0,0,1,0,7},
00487 {1,0,1,0,7},
00488 {2,0,1,0,7},
00489 {3,0,1,0,7},
00490 },
00491 },
00492 [PIX_FMT_VDPAU_H264] = {
00493 .name = "vdpau_h264",
00494 .log2_chroma_w = 1,
00495 .log2_chroma_h = 1,
00496 .flags = PIX_FMT_HWACCEL,
00497 },
00498 [PIX_FMT_VDPAU_MPEG1] = {
00499 .name = "vdpau_mpeg1",
00500 .log2_chroma_w = 1,
00501 .log2_chroma_h = 1,
00502 .flags = PIX_FMT_HWACCEL,
00503 },
00504 [PIX_FMT_VDPAU_MPEG2] = {
00505 .name = "vdpau_mpeg2",
00506 .log2_chroma_w = 1,
00507 .log2_chroma_h = 1,
00508 .flags = PIX_FMT_HWACCEL,
00509 },
00510 [PIX_FMT_VDPAU_WMV3] = {
00511 .name = "vdpau_wmv3",
00512 .log2_chroma_w = 1,
00513 .log2_chroma_h = 1,
00514 .flags = PIX_FMT_HWACCEL,
00515 },
00516 [PIX_FMT_VDPAU_VC1] = {
00517 .name = "vdpau_vc1",
00518 .log2_chroma_w = 1,
00519 .log2_chroma_h = 1,
00520 .flags = PIX_FMT_HWACCEL,
00521 },
00522 [PIX_FMT_VDPAU_MPEG4] = {
00523 .name = "vdpau_mpeg4",
00524 .log2_chroma_w = 1,
00525 .log2_chroma_h = 1,
00526 .flags = PIX_FMT_HWACCEL,
00527 },
00528 [PIX_FMT_RGB48BE] = {
00529 .name = "rgb48be",
00530 .nb_components= 3,
00531 .log2_chroma_w= 0,
00532 .log2_chroma_h= 0,
00533 .comp = {
00534 {0,5,1,0,15},
00535 {0,5,3,0,15},
00536 {0,5,5,0,15},
00537 },
00538 .flags = PIX_FMT_BE,
00539 },
00540 [PIX_FMT_RGB48LE] = {
00541 .name = "rgb48le",
00542 .nb_components= 3,
00543 .log2_chroma_w= 0,
00544 .log2_chroma_h= 0,
00545 .comp = {
00546 {0,5,1,0,15},
00547 {0,5,3,0,15},
00548 {0,5,5,0,15},
00549 },
00550 },
00551 [PIX_FMT_RGB565BE] = {
00552 .name = "rgb565be",
00553 .nb_components= 3,
00554 .log2_chroma_w= 0,
00555 .log2_chroma_h= 0,
00556 .comp = {
00557 {0,1,0,3,4},
00558 {0,1,1,5,5},
00559 {0,1,1,0,4},
00560 },
00561 .flags = PIX_FMT_BE,
00562 },
00563 [PIX_FMT_RGB565LE] = {
00564 .name = "rgb565le",
00565 .nb_components= 3,
00566 .log2_chroma_w= 0,
00567 .log2_chroma_h= 0,
00568 .comp = {
00569 {0,1,2,3,4},
00570 {0,1,1,5,5},
00571 {0,1,1,0,4},
00572 },
00573 },
00574 [PIX_FMT_RGB555BE] = {
00575 .name = "rgb555be",
00576 .nb_components= 3,
00577 .log2_chroma_w= 0,
00578 .log2_chroma_h= 0,
00579 .comp = {
00580 {0,1,0,2,4},
00581 {0,1,1,5,4},
00582 {0,1,1,0,4},
00583 },
00584 .flags = PIX_FMT_BE,
00585 },
00586 [PIX_FMT_RGB555LE] = {
00587 .name = "rgb555le",
00588 .nb_components= 3,
00589 .log2_chroma_w= 0,
00590 .log2_chroma_h= 0,
00591 .comp = {
00592 {0,1,2,2,4},
00593 {0,1,1,5,4},
00594 {0,1,1,0,4},
00595 },
00596 },
00597 [PIX_FMT_RGB444BE] = {
00598 .name = "rgb444be",
00599 .nb_components= 3,
00600 .log2_chroma_w= 0,
00601 .log2_chroma_h= 0,
00602 .comp = {
00603 {0,1,0,0,3},
00604 {0,1,1,4,3},
00605 {0,1,1,0,3},
00606 },
00607 .flags = PIX_FMT_BE,
00608 },
00609 [PIX_FMT_RGB444LE] = {
00610 .name = "rgb444le",
00611 .nb_components= 3,
00612 .log2_chroma_w= 0,
00613 .log2_chroma_h= 0,
00614 .comp = {
00615 {0,1,2,0,3},
00616 {0,1,1,4,3},
00617 {0,1,1,0,3},
00618 },
00619 },
00620 [PIX_FMT_BGR565BE] = {
00621 .name = "bgr565be",
00622 .nb_components= 3,
00623 .log2_chroma_w= 0,
00624 .log2_chroma_h= 0,
00625 .comp = {
00626 {0,1,0,3,4},
00627 {0,1,1,5,5},
00628 {0,1,1,0,4},
00629 },
00630 .flags = PIX_FMT_BE,
00631 },
00632 [PIX_FMT_BGR565LE] = {
00633 .name = "bgr565le",
00634 .nb_components= 3,
00635 .log2_chroma_w= 0,
00636 .log2_chroma_h= 0,
00637 .comp = {
00638 {0,1,2,3,4},
00639 {0,1,1,5,5},
00640 {0,1,1,0,4},
00641 },
00642 },
00643 [PIX_FMT_BGR555BE] = {
00644 .name = "bgr555be",
00645 .nb_components= 3,
00646 .log2_chroma_w= 0,
00647 .log2_chroma_h= 0,
00648 .comp = {
00649 {0,1,0,2,4},
00650 {0,1,1,5,4},
00651 {0,1,1,0,4},
00652 },
00653 .flags = PIX_FMT_BE,
00654 },
00655 [PIX_FMT_BGR555LE] = {
00656 .name = "bgr555le",
00657 .nb_components= 3,
00658 .log2_chroma_w= 0,
00659 .log2_chroma_h= 0,
00660 .comp = {
00661 {0,1,2,2,4},
00662 {0,1,1,5,4},
00663 {0,1,1,0,4},
00664 },
00665 },
00666 [PIX_FMT_BGR444BE] = {
00667 .name = "bgr444be",
00668 .nb_components= 3,
00669 .log2_chroma_w= 0,
00670 .log2_chroma_h= 0,
00671 .comp = {
00672 {0,1,0,0,3},
00673 {0,1,1,4,3},
00674 {0,1,1,0,3},
00675 },
00676 .flags = PIX_FMT_BE,
00677 },
00678 [PIX_FMT_BGR444LE] = {
00679 .name = "bgr444le",
00680 .nb_components= 3,
00681 .log2_chroma_w= 0,
00682 .log2_chroma_h= 0,
00683 .comp = {
00684 {0,1,2,0,3},
00685 {0,1,1,4,3},
00686 {0,1,1,0,3},
00687 },
00688 },
00689 [PIX_FMT_VAAPI_MOCO] = {
00690 .name = "vaapi_moco",
00691 .log2_chroma_w = 1,
00692 .log2_chroma_h = 1,
00693 .flags = PIX_FMT_HWACCEL,
00694 },
00695 [PIX_FMT_VAAPI_IDCT] = {
00696 .name = "vaapi_idct",
00697 .log2_chroma_w = 1,
00698 .log2_chroma_h = 1,
00699 .flags = PIX_FMT_HWACCEL,
00700 },
00701 [PIX_FMT_VAAPI_VLD] = {
00702 .name = "vaapi_vld",
00703 .log2_chroma_w = 1,
00704 .log2_chroma_h = 1,
00705 .flags = PIX_FMT_HWACCEL,
00706 },
00707 [PIX_FMT_YUV420P16LE] = {
00708 .name = "yuv420p16le",
00709 .nb_components= 3,
00710 .log2_chroma_w= 1,
00711 .log2_chroma_h= 1,
00712 .comp = {
00713 {0,1,1,0,15},
00714 {1,1,1,0,15},
00715 {2,1,1,0,15},
00716 },
00717 },
00718 [PIX_FMT_YUV420P16BE] = {
00719 .name = "yuv420p16be",
00720 .nb_components= 3,
00721 .log2_chroma_w= 1,
00722 .log2_chroma_h= 1,
00723 .comp = {
00724 {0,1,1,0,15},
00725 {1,1,1,0,15},
00726 {2,1,1,0,15},
00727 },
00728 .flags = PIX_FMT_BE,
00729 },
00730 [PIX_FMT_YUV422P16LE] = {
00731 .name = "yuv422p16le",
00732 .nb_components= 3,
00733 .log2_chroma_w= 1,
00734 .log2_chroma_h= 0,
00735 .comp = {
00736 {0,1,1,0,15},
00737 {1,1,1,0,15},
00738 {2,1,1,0,15},
00739 },
00740 },
00741 [PIX_FMT_YUV422P16BE] = {
00742 .name = "yuv422p16be",
00743 .nb_components= 3,
00744 .log2_chroma_w= 1,
00745 .log2_chroma_h= 0,
00746 .comp = {
00747 {0,1,1,0,15},
00748 {1,1,1,0,15},
00749 {2,1,1,0,15},
00750 },
00751 .flags = PIX_FMT_BE,
00752 },
00753 [PIX_FMT_YUV444P16LE] = {
00754 .name = "yuv444p16le",
00755 .nb_components= 3,
00756 .log2_chroma_w= 0,
00757 .log2_chroma_h= 0,
00758 .comp = {
00759 {0,1,1,0,15},
00760 {1,1,1,0,15},
00761 {2,1,1,0,15},
00762 },
00763 },
00764 [PIX_FMT_YUV444P16BE] = {
00765 .name = "yuv444p16be",
00766 .nb_components= 3,
00767 .log2_chroma_w= 0,
00768 .log2_chroma_h= 0,
00769 .comp = {
00770 {0,1,1,0,15},
00771 {1,1,1,0,15},
00772 {2,1,1,0,15},
00773 },
00774 .flags = PIX_FMT_BE,
00775 },
00776 [PIX_FMT_DXVA2_VLD] = {
00777 .name = "dxva2_vld",
00778 .log2_chroma_w = 1,
00779 .log2_chroma_h = 1,
00780 .flags = PIX_FMT_HWACCEL,
00781 },
00782 [PIX_FMT_Y400A] = {
00783 .name = "y400a",
00784 .nb_components= 2,
00785 .comp = {
00786 {0,1,1,0,7},
00787 {0,1,2,0,7},
00788 },
00789 },
00790 };
00791
00792 static enum PixelFormat get_pix_fmt_internal(const char *name)
00793 {
00794 enum PixelFormat pix_fmt;
00795
00796 for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
00797 if (av_pix_fmt_descriptors[pix_fmt].name &&
00798 !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
00799 return pix_fmt;
00800
00801 return PIX_FMT_NONE;
00802 }
00803
00804 #if HAVE_BIGENDIAN
00805 # define X_NE(be, le) be
00806 #else
00807 # define X_NE(be, le) le
00808 #endif
00809
00810 enum PixelFormat av_get_pix_fmt(const char *name)
00811 {
00812 enum PixelFormat pix_fmt;
00813
00814 if (!strcmp(name, "rgb32"))
00815 name = X_NE("argb", "bgra");
00816 else if (!strcmp(name, "bgr32"))
00817 name = X_NE("abgr", "rgba");
00818
00819 pix_fmt = get_pix_fmt_internal(name);
00820 if (pix_fmt == PIX_FMT_NONE) {
00821 char name2[32];
00822
00823 snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
00824 pix_fmt = get_pix_fmt_internal(name2);
00825 }
00826 return pix_fmt;
00827 }
00828
00829 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
00830 {
00831 int c, bits = 0;
00832 int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
00833
00834 for (c = 0; c < pixdesc->nb_components; c++) {
00835 int s = c==1 || c==2 ? 0 : log2_pixels;
00836 bits += (pixdesc->comp[c].depth_minus1+1) << s;
00837 }
00838
00839 return bits >> log2_pixels;
00840 }