My Project
/home/jvcleave/Desktop/RASPBERRY_PI/userland/interface/mmal/mmal_format.h
00001 /*
00002 Copyright (c) 2012, Broadcom Europe Ltd
00003 All rights reserved.
00004 
00005 Redistribution and use in source and binary forms, with or without
00006 modification, are permitted provided that the following conditions are met:
00007     * Redistributions of source code must retain the above copyright
00008       notice, this list of conditions and the following disclaimer.
00009     * Redistributions in binary form must reproduce the above copyright
00010       notice, this list of conditions and the following disclaimer in the
00011       documentation and/or other materials provided with the distribution.
00012     * Neither the name of the copyright holder nor the
00013       names of its contributors may be used to endorse or promote products
00014       derived from this software without specific prior written permission.
00015 
00016 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
00017 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
00018 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00019 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
00020 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00021 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00022 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00023 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00024 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00025 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00026 */
00027 
00028 #ifndef MMAL_FORMAT_H
00029 #define MMAL_FORMAT_H
00030 
00031 #ifdef __cplusplus
00032 extern "C" {
00033 #endif
00034 
00037 /* @{ */
00038 
00039 #include "mmal_types.h"
00040 #include "mmal_encodings.h"
00041 
00044 typedef enum {
00045    MMAL_ES_TYPE_UNKNOWN,     
00046    MMAL_ES_TYPE_CONTROL,     
00047    MMAL_ES_TYPE_AUDIO,       
00048    MMAL_ES_TYPE_VIDEO,       
00049    MMAL_ES_TYPE_SUBPICTURE   
00050 } MMAL_ES_TYPE_T;
00051 
00054 typedef struct
00055 {
00056    uint32_t        width;        
00057    uint32_t        height;       
00058    MMAL_RECT_T     crop;         
00059    MMAL_RATIONAL_T frame_rate;   
00060    MMAL_RATIONAL_T par;          
00062    MMAL_FOURCC_T   color_space;  
00067 } MMAL_VIDEO_FORMAT_T;
00068 
00071 typedef struct MMAL_AUDIO_FORMAT_T
00072 {
00073    uint32_t channels;           
00074    uint32_t sample_rate;        
00076    uint32_t bits_per_sample;    
00077    uint32_t block_align;        
00081 } MMAL_AUDIO_FORMAT_T;
00082 
00085 typedef struct
00086 {
00087    uint32_t x_offset;        
00088    uint32_t y_offset;        
00092 } MMAL_SUBPICTURE_FORMAT_T;
00093 
00096 typedef union
00097 {
00098    MMAL_AUDIO_FORMAT_T      audio;      
00099    MMAL_VIDEO_FORMAT_T      video;      
00100    MMAL_SUBPICTURE_FORMAT_T subpicture; 
00101 } MMAL_ES_SPECIFIC_FORMAT_T;
00102 
00106 /* @{ */
00107 #define MMAL_ES_FORMAT_FLAG_FRAMED       0x1 
00108 /* @} */
00109 
00113 /* @{ */
00114 #define MMAL_ENCODING_UNKNOWN            0
00115 /* @} */
00116 
00120 /* @{ */
00121 #define MMAL_ENCODING_VARIANT_DEFAULT    0
00122 /* @} */
00123 
00125 typedef struct MMAL_ES_FORMAT_T
00126 {
00127    MMAL_ES_TYPE_T type;           
00129    MMAL_FOURCC_T encoding;        
00133    MMAL_FOURCC_T encoding_variant;
00138    MMAL_ES_SPECIFIC_FORMAT_T *es; 
00140    uint32_t bitrate;              
00141    uint32_t flags;                
00145    uint32_t extradata_size;       
00146    uint8_t  *extradata;           
00148 } MMAL_ES_FORMAT_T;
00149 
00154 MMAL_ES_FORMAT_T *mmal_format_alloc(void);
00155 
00160 void mmal_format_free(MMAL_ES_FORMAT_T *format);
00161 
00170 MMAL_STATUS_T mmal_format_extradata_alloc(MMAL_ES_FORMAT_T *format, unsigned int size);
00171 
00178 void mmal_format_copy(MMAL_ES_FORMAT_T *format_dest, MMAL_ES_FORMAT_T *format_src);
00179 
00186 MMAL_STATUS_T mmal_format_full_copy(MMAL_ES_FORMAT_T *format_dest, MMAL_ES_FORMAT_T *format_src);
00187 
00191 /* @{ */
00192 #define MMAL_ES_FORMAT_COMPARE_FLAG_TYPE              0x01 
00193 #define MMAL_ES_FORMAT_COMPARE_FLAG_ENCODING          0x02 
00194 #define MMAL_ES_FORMAT_COMPARE_FLAG_BITRATE           0x04 
00195 #define MMAL_ES_FORMAT_COMPARE_FLAG_FLAGS             0x08 
00196 #define MMAL_ES_FORMAT_COMPARE_FLAG_EXTRADATA         0x10 
00198 #define MMAL_ES_FORMAT_COMPARE_FLAG_VIDEO_RESOLUTION   0x0100 
00199 #define MMAL_ES_FORMAT_COMPARE_FLAG_VIDEO_CROPPING     0x0200 
00200 #define MMAL_ES_FORMAT_COMPARE_FLAG_VIDEO_FRAME_RATE   0x0400 
00201 #define MMAL_ES_FORMAT_COMPARE_FLAG_VIDEO_ASPECT_RATIO 0x0800 
00202 #define MMAL_ES_FORMAT_COMPARE_FLAG_VIDEO_COLOR_SPACE  0x1000 
00204 #define MMAL_ES_FORMAT_COMPARE_FLAG_ES_OTHER  0x10000000 
00205 /* @} */
00206 
00215 uint32_t mmal_format_compare(MMAL_ES_FORMAT_T *format_1, MMAL_ES_FORMAT_T *format_2);
00216 
00217 /* @} */
00218 
00219 #ifdef __cplusplus
00220 }
00221 #endif
00222 
00223 #endif /* MMAL_FORMAT_H */
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines