• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

libavutil/pixdesc.c

Go to the documentation of this file.
00001 /*
00002  * pixel format descriptor
00003  * Copyright (c) 2009 Michael Niedermayer <michaelni@gmx.at>
00004  *
00005  * This file is part of FFmpeg.
00006  *
00007  * FFmpeg is free software; you can redistribute it and/or
00008  * modify it under the terms of the GNU Lesser General Public
00009  * License as published by the Free Software Foundation; either
00010  * version 2.1 of the License, or (at your option) any later version.
00011  *
00012  * FFmpeg is distributed in the hope that it will be useful,
00013  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00014  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015  * Lesser General Public License for more details.
00016  *
00017  * You should have received a copy of the GNU Lesser General Public
00018  * License along with FFmpeg; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
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},        /* Y */
00113             {1,0,1,0,7},        /* U */
00114             {2,0,1,0,7},        /* V */
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},        /* Y */
00124             {0,3,2,0,7},        /* U */
00125             {0,3,4,0,7},        /* V */
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},        /* R */
00135             {0,2,2,0,7},        /* G */
00136             {0,2,3,0,7},        /* B */
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},        /* B */
00146             {0,2,2,0,7},        /* G */
00147             {0,2,3,0,7},        /* R */
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},        /* Y */
00157             {1,0,1,0,7},        /* U */
00158             {2,0,1,0,7},        /* V */
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},        /* Y */
00168             {1,0,1,0,7},        /* U */
00169             {2,0,1,0,7},        /* V */
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},        /* Y */
00179             {1,0,1,0,7},        /* U */
00180             {2,0,1,0,7},        /* V */
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},        /* Y */
00190             {1,0,1,0,7},        /* U */
00191             {2,0,1,0,7},        /* V */
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},        /* Y */
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},        /* Y */
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},        /* Y */
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},        /* Y */
00241             {1,0,1,0,7},        /* U */
00242             {2,0,1,0,7},        /* V */
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},        /* Y */
00252             {1,0,1,0,7},        /* U */
00253             {2,0,1,0,7},        /* V */
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},        /* Y */
00263             {1,0,1,0,7},        /* U */
00264             {2,0,1,0,7},        /* V */
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},        /* Y */
00282             {0,3,1,0,7},        /* U */
00283             {0,3,3,0,7},        /* V */
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},        /* Y */
00293             {0,5,1,0,7},        /* U */
00294             {0,5,4,0,7},        /* V */
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},        /* B */
00304             {0,0,1,3,2},        /* G */
00305             {0,0,1,0,2},        /* R */
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},        /* B */
00316             {0,3,2,0,1},        /* G */
00317             {0,3,4,0,0},        /* R */
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},        /* B */
00328             {0,0,1,1,1},        /* G */
00329             {0,0,1,0,0},        /* R */
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},        /* R */
00340             {0,0,1,3,2},        /* G */
00341             {0,0,1,0,2},        /* B */
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},       /* R */
00352             {0,3,2,0,1},       /* G */
00353             {0,3,4,0,0},       /* B */
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},        /* R */
00364             {0,0,1,1,1},        /* G */
00365             {0,0,1,0,0},        /* B */
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},        /* Y */
00376             {1,1,1,0,7},        /* U */
00377             {1,1,2,0,7},        /* V */
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},        /* Y */
00387             {1,1,1,0,7},        /* V */
00388             {1,1,2,0,7},        /* U */
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},        /* A */
00398             {0,3,2,0,7},        /* R */
00399             {0,3,3,0,7},        /* G */
00400             {0,3,4,0,7},        /* B */
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},        /* R */
00410             {0,3,2,0,7},        /* G */
00411             {0,3,3,0,7},        /* B */
00412             {0,3,4,0,7},        /* A */
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},        /* A */
00422             {0,3,2,0,7},        /* B */
00423             {0,3,3,0,7},        /* G */
00424             {0,3,4,0,7},        /* R */
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},        /* B */
00434             {0,3,2,0,7},        /* G */
00435             {0,3,3,0,7},        /* R */
00436             {0,3,4,0,7},        /* A */
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},       /* Y */
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},       /* Y */
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},        /* Y */
00465             {1,0,1,0,7},        /* U */
00466             {2,0,1,0,7},        /* V */
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},        /* Y */
00476             {1,0,1,0,7},        /* U */
00477             {2,0,1,0,7},        /* V */
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},        /* Y */
00487             {1,0,1,0,7},        /* U */
00488             {2,0,1,0,7},        /* V */
00489             {3,0,1,0,7},        /* A */
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},       /* R */
00535             {0,5,3,0,15},       /* G */
00536             {0,5,5,0,15},       /* B */
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},       /* R */
00547             {0,5,3,0,15},       /* G */
00548             {0,5,5,0,15},       /* B */
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},        /* R */
00558             {0,1,1,5,5},        /* G */
00559             {0,1,1,0,4},        /* B */
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},        /* R */
00570             {0,1,1,5,5},        /* G */
00571             {0,1,1,0,4},        /* B */
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},        /* R */
00581             {0,1,1,5,4},        /* G */
00582             {0,1,1,0,4},        /* B */
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},        /* R */
00593             {0,1,1,5,4},        /* G */
00594             {0,1,1,0,4},        /* B */
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},        /* R */
00604             {0,1,1,4,3},        /* G */
00605             {0,1,1,0,3},        /* B */
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},        /* R */
00616             {0,1,1,4,3},        /* G */
00617             {0,1,1,0,3},        /* B */
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},        /* B */
00627             {0,1,1,5,5},        /* G */
00628             {0,1,1,0,4},        /* R */
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},        /* B */
00639             {0,1,1,5,5},        /* G */
00640             {0,1,1,0,4},        /* R */
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},       /* B */
00650             {0,1,1,5,4},       /* G */
00651             {0,1,1,0,4},       /* R */
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},        /* B */
00662             {0,1,1,5,4},        /* G */
00663             {0,1,1,0,4},        /* R */
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},       /* B */
00673             {0,1,1,4,3},       /* G */
00674             {0,1,1,0,3},       /* R */
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},        /* B */
00685             {0,1,1,4,3},        /* G */
00686             {0,1,1,0,3},        /* R */
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},        /* Y */
00714             {1,1,1,0,15},        /* U */
00715             {2,1,1,0,15},        /* V */
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},        /* Y */
00725             {1,1,1,0,15},        /* U */
00726             {2,1,1,0,15},        /* V */
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},        /* Y */
00737             {1,1,1,0,15},        /* U */
00738             {2,1,1,0,15},        /* V */
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},        /* Y */
00748             {1,1,1,0,15},        /* U */
00749             {2,1,1,0,15},        /* V */
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},        /* Y */
00760             {1,1,1,0,15},        /* U */
00761             {2,1,1,0,15},        /* V */
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},        /* Y */
00771             {1,1,1,0,15},        /* U */
00772             {2,1,1,0,15},        /* V */
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},        /* Y */
00787             {0,1,2,0,7},        /* A */
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 }

Generated on Fri Sep 16 2011 17:17:51 for FFmpeg by  doxygen 1.7.1