2007-02-28 04:40:23 +01:00
/*
* copyright ( c ) 2006 Michael Niedermayer < michaelni @ gmx . at >
*
* This file is part of FFmpeg .
*
* FFmpeg is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation ; either
* version 2.1 of the License , or ( at your option ) any later version .
*
* FFmpeg is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
2008-08-31 09:39:47 +02:00
# ifndef AVUTIL_AVUTIL_H
# define AVUTIL_AVUTIL_H
2007-02-28 04:40:23 +01:00
/**
2009-02-01 03:00:19 +01:00
* @ file libavutil / avutil . h
2008-03-10 19:42:09 +01:00
* external API header
2007-02-28 04:40:23 +01:00
*/
# define AV_STRINGIFY(s) AV_TOSTRING(s)
# define AV_TOSTRING(s) #s
2008-02-26 21:37:59 +01:00
# define AV_VERSION_INT(a, b, c) (a<<16 | b<<8 | c)
# define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
# define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
2008-02-19 23:50:28 +01:00
2008-02-26 21:37:59 +01:00
# define LIBAVUTIL_VERSION_MAJOR 49
2009-01-18 23:50:57 +01:00
# define LIBAVUTIL_VERSION_MINOR 14
2008-02-26 21:37:59 +01:00
# define LIBAVUTIL_VERSION_MICRO 0
2008-02-19 23:50:28 +01:00
2008-02-26 21:37:59 +01:00
# define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR , \
LIBAVUTIL_VERSION_MICRO )
# define LIBAVUTIL_VERSION AV_VERSION(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR , \
LIBAVUTIL_VERSION_MICRO )
2007-02-28 04:40:23 +01:00
# define LIBAVUTIL_BUILD LIBAVUTIL_VERSION_INT
# define LIBAVUTIL_IDENT "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
2008-08-08 20:32:20 +02:00
/**
* Returns the LIBAVUTIL_VERSION_INT constant .
*/
unsigned avutil_version ( void ) ;
2007-02-28 04:40:23 +01:00
# include "common.h"
# include "mathematics.h"
# include "rational.h"
# include "intfloat_readwrite.h"
# include "log.h"
/**
* Pixel format . Notes :
*
2009-01-28 01:16:05 +01:00
* PIX_FMT_RGB32 is handled in an endian - specific manner . An RGBA
2007-02-28 04:40:23 +01:00
* color is put together as :
* ( A < < 24 ) | ( R < < 16 ) | ( G < < 8 ) | B
2009-01-28 01:16:05 +01:00
* This is stored as BGRA on little - endian CPU architectures and ARGB on
* big - endian CPUs .
2007-02-28 04:40:23 +01:00
*
* When the pixel format is palettized RGB ( PIX_FMT_PAL8 ) , the palettized
* image data is stored in AVFrame . data [ 0 ] . The palette is transported in
2009-01-29 00:03:17 +01:00
* AVFrame . data [ 1 ] , is 1024 bytes long ( 256 4 - byte entries ) and is
2007-02-28 04:40:23 +01:00
* formatted the same as in PIX_FMT_RGB32 described above ( i . e . , it is
* also endian - specific ) . Note also that the individual RGB palette
* components stored in AVFrame . data [ 1 ] should be in the range 0. .255 .
* This is important as many custom PAL8 video codecs that were designed
* to run on the IBM VGA graphics adapter use 6 - bit palette components .
2009-02-06 13:59:50 +01:00
*
* For all the 8 bit per pixel formats , an RGB32 palette is in data [ 1 ] like
* for pal8 . This palette is filled in automatically by the function
* allocating the picture .
2007-02-28 04:40:23 +01:00
*/
enum PixelFormat {
PIX_FMT_NONE = - 1 ,
2009-01-28 01:16:05 +01:00
PIX_FMT_YUV420P , ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
PIX_FMT_YUYV422 , ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
PIX_FMT_RGB24 , ///< packed RGB 8:8:8, 24bpp, RGBRGB...
PIX_FMT_BGR24 , ///< packed RGB 8:8:8, 24bpp, BGRBGR...
PIX_FMT_YUV422P , ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
PIX_FMT_YUV444P , ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
PIX_FMT_RGB32 , ///< packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in CPU endianness
PIX_FMT_YUV410P , ///< planar YUV 4:1:0, 9bpp, (1 Cr & Cb sample per 4x4 Y samples)
PIX_FMT_YUV411P , ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
PIX_FMT_RGB565 , ///< packed RGB 5:6:5, 16bpp, (msb) 5R 6G 5B(lsb), in CPU endianness
PIX_FMT_RGB555 , ///< packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), in CPU endianness, most significant bit to 0
2007-02-28 04:40:23 +01:00
PIX_FMT_GRAY8 , ///< Y , 8bpp
2007-06-20 10:18:04 +02:00
PIX_FMT_MONOWHITE , ///< Y , 1bpp, 0 is white, 1 is black
PIX_FMT_MONOBLACK , ///< Y , 1bpp, 0 is black, 1 is white
2007-02-28 04:40:23 +01:00
PIX_FMT_PAL8 , ///< 8 bit with PIX_FMT_RGB32 palette
2009-01-28 01:16:05 +01:00
PIX_FMT_YUVJ420P , ///< planar YUV 4:2:0, 12bpp, full scale (JPEG)
PIX_FMT_YUVJ422P , ///< planar YUV 4:2:2, 16bpp, full scale (JPEG)
PIX_FMT_YUVJ444P , ///< planar YUV 4:4:4, 24bpp, full scale (JPEG)
2009-02-12 03:02:42 +01:00
PIX_FMT_XVMC_MPEG2_MC , ///< XVideo Motion Acceleration via common packet passing
2007-02-28 04:40:23 +01:00
PIX_FMT_XVMC_MPEG2_IDCT ,
2009-01-28 01:16:05 +01:00
PIX_FMT_UYVY422 , ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
PIX_FMT_UYYVYY411 , ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
PIX_FMT_BGR32 , ///< packed RGB 8:8:8, 32bpp, (msb)8A 8B 8G 8R(lsb), in CPU endianness
PIX_FMT_BGR565 , ///< packed RGB 5:6:5, 16bpp, (msb) 5B 6G 5R(lsb), in CPU endianness
PIX_FMT_BGR555 , ///< packed RGB 5:5:5, 16bpp, (msb)1A 5B 5G 5R(lsb), in CPU endianness, most significant bit to 1
PIX_FMT_BGR8 , ///< packed RGB 3:3:2, 8bpp, (msb)2B 3G 3R(lsb)
PIX_FMT_BGR4 , ///< packed RGB 1:2:1, 4bpp, (msb)1B 2G 1R(lsb)
PIX_FMT_BGR4_BYTE , ///< packed RGB 1:2:1, 8bpp, (msb)1B 2G 1R(lsb)
PIX_FMT_RGB8 , ///< packed RGB 3:3:2, 8bpp, (msb)2R 3G 3B(lsb)
PIX_FMT_RGB4 , ///< packed RGB 1:2:1, 4bpp, (msb)1R 2G 1B(lsb)
PIX_FMT_RGB4_BYTE , ///< packed RGB 1:2:1, 8bpp, (msb)1R 2G 1B(lsb)
PIX_FMT_NV12 , ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 for UV
2007-02-28 04:40:23 +01:00
PIX_FMT_NV21 , ///< as above, but U and V bytes are swapped
2009-01-28 01:16:05 +01:00
PIX_FMT_RGB32_1 , ///< packed RGB 8:8:8, 32bpp, (msb)8R 8G 8B 8A(lsb), in CPU endianness
PIX_FMT_BGR32_1 , ///< packed RGB 8:8:8, 32bpp, (msb)8B 8G 8R 8A(lsb), in CPU endianness
2007-02-28 04:40:23 +01:00
PIX_FMT_GRAY16BE , ///< Y , 16bpp, big-endian
PIX_FMT_GRAY16LE , ///< Y , 16bpp, little-endian
2009-01-28 01:16:05 +01:00
PIX_FMT_YUV440P , ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
PIX_FMT_YUVJ440P , ///< planar YUV 4:4:0 full scale (JPEG)
PIX_FMT_YUVA420P , ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
PIX_FMT_VDPAU_H264 , ///< H.264 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_MPEG1 , ///< MPEG-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
PIX_FMT_VDPAU_MPEG2 , ///< MPEG-2 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
2009-01-20 10:28:36 +01:00
PIX_FMT_VDPAU_WMV3 , ///< WMV3 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
2009-01-28 01:16:05 +01:00
PIX_FMT_VDPAU_VC1 , ///< VC-1 HW decoding with VDPAU, data[0] contains a vdpau_render_state struct which contains the bitstream of the slices as well as various fields extracted from headers
2007-02-28 04:40:23 +01:00
PIX_FMT_NB , ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
} ;
# ifdef WORDS_BIGENDIAN
# define PIX_FMT_RGBA PIX_FMT_RGB32_1
# define PIX_FMT_BGRA PIX_FMT_BGR32_1
# define PIX_FMT_ARGB PIX_FMT_RGB32
# define PIX_FMT_ABGR PIX_FMT_BGR32
# define PIX_FMT_GRAY16 PIX_FMT_GRAY16BE
# else
# define PIX_FMT_RGBA PIX_FMT_BGR32
# define PIX_FMT_BGRA PIX_FMT_RGB32
# define PIX_FMT_ARGB PIX_FMT_BGR32_1
# define PIX_FMT_ABGR PIX_FMT_RGB32_1
# define PIX_FMT_GRAY16 PIX_FMT_GRAY16LE
# endif
# if LIBAVUTIL_VERSION_INT < (50<<16)
# define PIX_FMT_UYVY411 PIX_FMT_UYYVYY411
# define PIX_FMT_RGBA32 PIX_FMT_RGB32
# define PIX_FMT_YUV422 PIX_FMT_YUYV422
# endif
2008-08-31 09:39:47 +02:00
# endif /* AVUTIL_AVUTIL_H */