QortalOS Brooklyn for Raspberry Pi 4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

320 lines
16 KiB

/*
Copyright (c) 2012, Broadcom Europe Ltd
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef MMAL_ENCODINGS_H
#define MMAL_ENCODINGS_H
#include "mmal_common.h"
/** \defgroup MmalEncodings List of pre-defined encodings
* This defines a list of common encodings. This list isn't exhaustive and is only
* provided as a convenience to avoid clients having to use FourCC codes directly.
* However components are allowed to define and use their own FourCC codes. */
/* @{ */
/** \name Pre-defined video encodings */
/* @{ */
#define MMAL_ENCODING_H264 MMAL_FOURCC('H','2','6','4')
#define MMAL_ENCODING_MVC MMAL_FOURCC('M','V','C',' ')
#define MMAL_ENCODING_H263 MMAL_FOURCC('H','2','6','3')
#define MMAL_ENCODING_MP4V MMAL_FOURCC('M','P','4','V')
#define MMAL_ENCODING_MP2V MMAL_FOURCC('M','P','2','V')
#define MMAL_ENCODING_MP1V MMAL_FOURCC('M','P','1','V')
#define MMAL_ENCODING_WMV3 MMAL_FOURCC('W','M','V','3')
#define MMAL_ENCODING_WMV2 MMAL_FOURCC('W','M','V','2')
#define MMAL_ENCODING_WMV1 MMAL_FOURCC('W','M','V','1')
#define MMAL_ENCODING_WVC1 MMAL_FOURCC('W','V','C','1')
#define MMAL_ENCODING_VP8 MMAL_FOURCC('V','P','8',' ')
#define MMAL_ENCODING_VP7 MMAL_FOURCC('V','P','7',' ')
#define MMAL_ENCODING_VP6 MMAL_FOURCC('V','P','6',' ')
#define MMAL_ENCODING_THEORA MMAL_FOURCC('T','H','E','O')
#define MMAL_ENCODING_SPARK MMAL_FOURCC('S','P','R','K')
#define MMAL_ENCODING_MJPEG MMAL_FOURCC('M','J','P','G')
#define MMAL_ENCODING_JPEG MMAL_FOURCC('J','P','E','G')
#define MMAL_ENCODING_GIF MMAL_FOURCC('G','I','F',' ')
#define MMAL_ENCODING_PNG MMAL_FOURCC('P','N','G',' ')
#define MMAL_ENCODING_PPM MMAL_FOURCC('P','P','M',' ')
#define MMAL_ENCODING_TGA MMAL_FOURCC('T','G','A',' ')
#define MMAL_ENCODING_BMP MMAL_FOURCC('B','M','P',' ')
#define MMAL_ENCODING_I420 MMAL_FOURCC('I','4','2','0')
#define MMAL_ENCODING_I420_SLICE MMAL_FOURCC('S','4','2','0')
#define MMAL_ENCODING_YV12 MMAL_FOURCC('Y','V','1','2')
#define MMAL_ENCODING_I422 MMAL_FOURCC('I','4','2','2')
#define MMAL_ENCODING_I422_SLICE MMAL_FOURCC('S','4','2','2')
#define MMAL_ENCODING_YUYV MMAL_FOURCC('Y','U','Y','V')
#define MMAL_ENCODING_YVYU MMAL_FOURCC('Y','V','Y','U')
#define MMAL_ENCODING_UYVY MMAL_FOURCC('U','Y','V','Y')
#define MMAL_ENCODING_VYUY MMAL_FOURCC('V','Y','U','Y')
#define MMAL_ENCODING_NV12 MMAL_FOURCC('N','V','1','2')
#define MMAL_ENCODING_NV21 MMAL_FOURCC('N','V','2','1')
#define MMAL_ENCODING_ARGB MMAL_FOURCC('A','R','G','B')
#define MMAL_ENCODING_ARGB_SLICE MMAL_FOURCC('a','r','g','b')
#define MMAL_ENCODING_RGBA MMAL_FOURCC('R','G','B','A')
#define MMAL_ENCODING_RGBA_SLICE MMAL_FOURCC('r','g','b','a')
#define MMAL_ENCODING_ABGR MMAL_FOURCC('A','B','G','R')
#define MMAL_ENCODING_ABGR_SLICE MMAL_FOURCC('a','b','g','r')
#define MMAL_ENCODING_BGRA MMAL_FOURCC('B','G','R','A')
#define MMAL_ENCODING_BGRA_SLICE MMAL_FOURCC('b','g','r','a')
#define MMAL_ENCODING_RGB16 MMAL_FOURCC('R','G','B','2')
#define MMAL_ENCODING_RGB16_SLICE MMAL_FOURCC('r','g','b','2')
#define MMAL_ENCODING_RGB24 MMAL_FOURCC('R','G','B','3')
#define MMAL_ENCODING_RGB24_SLICE MMAL_FOURCC('r','g','b','3')
#define MMAL_ENCODING_RGB32 MMAL_FOURCC('R','G','B','4')
#define MMAL_ENCODING_RGB32_SLICE MMAL_FOURCC('r','g','b','4')
#define MMAL_ENCODING_BGR16 MMAL_FOURCC('B','G','R','2')
#define MMAL_ENCODING_BGR16_SLICE MMAL_FOURCC('b','g','r','2')
#define MMAL_ENCODING_BGR24 MMAL_FOURCC('B','G','R','3')
#define MMAL_ENCODING_BGR24_SLICE MMAL_FOURCC('b','g','r','3')
#define MMAL_ENCODING_BGR32 MMAL_FOURCC('B','G','R','4')
#define MMAL_ENCODING_BGR32_SLICE MMAL_FOURCC('b','g','r','4')
/** YUV 4:2:0 planar, 16bit/component.
*/
#define MMAL_ENCODING_I420_16 MMAL_FOURCC('i','4','2','0')
/** YUV 4:2:0 planar, 10bit/component as least sig 10bits of 16 bit words.
*/
#define MMAL_ENCODING_I420_10 MMAL_FOURCC('i','4','1','0')
/** YUV 4:2:0 planar but with U and V in side-by-side format
* So U and V have same pitch as Y, but V = U + pitch/2
*/
#define MMAL_ENCODING_I420_S MMAL_FOURCC('I','4','2','S')
//Bayer formats
//FourCC values copied from V4L2 where defined.
//10 bit per pixel packed Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR10P MMAL_FOURCC('p','B','A','A') //BGGR
#define MMAL_ENCODING_BAYER_SGRBG10P MMAL_FOURCC('p','g','A','A') //GRBG
#define MMAL_ENCODING_BAYER_SGBRG10P MMAL_FOURCC('p','G','A','A') //GBRG
#define MMAL_ENCODING_BAYER_SRGGB10P MMAL_FOURCC('p','R','A','A') //RGGB
//8 bit per pixel Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR8 MMAL_FOURCC('B','A','8','1') //BGGR
#define MMAL_ENCODING_BAYER_SGBRG8 MMAL_FOURCC('G','B','R','G') //GBRG
#define MMAL_ENCODING_BAYER_SGRBG8 MMAL_FOURCC('G','R','B','G') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB8 MMAL_FOURCC('R','G','G','B') //RGGB
//12 bit per pixel Bayer formats - not defined in V4L2, only 12bit expanded to 16.
//Copy 10bpp packed 4CC pattern
#define MMAL_ENCODING_BAYER_SBGGR12P MMAL_FOURCC('p','B','1','2') //BGGR
#define MMAL_ENCODING_BAYER_SGRBG12P MMAL_FOURCC('p','g','1','2') //GRBG
#define MMAL_ENCODING_BAYER_SGBRG12P MMAL_FOURCC('p','G','1','2') //GBRG
#define MMAL_ENCODING_BAYER_SRGGB12P MMAL_FOURCC('p','R','1','2') //RGGB
//14 bit per pixel Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR14P MMAL_FOURCC('p','B','E','E') //BGGR
#define MMAL_ENCODING_BAYER_SGBRG14P MMAL_FOURCC('p','G','E','E') //GBRG
#define MMAL_ENCODING_BAYER_SGRBG14P MMAL_FOURCC('p','g','E','E') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB14P MMAL_FOURCC('p','R','E','E') //RGGB
//16 bit per pixel Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR16 MMAL_FOURCC('B','G','1','6') //BGGR
#define MMAL_ENCODING_BAYER_SGBRG16 MMAL_FOURCC('G','B','1','6') //GBRG
#define MMAL_ENCODING_BAYER_SGRBG16 MMAL_FOURCC('G','R','1','6') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB16 MMAL_FOURCC('R','G','1','6') //RGGB
//10 bit per pixel DPCM compressed to 8bits Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR10DPCM8 MMAL_FOURCC('b','B','A','8') //BGGR
#define MMAL_ENCODING_BAYER_SGBRG10DPCM8 MMAL_FOURCC('b','G','A','8') //GBRG
#define MMAL_ENCODING_BAYER_SGRBG10DPCM8 MMAL_FOURCC('B','D','1','0') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB10DPCM8 MMAL_FOURCC('b','R','A','8') //RGGB
//10 bit per pixel unpacked (16bit) Bayer formats.
#define MMAL_ENCODING_BAYER_SBGGR10 MMAL_FOURCC('B','G','1','0') //BGGR
#define MMAL_ENCODING_BAYER_SGRBG10 MMAL_FOURCC('B','A','1','0') //GRBG
#define MMAL_ENCODING_BAYER_SGBRG10 MMAL_FOURCC('G','B','1','0') //GBRG
#define MMAL_ENCODING_BAYER_SRGGB10 MMAL_FOURCC('R','G','1','0') //RGGB
//12 bit per pixel unpacked (16bit) Bayer formats
#define MMAL_ENCODING_BAYER_SBGGR12 MMAL_FOURCC('B','G','1','2') //BGGR
#define MMAL_ENCODING_BAYER_SGRBG12 MMAL_FOURCC('B','A','1','2') //GRBG
#define MMAL_ENCODING_BAYER_SGBRG12 MMAL_FOURCC('G','B','1','2') //GBRG
#define MMAL_ENCODING_BAYER_SRGGB12 MMAL_FOURCC('R','G','1','2') //RGGB
//14 bit per pixel unpacked (16bit) Bayer formats
#define MMAL_ENCODING_BAYER_SBGGR14 MMAL_FOURCC('B','G','1','4') //BGGR
#define MMAL_ENCODING_BAYER_SGBRG14 MMAL_FOURCC('G','B','1','4') //GBRG
#define MMAL_ENCODING_BAYER_SGRBG14 MMAL_FOURCC('G','R','1','4') //GRBG
#define MMAL_ENCODING_BAYER_SRGGB14 MMAL_FOURCC('R','G','1','4') //RGGB
//MIPI packed monochrome images
#define MMAL_ENCODING_GREY MMAL_FOURCC('G', 'R', 'E', 'Y') //8bpp Greyscale
#define MMAL_ENCODING_Y10P MMAL_FOURCC('Y', '1', '0', 'P') //10bpp Greyscale, MIPI RAW10 packed
#define MMAL_ENCODING_Y12P MMAL_FOURCC('Y', '1', '2', 'P') //12bpp Greyscale, MIPI RAW12 packed
#define MMAL_ENCODING_Y14P MMAL_FOURCC('Y', '1', '4', 'P') //14bpp Greyscale, MIPI RAW14 packed
#define MMAL_ENCODING_Y16 MMAL_FOURCC('Y', '1', '6', ' ') //16bpp Greyscale
//Unpacked monochrome formats (16bit per sample, but only N LSBs used)
#define MMAL_ENCODING_Y10 MMAL_FOURCC('Y', '1', '0', ' ') //10bpp Greyscale
#define MMAL_ENCODING_Y12 MMAL_FOURCC('Y', '1', '2', ' ') //12bpp Greyscale
#define MMAL_ENCODING_Y14 MMAL_FOURCC('Y', '1', '4', ' ') //14bpp Greyscale
/** SAND Video (YUVUV128) format, native format understood by VideoCore.
* This format is *not* opaque - if requested you will receive full frames
* of YUV_UV video.
*/
#define MMAL_ENCODING_YUVUV128 MMAL_FOURCC('S','A','N','D')
/** HEVC codec format. YUV 420, 10bpc, arranged with 3 values packed into
* 4 bytes with 2 bits of padding.
* The image is split into columns or 128 bytes / 96 samples wide, with the
* column of luma first, followed by the column of sample interleaved chroma.
*/
#define MMAL_ENCODING_YUV10_COL MMAL_FOURCC('Y','1','0','C')
/** 16 bit SAND Video (YUVUV64_16) format.
* This format is *not* opaque - if requested you will receive full frames
* of YUV_UV_16 video.
*/
#define MMAL_ENCODING_YUVUV64_16 MMAL_FOURCC('S','A','1','6')
/** 10 bit SAND Video format, packed as least sig 10 bits of 16 bit words.
*/
#define MMAL_ENCODING_YUVUV64_10 MMAL_FOURCC('S','A','1','0')
/** VideoCore opaque image format, image handles are returned to
* the host but not the actual image data.
*/
#define MMAL_ENCODING_OPAQUE MMAL_FOURCC('O','P','Q','V')
/** An EGL image handle
*/
#define MMAL_ENCODING_EGL_IMAGE MMAL_FOURCC('E','G','L','I')
/** ISP image statistics format
*/
#define MMAL_ENCODING_BRCM_STATS MMAL_FOURCC('S','T','A','T')
/* }@ */
/** \name Pre-defined audio encodings */
/* @{ */
#define MMAL_ENCODING_PCM_UNSIGNED_BE MMAL_FOURCC('P','C','M','U')
#define MMAL_ENCODING_PCM_UNSIGNED_LE MMAL_FOURCC('p','c','m','u')
#define MMAL_ENCODING_PCM_SIGNED_BE MMAL_FOURCC('P','C','M','S')
#define MMAL_ENCODING_PCM_SIGNED_LE MMAL_FOURCC('p','c','m','s')
#define MMAL_ENCODING_PCM_FLOAT_BE MMAL_FOURCC('P','C','M','F')
#define MMAL_ENCODING_PCM_FLOAT_LE MMAL_FOURCC('p','c','m','f')
/* Defines for native endianness */
#ifdef MMAL_IS_BIG_ENDIAN
#define MMAL_ENCODING_PCM_UNSIGNED MMAL_ENCODING_PCM_UNSIGNED_BE
#define MMAL_ENCODING_PCM_SIGNED MMAL_ENCODING_PCM_SIGNED_BE
#define MMAL_ENCODING_PCM_FLOAT MMAL_ENCODING_PCM_FLOAT_BE
#else
#define MMAL_ENCODING_PCM_UNSIGNED MMAL_ENCODING_PCM_UNSIGNED_LE
#define MMAL_ENCODING_PCM_SIGNED MMAL_ENCODING_PCM_SIGNED_LE
#define MMAL_ENCODING_PCM_FLOAT MMAL_ENCODING_PCM_FLOAT_LE
#endif
#define MMAL_ENCODING_MP4A MMAL_FOURCC('M','P','4','A')
#define MMAL_ENCODING_MPGA MMAL_FOURCC('M','P','G','A')
#define MMAL_ENCODING_ALAW MMAL_FOURCC('A','L','A','W')
#define MMAL_ENCODING_MULAW MMAL_FOURCC('U','L','A','W')
#define MMAL_ENCODING_ADPCM_MS MMAL_FOURCC('M','S',0x0,0x2)
#define MMAL_ENCODING_ADPCM_IMA_MS MMAL_FOURCC('M','S',0x0,0x1)
#define MMAL_ENCODING_ADPCM_SWF MMAL_FOURCC('A','S','W','F')
#define MMAL_ENCODING_WMA1 MMAL_FOURCC('W','M','A','1')
#define MMAL_ENCODING_WMA2 MMAL_FOURCC('W','M','A','2')
#define MMAL_ENCODING_WMAP MMAL_FOURCC('W','M','A','P')
#define MMAL_ENCODING_WMAL MMAL_FOURCC('W','M','A','L')
#define MMAL_ENCODING_WMAV MMAL_FOURCC('W','M','A','V')
#define MMAL_ENCODING_AMRNB MMAL_FOURCC('A','M','R','N')
#define MMAL_ENCODING_AMRWB MMAL_FOURCC('A','M','R','W')
#define MMAL_ENCODING_AMRWBP MMAL_FOURCC('A','M','R','P')
#define MMAL_ENCODING_AC3 MMAL_FOURCC('A','C','3',' ')
#define MMAL_ENCODING_EAC3 MMAL_FOURCC('E','A','C','3')
#define MMAL_ENCODING_DTS MMAL_FOURCC('D','T','S',' ')
#define MMAL_ENCODING_MLP MMAL_FOURCC('M','L','P',' ')
#define MMAL_ENCODING_FLAC MMAL_FOURCC('F','L','A','C')
#define MMAL_ENCODING_VORBIS MMAL_FOURCC('V','O','R','B')
#define MMAL_ENCODING_SPEEX MMAL_FOURCC('S','P','X',' ')
#define MMAL_ENCODING_ATRAC3 MMAL_FOURCC('A','T','R','3')
#define MMAL_ENCODING_ATRACX MMAL_FOURCC('A','T','R','X')
#define MMAL_ENCODING_ATRACL MMAL_FOURCC('A','T','R','L')
#define MMAL_ENCODING_MIDI MMAL_FOURCC('M','I','D','I')
#define MMAL_ENCODING_EVRC MMAL_FOURCC('E','V','R','C')
#define MMAL_ENCODING_NELLYMOSER MMAL_FOURCC('N','E','L','Y')
#define MMAL_ENCODING_QCELP MMAL_FOURCC('Q','C','E','L')
#define MMAL_ENCODING_MP4V_DIVX_DRM MMAL_FOURCC('M','4','V','D')
/* @} */
/* @} MmalEncodings List */
/** \defgroup MmalEncodingVariants List of pre-defined encoding variants
* This defines a list of common encoding variants. This list isn't exhaustive and is only
* provided as a convenience to avoid clients having to use FourCC codes directly.
* However components are allowed to define and use their own FourCC codes. */
/* @{ */
/** \name Pre-defined H264 encoding variants */
/* @{ */
/** ISO 14496-10 Annex B byte stream format */
#define MMAL_ENCODING_VARIANT_H264_DEFAULT 0
/** ISO 14496-15 AVC stream format */
#define MMAL_ENCODING_VARIANT_H264_AVC1 MMAL_FOURCC('A','V','C','1')
/** Implicitly delineated NAL units without emulation prevention */
#define MMAL_ENCODING_VARIANT_H264_RAW MMAL_FOURCC('R','A','W',' ')
/* @} */
/** \name Pre-defined MPEG4 audio encoding variants */
/* @{ */
/** Raw stream format */
#define MMAL_ENCODING_VARIANT_MP4A_DEFAULT 0
/** ADTS stream format */
#define MMAL_ENCODING_VARIANT_MP4A_ADTS MMAL_FOURCC('A','D','T','S')
/* @} */
/* @} MmalEncodingVariants List */
/** \defgroup MmalColorSpace List of pre-defined video color spaces
* This defines a list of common color spaces. This list isn't exhaustive and is only
* provided as a convenience to avoid clients having to use FourCC codes directly.
* However components are allowed to define and use their own FourCC codes. */
/* @{ */
/** Unknown color space */
#define MMAL_COLOR_SPACE_UNKNOWN 0
/** ITU-R BT.601-5 [SDTV] */
#define MMAL_COLOR_SPACE_ITUR_BT601 MMAL_FOURCC('Y','6','0','1')
/** ITU-R BT.709-3 [HDTV] */
#define MMAL_COLOR_SPACE_ITUR_BT709 MMAL_FOURCC('Y','7','0','9')
/** JPEG JFIF */
#define MMAL_COLOR_SPACE_JPEG_JFIF MMAL_FOURCC('Y','J','F','I')
/** Title 47 Code of Federal Regulations (2003) 73.682 (a) (20) */
#define MMAL_COLOR_SPACE_FCC MMAL_FOURCC('Y','F','C','C')
/** Society of Motion Picture and Television Engineers 240M (1999) */
#define MMAL_COLOR_SPACE_SMPTE240M MMAL_FOURCC('Y','2','4','0')
/** ITU-R BT.470-2 System M */
#define MMAL_COLOR_SPACE_BT470_2_M MMAL_FOURCC('Y','_','_','M')
/** ITU-R BT.470-2 System BG */
#define MMAL_COLOR_SPACE_BT470_2_BG MMAL_FOURCC('Y','_','B','G')
/** JPEG JFIF, but with 16..255 luma */
#define MMAL_COLOR_SPACE_JFIF_Y16_255 MMAL_FOURCC('Y','Y','1','6')
/** Rec2020 */
#define MMAL_COLOR_SPACE_REC2020 MMAL_FOURCC('2','0','2','0')
/* @} MmalColorSpace List */
#endif /* MMAL_ENCODINGS_H */