• Main Page
  • Related Pages
  • Modules
  • Data Structures
  • Files
  • Examples
  • 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 Libav.
00006  *
00007  * Libav 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  * Libav 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 Libav; if not, write to the Free Software
00019  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
00020  */
00021 
00022 #include <stdio.h>
00023 #include <string.h>
00024 #include "pixfmt.h"
00025 #include "pixdesc.h"
00026 
00027 #include "intreadwrite.h"
00028 
00029 void av_read_image_line(uint16_t *dst, const uint8_t *data[4], const int linesize[4],
00030                         const AVPixFmtDescriptor *desc, int x, int y, int c, int w,
00031                         int read_pal_component)
00032 {
00033     AVComponentDescriptor comp = desc->comp[c];
00034     int plane = comp.plane;
00035     int depth = comp.depth_minus1 + 1;
00036     int mask  = (1 << depth) - 1;
00037     int shift = comp.shift;
00038     int step  = comp.step_minus1 + 1;
00039     int flags = desc->flags;
00040 
00041     if (flags & PIX_FMT_BITSTREAM) {
00042         int skip = x * step + comp.offset_plus1 - 1;
00043         const uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
00044         int shift = 8 - depth - (skip & 7);
00045 
00046         while (w--) {
00047             int val = (*p >> shift) & mask;
00048             if (read_pal_component)
00049                 val = data[1][4*val + c];
00050             shift -= step;
00051             p -= shift >> 3;
00052             shift &= 7;
00053             *dst++ = val;
00054         }
00055     } else {
00056         const uint8_t *p = data[plane] + y * linesize[plane] + x * step + comp.offset_plus1 - 1;
00057         int is_8bit = shift + depth <= 8;
00058 
00059         if (is_8bit)
00060             p += !!(flags & PIX_FMT_BE);
00061 
00062         while (w--) {
00063             int val = is_8bit ? *p :
00064                 flags & PIX_FMT_BE ? AV_RB16(p) : AV_RL16(p);
00065             val = (val >> shift) & mask;
00066             if (read_pal_component)
00067                 val = data[1][4 * val + c];
00068             p += step;
00069             *dst++ = val;
00070         }
00071     }
00072 }
00073 
00074 void av_write_image_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
00075                          const AVPixFmtDescriptor *desc, int x, int y, int c, int w)
00076 {
00077     AVComponentDescriptor comp = desc->comp[c];
00078     int plane = comp.plane;
00079     int depth = comp.depth_minus1 + 1;
00080     int step  = comp.step_minus1 + 1;
00081     int flags = desc->flags;
00082 
00083     if (flags & PIX_FMT_BITSTREAM) {
00084         int skip = x * step + comp.offset_plus1 - 1;
00085         uint8_t *p = data[plane] + y * linesize[plane] + (skip >> 3);
00086         int shift = 8 - depth - (skip & 7);
00087 
00088         while (w--) {
00089             *p |= *src++ << shift;
00090             shift -= step;
00091             p -= shift >> 3;
00092             shift &= 7;
00093         }
00094     } else {
00095         int shift = comp.shift;
00096         uint8_t *p = data[plane] + y * linesize[plane] + x * step + comp.offset_plus1 - 1;
00097 
00098         if (shift + depth <= 8) {
00099             p += !!(flags & PIX_FMT_BE);
00100             while (w--) {
00101                 *p |= (*src++ << shift);
00102                 p += step;
00103             }
00104         } else {
00105             while (w--) {
00106                 if (flags & PIX_FMT_BE) {
00107                     uint16_t val = AV_RB16(p) | (*src++ << shift);
00108                     AV_WB16(p, val);
00109                 } else {
00110                     uint16_t val = AV_RL16(p) | (*src++ << shift);
00111                     AV_WL16(p, val);
00112                 }
00113                 p += step;
00114             }
00115         }
00116     }
00117 }
00118 
00119 const AVPixFmtDescriptor av_pix_fmt_descriptors[PIX_FMT_NB] = {
00120     [PIX_FMT_YUV420P] = {
00121         .name = "yuv420p",
00122         .nb_components = 3,
00123         .log2_chroma_w = 1,
00124         .log2_chroma_h = 1,
00125         .comp = {
00126             { 0, 0, 1, 0, 7 },        /* Y */
00127             { 1, 0, 1, 0, 7 },        /* U */
00128             { 2, 0, 1, 0, 7 },        /* V */
00129         },
00130         .flags = PIX_FMT_PLANAR,
00131     },
00132     [PIX_FMT_YUYV422] = {
00133         .name = "yuyv422",
00134         .nb_components = 3,
00135         .log2_chroma_w = 1,
00136         .log2_chroma_h = 0,
00137         .comp = {
00138             { 0, 1, 1, 0, 7 },        /* Y */
00139             { 0, 3, 2, 0, 7 },        /* U */
00140             { 0, 3, 4, 0, 7 },        /* V */
00141         },
00142     },
00143     [PIX_FMT_RGB24] = {
00144         .name = "rgb24",
00145         .nb_components = 3,
00146         .log2_chroma_w = 0,
00147         .log2_chroma_h = 0,
00148         .comp = {
00149             { 0, 2, 1, 0, 7 },        /* R */
00150             { 0, 2, 2, 0, 7 },        /* G */
00151             { 0, 2, 3, 0, 7 },        /* B */
00152         },
00153         .flags = PIX_FMT_RGB,
00154     },
00155     [PIX_FMT_BGR24] = {
00156         .name = "bgr24",
00157         .nb_components = 3,
00158         .log2_chroma_w = 0,
00159         .log2_chroma_h = 0,
00160         .comp = {
00161             { 0, 2, 1, 0, 7 },        /* B */
00162             { 0, 2, 2, 0, 7 },        /* G */
00163             { 0, 2, 3, 0, 7 },        /* R */
00164         },
00165         .flags = PIX_FMT_RGB,
00166     },
00167     [PIX_FMT_YUV422P] = {
00168         .name = "yuv422p",
00169         .nb_components = 3,
00170         .log2_chroma_w = 1,
00171         .log2_chroma_h = 0,
00172         .comp = {
00173             { 0, 0, 1, 0, 7 },        /* Y */
00174             { 1, 0, 1, 0, 7 },        /* U */
00175             { 2, 0, 1, 0, 7 },        /* V */
00176         },
00177         .flags = PIX_FMT_PLANAR,
00178     },
00179     [PIX_FMT_YUV444P] = {
00180         .name = "yuv444p",
00181         .nb_components = 3,
00182         .log2_chroma_w = 0,
00183         .log2_chroma_h = 0,
00184         .comp = {
00185             { 0, 0, 1, 0, 7 },        /* Y */
00186             { 1, 0, 1, 0, 7 },        /* U */
00187             { 2, 0, 1, 0, 7 },        /* V */
00188         },
00189         .flags = PIX_FMT_PLANAR,
00190     },
00191     [PIX_FMT_YUV410P] = {
00192         .name = "yuv410p",
00193         .nb_components = 3,
00194         .log2_chroma_w = 2,
00195         .log2_chroma_h = 2,
00196         .comp = {
00197             { 0, 0, 1, 0, 7 },        /* Y */
00198             { 1, 0, 1, 0, 7 },        /* U */
00199             { 2, 0, 1, 0, 7 },        /* V */
00200         },
00201         .flags = PIX_FMT_PLANAR,
00202     },
00203     [PIX_FMT_YUV411P] = {
00204         .name = "yuv411p",
00205         .nb_components = 3,
00206         .log2_chroma_w = 2,
00207         .log2_chroma_h = 0,
00208         .comp = {
00209             { 0, 0, 1, 0, 7 },        /* Y */
00210             { 1, 0, 1, 0, 7 },        /* U */
00211             { 2, 0, 1, 0, 7 },        /* V */
00212         },
00213         .flags = PIX_FMT_PLANAR,
00214     },
00215     [PIX_FMT_GRAY8] = {
00216         .name = "gray",
00217         .nb_components = 1,
00218         .log2_chroma_w = 0,
00219         .log2_chroma_h = 0,
00220         .comp = {
00221             { 0, 0, 1, 0, 7 },        /* Y */
00222         },
00223     },
00224     [PIX_FMT_MONOWHITE] = {
00225         .name = "monow",
00226         .nb_components = 1,
00227         .log2_chroma_w = 0,
00228         .log2_chroma_h = 0,
00229         .comp = {
00230             { 0, 0, 1, 0, 0 },        /* Y */
00231         },
00232         .flags = PIX_FMT_BITSTREAM,
00233     },
00234     [PIX_FMT_MONOBLACK] = {
00235         .name = "monob",
00236         .nb_components = 1,
00237         .log2_chroma_w = 0,
00238         .log2_chroma_h = 0,
00239         .comp = {
00240             { 0, 0, 1, 7, 0 },        /* Y */
00241         },
00242         .flags = PIX_FMT_BITSTREAM,
00243     },
00244     [PIX_FMT_PAL8] = {
00245         .name = "pal8",
00246         .nb_components = 1,
00247         .log2_chroma_w = 0,
00248         .log2_chroma_h = 0,
00249         .comp = {
00250             { 0, 0, 1, 0, 7 },
00251         },
00252         .flags = PIX_FMT_PAL,
00253     },
00254     [PIX_FMT_YUVJ420P] = {
00255         .name = "yuvj420p",
00256         .nb_components = 3,
00257         .log2_chroma_w = 1,
00258         .log2_chroma_h = 1,
00259         .comp = {
00260             { 0, 0, 1, 0, 7 },        /* Y */
00261             { 1, 0, 1, 0, 7 },        /* U */
00262             { 2, 0, 1, 0, 7 },        /* V */
00263         },
00264         .flags = PIX_FMT_PLANAR,
00265     },
00266     [PIX_FMT_YUVJ422P] = {
00267         .name = "yuvj422p",
00268         .nb_components = 3,
00269         .log2_chroma_w = 1,
00270         .log2_chroma_h = 0,
00271         .comp = {
00272             { 0, 0, 1, 0, 7 },        /* Y */
00273             { 1, 0, 1, 0, 7 },        /* U */
00274             { 2, 0, 1, 0, 7 },        /* V */
00275         },
00276         .flags = PIX_FMT_PLANAR,
00277     },
00278     [PIX_FMT_YUVJ444P] = {
00279         .name = "yuvj444p",
00280         .nb_components = 3,
00281         .log2_chroma_w = 0,
00282         .log2_chroma_h = 0,
00283         .comp = {
00284             {0, 0, 1, 0, 7},        /* Y */
00285             {1, 0, 1, 0, 7},        /* U */
00286             {2, 0, 1, 0, 7},        /* V */
00287         },
00288         .flags = PIX_FMT_PLANAR,
00289     },
00290     [PIX_FMT_XVMC_MPEG2_MC] = {
00291         .name = "xvmcmc",
00292         .flags = PIX_FMT_HWACCEL,
00293     },
00294     [PIX_FMT_XVMC_MPEG2_IDCT] = {
00295         .name = "xvmcidct",
00296         .flags = PIX_FMT_HWACCEL,
00297     },
00298     [PIX_FMT_UYVY422] = {
00299         .name = "uyvy422",
00300         .nb_components = 3,
00301         .log2_chroma_w = 1,
00302         .log2_chroma_h = 0,
00303         .comp = {
00304             { 0, 1, 2, 0, 7 },        /* Y */
00305             { 0, 3, 1, 0, 7 },        /* U */
00306             { 0, 3, 3, 0, 7 },        /* V */
00307         },
00308     },
00309     [PIX_FMT_UYYVYY411] = {
00310         .name = "uyyvyy411",
00311         .nb_components = 3,
00312         .log2_chroma_w = 2,
00313         .log2_chroma_h = 0,
00314         .comp = {
00315             { 0, 3, 2, 0, 7 },        /* Y */
00316             { 0, 5, 1, 0, 7 },        /* U */
00317             { 0, 5, 4, 0, 7 },        /* V */
00318         },
00319     },
00320     [PIX_FMT_BGR8] = {
00321         .name = "bgr8",
00322         .nb_components = 3,
00323         .log2_chroma_w = 0,
00324         .log2_chroma_h = 0,
00325         .comp = {
00326             { 0, 0, 1, 6, 1 },        /* B */
00327             { 0, 0, 1, 3, 2 },        /* G */
00328             { 0, 0, 1, 0, 2 },        /* R */
00329         },
00330         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
00331     },
00332     [PIX_FMT_BGR4] = {
00333         .name = "bgr4",
00334         .nb_components = 3,
00335         .log2_chroma_w = 0,
00336         .log2_chroma_h = 0,
00337         .comp = {
00338             { 0, 3, 1, 0, 0 },        /* B */
00339             { 0, 3, 2, 0, 1 },        /* G */
00340             { 0, 3, 4, 0, 0 },        /* R */
00341         },
00342         .flags = PIX_FMT_BITSTREAM | PIX_FMT_RGB,
00343     },
00344     [PIX_FMT_BGR4_BYTE] = {
00345         .name = "bgr4_byte",
00346         .nb_components = 3,
00347         .log2_chroma_w = 0,
00348         .log2_chroma_h = 0,
00349         .comp = {
00350             { 0, 0, 1, 3, 0 },        /* B */
00351             { 0, 0, 1, 1, 1 },        /* G */
00352             { 0, 0, 1, 0, 0 },        /* R */
00353         },
00354         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
00355     },
00356     [PIX_FMT_RGB8] = {
00357         .name = "rgb8",
00358         .nb_components = 3,
00359         .log2_chroma_w = 0,
00360         .log2_chroma_h = 0,
00361         .comp = {
00362             { 0, 0, 1, 6, 1 },        /* R */
00363             { 0, 0, 1, 3, 2 },        /* G */
00364             { 0, 0, 1, 0, 2 },        /* B */
00365         },
00366         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
00367     },
00368     [PIX_FMT_RGB4] = {
00369         .name = "rgb4",
00370         .nb_components = 3,
00371         .log2_chroma_w = 0,
00372         .log2_chroma_h = 0,
00373         .comp = {
00374             { 0, 3, 1, 0, 0 },        /* R */
00375             { 0, 3, 2, 0, 1 },        /* G */
00376             { 0, 3, 4, 0, 0 },        /* B */
00377         },
00378         .flags = PIX_FMT_BITSTREAM | PIX_FMT_RGB,
00379     },
00380     [PIX_FMT_RGB4_BYTE] = {
00381         .name = "rgb4_byte",
00382         .nb_components = 3,
00383         .log2_chroma_w = 0,
00384         .log2_chroma_h = 0,
00385         .comp = {
00386             { 0, 0, 1, 3, 0 },        /* R */
00387             { 0, 0, 1, 1, 1 },        /* G */
00388             { 0, 0, 1, 0, 0 },        /* B */
00389         },
00390         .flags = PIX_FMT_PAL | PIX_FMT_RGB,
00391     },
00392     [PIX_FMT_NV12] = {
00393         .name = "nv12",
00394         .nb_components = 3,
00395         .log2_chroma_w = 1,
00396         .log2_chroma_h = 1,
00397         .comp = {
00398             { 0,0,1,0,7 },        /* Y */
00399             { 1,1,1,0,7 },        /* U */
00400             { 1,1,2,0,7 },        /* V */
00401         },
00402         .flags = PIX_FMT_PLANAR,
00403     },
00404     [PIX_FMT_NV21] = {
00405         .name = "nv21",
00406         .nb_components = 3,
00407         .log2_chroma_w = 1,
00408         .log2_chroma_h = 1,
00409         .comp = {
00410             { 0, 0, 1, 0, 7 },        /* Y */
00411             { 1, 1, 1, 0, 7 },        /* V */
00412             { 1, 1, 2, 0, 7 },        /* U */
00413         },
00414         .flags = PIX_FMT_PLANAR,
00415     },
00416     [PIX_FMT_ARGB] = {
00417         .name = "argb",
00418         .nb_components = 4,
00419         .log2_chroma_w = 0,
00420         .log2_chroma_h = 0,
00421         .comp = {
00422             { 0, 3, 1, 0, 7 },        /* A */
00423             { 0, 3, 2, 0, 7 },        /* R */
00424             { 0, 3, 3, 0, 7 },        /* G */
00425             { 0, 3, 4, 0, 7 },        /* B */
00426         },
00427         .flags = PIX_FMT_RGB,
00428     },
00429     [PIX_FMT_RGBA] = {
00430         .name = "rgba",
00431         .nb_components = 4,
00432         .log2_chroma_w = 0,
00433         .log2_chroma_h = 0,
00434         .comp = {
00435             { 0, 3, 1, 0, 7 },        /* R */
00436             { 0, 3, 2, 0, 7 },        /* G */
00437             { 0, 3, 3, 0, 7 },        /* B */
00438             { 0, 3, 4, 0, 7 },        /* A */
00439         },
00440         .flags = PIX_FMT_RGB,
00441     },
00442     [PIX_FMT_ABGR] = {
00443         .name = "abgr",
00444         .nb_components = 4,
00445         .log2_chroma_w = 0,
00446         .log2_chroma_h = 0,
00447         .comp = {
00448             { 0, 3, 1, 0, 7 },        /* A */
00449             { 0, 3, 2, 0, 7 },        /* B */
00450             { 0, 3, 3, 0, 7 },        /* G */
00451             { 0, 3, 4, 0, 7 },        /* R */
00452         },
00453         .flags = PIX_FMT_RGB,
00454     },
00455     [PIX_FMT_BGRA] = {
00456         .name = "bgra",
00457         .nb_components = 4,
00458         .log2_chroma_w = 0,
00459         .log2_chroma_h = 0,
00460         .comp = {
00461             { 0, 3, 1, 0, 7 },        /* B */
00462             { 0, 3, 2, 0, 7 },        /* G */
00463             { 0, 3, 3, 0, 7 },        /* R */
00464             { 0, 3, 4, 0, 7 },        /* A */
00465         },
00466         .flags = PIX_FMT_RGB,
00467     },
00468     [PIX_FMT_GRAY16BE] = {
00469         .name = "gray16be",
00470         .nb_components = 1,
00471         .log2_chroma_w = 0,
00472         .log2_chroma_h = 0,
00473         .comp = {
00474             { 0, 1, 1, 0, 15 },       /* Y */
00475         },
00476         .flags = PIX_FMT_BE,
00477     },
00478     [PIX_FMT_GRAY16LE] = {
00479         .name = "gray16le",
00480         .nb_components = 1,
00481         .log2_chroma_w = 0,
00482         .log2_chroma_h = 0,
00483         .comp = {
00484             { 0, 1, 1, 0, 15 },       /* Y */
00485         },
00486     },
00487     [PIX_FMT_YUV440P] = {
00488         .name = "yuv440p",
00489         .nb_components = 3,
00490         .log2_chroma_w = 0,
00491         .log2_chroma_h = 1,
00492         .comp = {
00493             { 0, 0, 1, 0, 7 },        /* Y */
00494             { 1, 0, 1, 0, 7 },        /* U */
00495             { 2, 0, 1, 0, 7 },        /* V */
00496         },
00497         .flags = PIX_FMT_PLANAR,
00498     },
00499     [PIX_FMT_YUVJ440P] = {
00500         .name = "yuvj440p",
00501         .nb_components = 3,
00502         .log2_chroma_w = 0,
00503         .log2_chroma_h = 1,
00504         .comp = {
00505             { 0, 0, 1, 0, 7 },        /* Y */
00506             { 1, 0, 1, 0, 7 },        /* U */
00507             { 2, 0, 1, 0, 7 },        /* V */
00508         },
00509         .flags = PIX_FMT_PLANAR,
00510     },
00511     [PIX_FMT_YUVA420P] = {
00512         .name = "yuva420p",
00513         .nb_components = 4,
00514         .log2_chroma_w = 1,
00515         .log2_chroma_h = 1,
00516         .comp = {
00517             { 0, 0, 1, 0, 7 },        /* Y */
00518             { 1, 0, 1, 0, 7 },        /* U */
00519             { 2, 0, 1, 0, 7 },        /* V */
00520             { 3, 0, 1, 0, 7 },        /* A */
00521         },
00522         .flags = PIX_FMT_PLANAR,
00523     },
00524     [PIX_FMT_VDPAU_H264] = {
00525         .name = "vdpau_h264",
00526         .log2_chroma_w = 1,
00527         .log2_chroma_h = 1,
00528         .flags = PIX_FMT_HWACCEL,
00529     },
00530     [PIX_FMT_VDPAU_MPEG1] = {
00531         .name = "vdpau_mpeg1",
00532         .log2_chroma_w = 1,
00533         .log2_chroma_h = 1,
00534         .flags = PIX_FMT_HWACCEL,
00535     },
00536     [PIX_FMT_VDPAU_MPEG2] = {
00537         .name = "vdpau_mpeg2",
00538         .log2_chroma_w = 1,
00539         .log2_chroma_h = 1,
00540         .flags = PIX_FMT_HWACCEL,
00541     },
00542     [PIX_FMT_VDPAU_WMV3] = {
00543         .name = "vdpau_wmv3",
00544         .log2_chroma_w = 1,
00545         .log2_chroma_h = 1,
00546         .flags = PIX_FMT_HWACCEL,
00547     },
00548     [PIX_FMT_VDPAU_VC1] = {
00549         .name = "vdpau_vc1",
00550         .log2_chroma_w = 1,
00551         .log2_chroma_h = 1,
00552         .flags = PIX_FMT_HWACCEL,
00553     },
00554     [PIX_FMT_VDPAU_MPEG4] = {
00555         .name = "vdpau_mpeg4",
00556         .log2_chroma_w = 1,
00557         .log2_chroma_h = 1,
00558         .flags = PIX_FMT_HWACCEL,
00559     },
00560     [PIX_FMT_RGB48BE] = {
00561         .name = "rgb48be",
00562         .nb_components = 3,
00563         .log2_chroma_w = 0,
00564         .log2_chroma_h = 0,
00565         .comp = {
00566             { 0, 5, 1, 0, 15 },       /* R */
00567             { 0, 5, 3, 0, 15 },       /* G */
00568             { 0, 5, 5, 0, 15 },       /* B */
00569         },
00570         .flags = PIX_FMT_RGB | PIX_FMT_BE,
00571     },
00572     [PIX_FMT_RGB48LE] = {
00573         .name = "rgb48le",
00574         .nb_components = 3,
00575         .log2_chroma_w = 0,
00576         .log2_chroma_h = 0,
00577         .comp = {
00578             { 0, 5, 1, 0, 15 },       /* R */
00579             { 0, 5, 3, 0, 15 },       /* G */
00580             { 0, 5, 5, 0, 15 },       /* B */
00581         },
00582         .flags = PIX_FMT_RGB,
00583     },
00584     [PIX_FMT_RGB565BE] = {
00585         .name = "rgb565be",
00586         .nb_components = 3,
00587         .log2_chroma_w = 0,
00588         .log2_chroma_h = 0,
00589         .comp = {
00590             { 0, 1, 0, 3, 4 },        /* R */
00591             { 0, 1, 1, 5, 5 },        /* G */
00592             { 0, 1, 1, 0, 4 },        /* B */
00593         },
00594         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00595     },
00596     [PIX_FMT_RGB565LE] = {
00597         .name = "rgb565le",
00598         .nb_components = 3,
00599         .log2_chroma_w = 0,
00600         .log2_chroma_h = 0,
00601         .comp = {
00602             { 0, 1, 2, 3, 4 },        /* R */
00603             { 0, 1, 1, 5, 5 },        /* G */
00604             { 0, 1, 1, 0, 4 },        /* B */
00605         },
00606         .flags = PIX_FMT_RGB,
00607     },
00608     [PIX_FMT_RGB555BE] = {
00609         .name = "rgb555be",
00610         .nb_components = 3,
00611         .log2_chroma_w = 0,
00612         .log2_chroma_h = 0,
00613         .comp = {
00614             { 0, 1, 0, 2, 4 },        /* R */
00615             { 0, 1, 1, 5, 4 },        /* G */
00616             { 0, 1, 1, 0, 4 },        /* B */
00617         },
00618         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00619     },
00620     [PIX_FMT_RGB555LE] = {
00621         .name = "rgb555le",
00622         .nb_components = 3,
00623         .log2_chroma_w = 0,
00624         .log2_chroma_h = 0,
00625         .comp = {
00626             { 0, 1, 2, 2, 4 },        /* R */
00627             { 0, 1, 1, 5, 4 },        /* G */
00628             { 0, 1, 1, 0, 4 },        /* B */
00629         },
00630         .flags = PIX_FMT_RGB,
00631     },
00632     [PIX_FMT_RGB444BE] = {
00633         .name = "rgb444be",
00634         .nb_components = 3,
00635         .log2_chroma_w = 0,
00636         .log2_chroma_h = 0,
00637         .comp = {
00638             { 0, 1, 0, 0, 3 },        /* R */
00639             { 0, 1, 1, 4, 3 },        /* G */
00640             { 0, 1, 1, 0, 3 },        /* B */
00641         },
00642         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00643     },
00644     [PIX_FMT_RGB444LE] = {
00645         .name = "rgb444le",
00646         .nb_components = 3,
00647         .log2_chroma_w = 0,
00648         .log2_chroma_h = 0,
00649         .comp = {
00650             { 0, 1, 2, 0, 3 },        /* R */
00651             { 0, 1, 1, 4, 3 },        /* G */
00652             { 0, 1, 1, 0, 3 },        /* B */
00653         },
00654         .flags = PIX_FMT_RGB,
00655     },
00656     [PIX_FMT_BGR48BE] = {
00657         .name = "bgr48be",
00658         .nb_components = 3,
00659         .log2_chroma_w = 0,
00660         .log2_chroma_h = 0,
00661         .comp = {
00662             { 0, 5, 1, 0, 15 },       /* B */
00663             { 0, 5, 3, 0, 15 },       /* G */
00664             { 0, 5, 5, 0, 15 },       /* R */
00665         },
00666         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00667     },
00668     [PIX_FMT_BGR48LE] = {
00669         .name = "bgr48le",
00670         .nb_components = 3,
00671         .log2_chroma_w = 0,
00672         .log2_chroma_h = 0,
00673         .comp = {
00674             { 0, 5, 1, 0, 15 },       /* B */
00675             { 0, 5, 3, 0, 15 },       /* G */
00676             { 0, 5, 5, 0, 15 },       /* R */
00677         },
00678         .flags = PIX_FMT_RGB,
00679     },
00680     [PIX_FMT_BGR565BE] = {
00681         .name = "bgr565be",
00682         .nb_components = 3,
00683         .log2_chroma_w = 0,
00684         .log2_chroma_h = 0,
00685         .comp = {
00686             { 0, 1, 0, 3, 4 },        /* B */
00687             { 0, 1, 1, 5, 5 },        /* G */
00688             { 0, 1, 1, 0, 4 },        /* R */
00689         },
00690         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00691     },
00692     [PIX_FMT_BGR565LE] = {
00693         .name = "bgr565le",
00694         .nb_components = 3,
00695         .log2_chroma_w = 0,
00696         .log2_chroma_h = 0,
00697         .comp = {
00698             { 0, 1, 2, 3, 4 },        /* B */
00699             { 0, 1, 1, 5, 5 },        /* G */
00700             { 0, 1, 1, 0, 4 },        /* R */
00701         },
00702         .flags = PIX_FMT_RGB,
00703     },
00704     [PIX_FMT_BGR555BE] = {
00705         .name = "bgr555be",
00706         .nb_components = 3,
00707         .log2_chroma_w = 0,
00708         .log2_chroma_h = 0,
00709         .comp = {
00710             { 0, 1, 0, 2, 4 },       /* B */
00711             { 0, 1, 1, 5, 4 },       /* G */
00712             { 0, 1, 1, 0, 4 },       /* R */
00713         },
00714         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00715      },
00716     [PIX_FMT_BGR555LE] = {
00717         .name = "bgr555le",
00718         .nb_components = 3,
00719         .log2_chroma_w = 0,
00720         .log2_chroma_h = 0,
00721         .comp = {
00722             { 0, 1, 2, 2, 4 },        /* B */
00723             { 0, 1, 1, 5, 4 },        /* G */
00724             { 0, 1, 1, 0, 4 },        /* R */
00725         },
00726         .flags = PIX_FMT_RGB,
00727     },
00728     [PIX_FMT_BGR444BE] = {
00729         .name = "bgr444be",
00730         .nb_components = 3,
00731         .log2_chroma_w = 0,
00732         .log2_chroma_h = 0,
00733         .comp = {
00734             { 0, 1, 0, 0, 3 },       /* B */
00735             { 0, 1, 1, 4, 3 },       /* G */
00736             { 0, 1, 1, 0, 3 },       /* R */
00737         },
00738         .flags = PIX_FMT_BE | PIX_FMT_RGB,
00739      },
00740     [PIX_FMT_BGR444LE] = {
00741         .name = "bgr444le",
00742         .nb_components = 3,
00743         .log2_chroma_w = 0,
00744         .log2_chroma_h = 0,
00745         .comp = {
00746             { 0, 1, 2, 0, 3 },        /* B */
00747             { 0, 1, 1, 4, 3 },        /* G */
00748             { 0, 1, 1, 0, 3 },        /* R */
00749         },
00750         .flags = PIX_FMT_RGB,
00751     },
00752     [PIX_FMT_VAAPI_MOCO] = {
00753         .name = "vaapi_moco",
00754         .log2_chroma_w = 1,
00755         .log2_chroma_h = 1,
00756         .flags = PIX_FMT_HWACCEL,
00757     },
00758     [PIX_FMT_VAAPI_IDCT] = {
00759         .name = "vaapi_idct",
00760         .log2_chroma_w = 1,
00761         .log2_chroma_h = 1,
00762         .flags = PIX_FMT_HWACCEL,
00763     },
00764     [PIX_FMT_VAAPI_VLD] = {
00765         .name = "vaapi_vld",
00766         .log2_chroma_w = 1,
00767         .log2_chroma_h = 1,
00768         .flags = PIX_FMT_HWACCEL,
00769     },
00770     [PIX_FMT_VDA_VLD] = {
00771         .name = "vda_vld",
00772         .log2_chroma_w = 1,
00773         .log2_chroma_h = 1,
00774         .flags = PIX_FMT_HWACCEL,
00775     },
00776     [PIX_FMT_YUV420P9LE] = {
00777         .name = "yuv420p9le",
00778         .nb_components = 3,
00779         .log2_chroma_w = 1,
00780         .log2_chroma_h = 1,
00781         .comp = {
00782             { 0, 1, 1, 0, 8 },        /* Y */
00783             { 1, 1, 1, 0, 8 },        /* U */
00784             { 2, 1, 1, 0, 8 },        /* V */
00785         },
00786         .flags = PIX_FMT_PLANAR,
00787     },
00788     [PIX_FMT_YUV420P9BE] = {
00789         .name = "yuv420p9be",
00790         .nb_components = 3,
00791         .log2_chroma_w = 1,
00792         .log2_chroma_h = 1,
00793         .comp = {
00794             { 0, 1, 1, 0, 8 },        /* Y */
00795             { 1, 1, 1, 0, 8 },        /* U */
00796             { 2, 1, 1, 0, 8 },        /* V */
00797         },
00798         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00799     },
00800     [PIX_FMT_YUV420P10LE] = {
00801         .name = "yuv420p10le",
00802         .nb_components = 3,
00803         .log2_chroma_w = 1,
00804         .log2_chroma_h = 1,
00805         .comp = {
00806             { 0, 1, 1, 0, 9 },        /* Y */
00807             { 1, 1, 1, 0, 9 },        /* U */
00808             { 2, 1, 1, 0, 9 },        /* V */
00809         },
00810         .flags = PIX_FMT_PLANAR,
00811     },
00812     [PIX_FMT_YUV420P10BE] = {
00813         .name = "yuv420p10be",
00814         .nb_components = 3,
00815         .log2_chroma_w = 1,
00816         .log2_chroma_h = 1,
00817         .comp = {
00818             { 0, 1, 1, 0, 9 },        /* Y */
00819             { 1, 1, 1, 0, 9 },        /* U */
00820             { 2, 1, 1, 0, 9 },        /* V */
00821         },
00822         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00823     },
00824     [PIX_FMT_YUV420P16LE] = {
00825         .name = "yuv420p16le",
00826         .nb_components = 3,
00827         .log2_chroma_w = 1,
00828         .log2_chroma_h = 1,
00829         .comp = {
00830             { 0, 1, 1, 0, 15 },        /* Y */
00831             { 1, 1, 1, 0, 15 },        /* U */
00832             { 2, 1, 1, 0, 15 },        /* V */
00833         },
00834         .flags = PIX_FMT_PLANAR,
00835     },
00836     [PIX_FMT_YUV420P16BE] = {
00837         .name = "yuv420p16be",
00838         .nb_components = 3,
00839         .log2_chroma_w = 1,
00840         .log2_chroma_h = 1,
00841         .comp = {
00842             { 0, 1, 1, 0, 15 },        /* Y */
00843             { 1, 1, 1, 0, 15 },        /* U */
00844             { 2, 1, 1, 0, 15 },        /* V */
00845         },
00846         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00847     },
00848     [PIX_FMT_YUV422P9LE] = {
00849         .name = "yuv422p9le",
00850         .nb_components = 3,
00851         .log2_chroma_w = 1,
00852         .log2_chroma_h = 0,
00853         .comp = {
00854             { 0, 1, 1, 0, 8 },        /* Y */
00855             { 1, 1, 1, 0, 8 },        /* U */
00856             { 2, 1, 1, 0, 8 },        /* V */
00857         },
00858         .flags = PIX_FMT_PLANAR,
00859     },
00860     [PIX_FMT_YUV422P9BE] = {
00861         .name = "yuv422p9be",
00862         .nb_components = 3,
00863         .log2_chroma_w = 1,
00864         .log2_chroma_h = 0,
00865         .comp = {
00866             {0,1,1,0,8},        /* Y */
00867             {1,1,1,0,8},        /* U */
00868             {2,1,1,0,8},        /* V */
00869         },
00870         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00871     },
00872     [PIX_FMT_YUV422P10LE] = {
00873         .name = "yuv422p10le",
00874         .nb_components = 3,
00875         .log2_chroma_w = 1,
00876         .log2_chroma_h = 0,
00877         .comp = {
00878             { 0, 1, 1, 0, 9 },        /* Y */
00879             { 1, 1, 1, 0, 9 },        /* U */
00880             { 2, 1, 1, 0, 9 },        /* V */
00881         },
00882         .flags = PIX_FMT_PLANAR,
00883     },
00884     [PIX_FMT_YUV422P10BE] = {
00885         .name = "yuv422p10be",
00886         .nb_components = 3,
00887         .log2_chroma_w = 1,
00888         .log2_chroma_h = 0,
00889         .comp = {
00890             { 0, 1, 1, 0, 9 },        /* Y */
00891             { 1, 1, 1, 0, 9 },        /* U */
00892             { 2, 1, 1, 0, 9 },        /* V */
00893         },
00894         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00895     },
00896     [PIX_FMT_YUV422P16LE] = {
00897         .name = "yuv422p16le",
00898         .nb_components = 3,
00899         .log2_chroma_w = 1,
00900         .log2_chroma_h = 0,
00901         .comp = {
00902             { 0, 1, 1, 0, 15 },        /* Y */
00903             { 1, 1, 1, 0, 15 },        /* U */
00904             { 2, 1, 1, 0, 15 },        /* V */
00905         },
00906         .flags = PIX_FMT_PLANAR,
00907     },
00908     [PIX_FMT_YUV422P16BE] = {
00909         .name = "yuv422p16be",
00910         .nb_components = 3,
00911         .log2_chroma_w = 1,
00912         .log2_chroma_h = 0,
00913         .comp = {
00914             { 0, 1, 1, 0, 15 },        /* Y */
00915             { 1, 1, 1, 0, 15 },        /* U */
00916             { 2, 1, 1, 0, 15 },        /* V */
00917         },
00918         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00919     },
00920     [PIX_FMT_YUV444P16LE] = {
00921         .name = "yuv444p16le",
00922         .nb_components = 3,
00923         .log2_chroma_w = 0,
00924         .log2_chroma_h = 0,
00925         .comp = {
00926             { 0, 1, 1, 0, 15 },        /* Y */
00927             { 1, 1, 1, 0, 15 },        /* U */
00928             { 2, 1, 1, 0, 15 },        /* V */
00929         },
00930         .flags = PIX_FMT_PLANAR,
00931     },
00932     [PIX_FMT_YUV444P16BE] = {
00933         .name = "yuv444p16be",
00934         .nb_components = 3,
00935         .log2_chroma_w = 0,
00936         .log2_chroma_h = 0,
00937         .comp = {
00938             { 0, 1, 1, 0, 15 },        /* Y */
00939             { 1, 1, 1, 0, 15 },        /* U */
00940             { 2, 1, 1, 0, 15 },        /* V */
00941         },
00942         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00943     },
00944     [PIX_FMT_YUV444P10LE] = {
00945         .name = "yuv444p10le",
00946         .nb_components = 3,
00947         .log2_chroma_w = 0,
00948         .log2_chroma_h = 0,
00949         .comp = {
00950             { 0, 1, 1, 0, 9 },        /* Y */
00951             { 1, 1, 1, 0, 9 },        /* U */
00952             { 2, 1, 1, 0, 9 },        /* V */
00953         },
00954         .flags = PIX_FMT_PLANAR,
00955     },
00956     [PIX_FMT_YUV444P10BE] = {
00957         .name = "yuv444p10be",
00958         .nb_components = 3,
00959         .log2_chroma_w = 0,
00960         .log2_chroma_h = 0,
00961         .comp = {
00962             { 0, 1, 1, 0, 9 },        /* Y */
00963             { 1, 1, 1, 0, 9 },        /* U */
00964             { 2, 1, 1, 0, 9 },        /* V */
00965         },
00966         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00967     },
00968     [PIX_FMT_YUV444P9LE] = {
00969         .name = "yuv444p9le",
00970         .nb_components = 3,
00971         .log2_chroma_w = 0,
00972         .log2_chroma_h = 0,
00973         .comp = {
00974             { 0, 1, 1, 0, 8 },        /* Y */
00975             { 1, 1, 1, 0, 8 },        /* U */
00976             { 2, 1, 1, 0, 8 },        /* V */
00977         },
00978         .flags = PIX_FMT_PLANAR,
00979     },
00980     [PIX_FMT_YUV444P9BE] = {
00981         .name = "yuv444p9be",
00982         .nb_components = 3,
00983         .log2_chroma_w = 0,
00984         .log2_chroma_h = 0,
00985         .comp = {
00986             { 0, 1, 1, 0, 8 },        /* Y */
00987             { 1, 1, 1, 0, 8 },        /* U */
00988             { 2, 1, 1, 0, 8 },        /* V */
00989         },
00990         .flags = PIX_FMT_BE | PIX_FMT_PLANAR,
00991     },
00992     [PIX_FMT_DXVA2_VLD] = {
00993         .name = "dxva2_vld",
00994         .log2_chroma_w = 1,
00995         .log2_chroma_h = 1,
00996         .flags = PIX_FMT_HWACCEL,
00997     },
00998     [PIX_FMT_Y400A] = {
00999         .name = "y400a",
01000         .nb_components = 2,
01001         .comp = {
01002             { 0, 1, 1, 0, 7 },        /* Y */
01003             { 0, 1, 2, 0, 7 },        /* A */
01004         },
01005     },
01006     [PIX_FMT_GBRP] = {
01007         .name = "gbrp",
01008         .nb_components = 3,
01009         .log2_chroma_w = 0,
01010         .log2_chroma_h = 0,
01011         .comp = {
01012             { 0, 0, 1, 0, 7 },        /* G */
01013             { 1, 0, 1, 0, 7 },        /* B */
01014             { 2, 0, 1, 0, 7 },        /* R */
01015         },
01016         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
01017     },
01018     [PIX_FMT_GBRP9LE] = {
01019         .name = "gbrp9le",
01020         .nb_components = 3,
01021         .log2_chroma_w = 0,
01022         .log2_chroma_h = 0,
01023         .comp = {
01024             { 0, 1, 1, 0, 8 },        /* G */
01025             { 1, 1, 1, 0, 8 },        /* B */
01026             { 2, 1, 1, 0, 8 },        /* R */
01027         },
01028         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
01029     },
01030     [PIX_FMT_GBRP9BE] = {
01031         .name = "gbrp9be",
01032         .nb_components = 3,
01033         .log2_chroma_w = 0,
01034         .log2_chroma_h = 0,
01035         .comp = {
01036             { 0, 1, 1, 0, 8 },        /* G */
01037             { 1, 1, 1, 0, 8 },        /* B */
01038             { 2, 1, 1, 0, 8 },        /* R */
01039         },
01040         .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
01041     },
01042     [PIX_FMT_GBRP10LE] = {
01043         .name = "gbrp10le",
01044         .nb_components = 3,
01045         .log2_chroma_w = 0,
01046         .log2_chroma_h = 0,
01047         .comp = {
01048             { 0, 1, 1, 0, 9 },        /* G */
01049             { 1, 1, 1, 0, 9 },        /* B */
01050             { 2, 1, 1, 0, 9 },        /* R */
01051         },
01052         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
01053     },
01054     [PIX_FMT_GBRP10BE] = {
01055         .name = "gbrp10be",
01056         .nb_components = 3,
01057         .log2_chroma_w = 0,
01058         .log2_chroma_h = 0,
01059         .comp = {
01060             { 0, 1, 1, 0, 9 },        /* G */
01061             { 1, 1, 1, 0, 9 },        /* B */
01062             { 2, 1, 1, 0, 9 },        /* R */
01063         },
01064         .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
01065     },
01066     [PIX_FMT_GBRP16LE] = {
01067         .name = "gbrp16le",
01068         .nb_components = 3,
01069         .log2_chroma_w = 0,
01070         .log2_chroma_h = 0,
01071         .comp = {
01072             { 0, 1, 1, 0, 15 },       /* G */
01073             { 1, 1, 1, 0, 15 },       /* B */
01074             { 2, 1, 1, 0, 15 },       /* R */
01075         },
01076         .flags = PIX_FMT_PLANAR | PIX_FMT_RGB,
01077     },
01078     [PIX_FMT_GBRP16BE] = {
01079         .name = "gbrp16be",
01080         .nb_components = 3,
01081         .log2_chroma_w = 0,
01082         .log2_chroma_h = 0,
01083         .comp = {
01084             { 0, 1, 1, 0, 15 },       /* G */
01085             { 1, 1, 1, 0, 15 },       /* B */
01086             { 2, 1, 1, 0, 15 },       /* R */
01087         },
01088         .flags = PIX_FMT_BE | PIX_FMT_PLANAR | PIX_FMT_RGB,
01089     },
01090 };
01091 
01092 static enum PixelFormat get_pix_fmt_internal(const char *name)
01093 {
01094     enum PixelFormat pix_fmt;
01095 
01096     for (pix_fmt = 0; pix_fmt < PIX_FMT_NB; pix_fmt++)
01097         if (av_pix_fmt_descriptors[pix_fmt].name &&
01098             !strcmp(av_pix_fmt_descriptors[pix_fmt].name, name))
01099             return pix_fmt;
01100 
01101     return PIX_FMT_NONE;
01102 }
01103 
01104 const char *av_get_pix_fmt_name(enum PixelFormat pix_fmt)
01105 {
01106     return (unsigned)pix_fmt < PIX_FMT_NB ?
01107         av_pix_fmt_descriptors[pix_fmt].name : NULL;
01108 }
01109 
01110 #if HAVE_BIGENDIAN
01111 #   define X_NE(be, le) be
01112 #else
01113 #   define X_NE(be, le) le
01114 #endif
01115 
01116 enum PixelFormat av_get_pix_fmt(const char *name)
01117 {
01118     enum PixelFormat pix_fmt;
01119 
01120     if (!strcmp(name, "rgb32"))
01121         name = X_NE("argb", "bgra");
01122     else if (!strcmp(name, "bgr32"))
01123         name = X_NE("abgr", "rgba");
01124 
01125     pix_fmt = get_pix_fmt_internal(name);
01126     if (pix_fmt == PIX_FMT_NONE) {
01127         char name2[32];
01128 
01129         snprintf(name2, sizeof(name2), "%s%s", name, X_NE("be", "le"));
01130         pix_fmt = get_pix_fmt_internal(name2);
01131     }
01132     return pix_fmt;
01133 }
01134 
01135 int av_get_bits_per_pixel(const AVPixFmtDescriptor *pixdesc)
01136 {
01137     int c, bits = 0;
01138     int log2_pixels = pixdesc->log2_chroma_w + pixdesc->log2_chroma_h;
01139 
01140     for (c = 0; c < pixdesc->nb_components; c++) {
01141         int s = c == 1 || c == 2 ? 0 : log2_pixels;
01142         bits += (pixdesc->comp[c].depth_minus1 + 1) << s;
01143     }
01144 
01145     return bits >> log2_pixels;
01146 }
01147 
01148 char *av_get_pix_fmt_string (char *buf, int buf_size, enum PixelFormat pix_fmt)
01149 {
01150     /* print header */
01151     if (pix_fmt < 0) {
01152        snprintf (buf, buf_size, "name" " nb_components" " nb_bits");
01153     } else {
01154         const AVPixFmtDescriptor *pixdesc = &av_pix_fmt_descriptors[pix_fmt];
01155         snprintf(buf, buf_size, "%-11s %7d %10d", pixdesc->name,
01156                  pixdesc->nb_components, av_get_bits_per_pixel(pixdesc));
01157     }
01158 
01159     return buf;
01160 }
Generated on Sat Mar 17 2012 12:57:58 for Libav by doxygen 1.7.1