00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef VLC_ES_H
00025 #define VLC_ES_H 1
00026
00027 #include <vlc_fourcc.h>
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 struct video_palette_t
00040 {
00041 int i_entries;
00042 uint8_t palette[256][4];
00043 };
00044
00045
00046
00047
00048 #define AUDIO_REPLAY_GAIN_MAX (2)
00049 #define AUDIO_REPLAY_GAIN_TRACK (0)
00050 #define AUDIO_REPLAY_GAIN_ALBUM (1)
00051 typedef struct
00052 {
00053
00054 bool pb_peak[AUDIO_REPLAY_GAIN_MAX];
00055
00056 float pf_peak[AUDIO_REPLAY_GAIN_MAX];
00057
00058
00059 bool pb_gain[AUDIO_REPLAY_GAIN_MAX];
00060
00061 float pf_gain[AUDIO_REPLAY_GAIN_MAX];
00062 } audio_replay_gain_t;
00063
00064
00065
00066
00067 struct audio_format_t
00068 {
00069 vlc_fourcc_t i_format;
00070 unsigned int i_rate;
00071
00072
00073
00074 uint16_t i_physical_channels;
00075
00076
00077
00078 uint32_t i_original_channels;
00079
00080
00081
00082 unsigned int i_bytes_per_frame;
00083
00084
00085 unsigned int i_frame_length;
00086
00087
00088
00089
00090
00091
00092
00093 unsigned i_bitspersample;
00094 unsigned i_blockalign;
00095 uint8_t i_channels;
00096 };
00097
00098
00099 #define AOUT_CHAN_CENTER 0x1
00100 #define AOUT_CHAN_LEFT 0x2
00101 #define AOUT_CHAN_RIGHT 0x4
00102 #define AOUT_CHAN_REARCENTER 0x10
00103 #define AOUT_CHAN_REARLEFT 0x20
00104 #define AOUT_CHAN_REARRIGHT 0x40
00105 #define AOUT_CHAN_MIDDLELEFT 0x100
00106 #define AOUT_CHAN_MIDDLERIGHT 0x200
00107 #define AOUT_CHAN_LFE 0x1000
00108
00109 #define AOUT_CHANS_FRONT (AOUT_CHAN_LEFT | AOUT_CHAN_RIGHT)
00110 #define AOUT_CHANS_MIDDLE (AOUT_CHAN_MIDDLELEFT | AOUT_CHAN_MIDDLERIGHT)
00111 #define AOUT_CHANS_REAR (AOUT_CHAN_REARLEFT | AOUT_CHAN_REARRIGHT)
00112 #define AOUT_CHANS_CENTER (AOUT_CHAN_CENTER | AOUT_CHAN_REARCENTER)
00113
00114 #define AOUT_CHANS_STEREO AOUT_CHANS_2_0
00115 #define AOUT_CHANS_2_0 (AOUT_CHANS_FRONT)
00116 #define AOUT_CHANS_2_1 (AOUT_CHANS_FRONT | AOUT_CHAN_LFE)
00117 #define AOUT_CHANS_3_0 (AOUT_CHANS_FRONT | AOUT_CHAN_CENTER)
00118 #define AOUT_CHANS_3_1 (AOUT_CHANS_3_0 | AOUT_CHAN_LFE)
00119 #define AOUT_CHANS_4_0 (AOUT_CHANS_FRONT | AOUT_CHANS_REAR)
00120 #define AOUT_CHANS_4_1 (AOUT_CHANS_4_0 | AOUT_CHAN_LFE)
00121 #define AOUT_CHANS_5_0 (AOUT_CHANS_4_0 | AOUT_CHAN_CENTER)
00122 #define AOUT_CHANS_5_1 (AOUT_CHANS_5_0 | AOUT_CHAN_LFE)
00123 #define AOUT_CHANS_6_0 (AOUT_CHANS_4_0 | AOUT_CHANS_MIDDLE)
00124 #define AOUT_CHANS_7_0 (AOUT_CHANS_6_0 | AOUT_CHAN_CENTER)
00125 #define AOUT_CHANS_7_1 (AOUT_CHANS_5_1 | AOUT_CHANS_MIDDLE)
00126
00127 #define AOUT_CHANS_4_0_MIDDLE (AOUT_CHANS_FRONT | AOUT_CHANS_MIDDLE)
00128 #define AOUT_CHANS_4_CENTER_REAR (AOUT_CHANS_FRONT | AOUT_CHANS_CENTER)
00129 #define AOUT_CHANS_5_0_MIDDLE (AOUT_CHANS_4_0_MIDDLE | AOUT_CHAN_CENTER)
00130
00131
00132 #define AOUT_CHAN_DOLBYSTEREO 0x10000
00133 #define AOUT_CHAN_DUALMONO 0x20000
00134 #define AOUT_CHAN_REVERSESTEREO 0x40000
00135
00136 #define AOUT_CHAN_PHYSMASK 0xFFFF
00137 #define AOUT_CHAN_MAX 9
00138
00139
00140
00141
00142 typedef enum video_orientation_t
00143 {
00144 ORIENT_TOP_LEFT = 0,
00145 ORIENT_TOP_RIGHT,
00146 ORIENT_BOTTOM_LEFT,
00147 ORIENT_BOTTOM_RIGHT,
00148 ORIENT_LEFT_TOP,
00149 ORIENT_LEFT_BOTTOM,
00150 ORIENT_RIGHT_TOP,
00151 ORIENT_RIGHT_BOTTOM,
00152
00153 ORIENT_NORMAL = ORIENT_TOP_LEFT,
00154 ORIENT_HFLIPPED = ORIENT_TOP_RIGHT,
00155 ORIENT_VFLIPPED = ORIENT_BOTTOM_LEFT,
00156 ORIENT_ROTATED_180 = ORIENT_BOTTOM_RIGHT,
00157 ORIENT_ROTATED_270 = ORIENT_LEFT_BOTTOM,
00158 ORIENT_ROTATED_90 = ORIENT_RIGHT_TOP,
00159 } video_orientation_t;
00160
00161 #define ORIENT_FROM_EXIF(exif) ((0x01324675U >> (4 * ((exif) - 1))) & 7)
00162
00163 #define ORIENT_TO_EXIF(orient) ((0x12435867U >> (4 * (orient))) & 15)
00164
00165 #define ORIENT_IS_MIRROR(orient) parity(orient)
00166
00167 #define ORIENT_IS_SWAP(orient) (((orient) & 4) != 0)
00168
00169 #define ORIENT_HFLIP(orient) ((orient) ^ 1)
00170
00171 #define ORIENT_VFLIP(orient) ((orient) ^ 2)
00172
00173 #define ORIENT_ROTATE_180(orient) ((orient) ^ 3)
00174
00175
00176
00177
00178 struct video_format_t
00179 {
00180 vlc_fourcc_t i_chroma;
00181
00182 unsigned int i_width;
00183 unsigned int i_height;
00184 unsigned int i_x_offset;
00185 unsigned int i_y_offset;
00186 unsigned int i_visible_width;
00187 unsigned int i_visible_height;
00188
00189 unsigned int i_bits_per_pixel;
00190
00191 unsigned int i_sar_num;
00192 unsigned int i_sar_den;
00193
00194 unsigned int i_frame_rate;
00195 unsigned int i_frame_rate_base;
00196
00197 uint32_t i_rmask, i_gmask, i_bmask;
00198 int i_rrshift, i_lrshift;
00199 int i_rgshift, i_lgshift;
00200 int i_rbshift, i_lbshift;
00201 video_palette_t *p_palette;
00202 video_orientation_t orientation;
00203 };
00204
00205
00206
00207
00208
00209
00210 static inline void video_format_Init( video_format_t *p_src, vlc_fourcc_t i_chroma )
00211 {
00212 memset( p_src, 0, sizeof( video_format_t ) );
00213 p_src->i_chroma = i_chroma;
00214 p_src->i_sar_num = p_src->i_sar_den = 1;
00215 p_src->p_palette = NULL;
00216 }
00217
00218
00219
00220
00221
00222
00223 static inline int video_format_Copy( video_format_t *p_dst, const video_format_t *p_src )
00224 {
00225 memcpy( p_dst, p_src, sizeof( *p_dst ) );
00226 if( p_src->p_palette )
00227 {
00228 p_dst->p_palette = (video_palette_t *) malloc( sizeof( video_palette_t ) );
00229 if( !p_dst->p_palette )
00230 return VLC_ENOMEM;
00231 memcpy( p_dst->p_palette, p_src->p_palette, sizeof( *p_dst->p_palette ) );
00232 }
00233 return VLC_SUCCESS;
00234 }
00235
00236
00237
00238
00239
00240 static inline void video_format_Clean( video_format_t *p_src )
00241 {
00242 free( p_src->p_palette );
00243 memset( p_src, 0, sizeof( video_format_t ) );
00244 p_src->p_palette = NULL;
00245 }
00246
00247
00248
00249
00250
00251 VLC_API void video_format_Setup( video_format_t *, vlc_fourcc_t i_chroma, int i_width, int i_height, int i_sar_num, int i_sar_den );
00252
00253
00254
00255
00256 VLC_API void video_format_CopyCrop( video_format_t *, const video_format_t * );
00257
00258
00259
00260
00261 VLC_API void video_format_ScaleCropAr( video_format_t *, const video_format_t * );
00262
00263
00264
00265
00266
00267 VLC_API bool video_format_IsSimilar( const video_format_t *, const video_format_t * );
00268
00269
00270
00271
00272 VLC_API void video_format_Print( vlc_object_t *, const char *, const video_format_t * );
00273
00274
00275
00276
00277 struct subs_format_t
00278 {
00279
00280
00281 char *psz_encoding;
00282
00283
00284 int i_x_origin;
00285 int i_y_origin;
00286
00287 struct
00288 {
00289
00290 uint32_t palette[16+1];
00291
00292
00293 int i_original_frame_width;
00294
00295 int i_original_frame_height;
00296 } spu;
00297
00298 struct
00299 {
00300 int i_id;
00301 } dvb;
00302 struct
00303 {
00304 int i_magazine;
00305 int i_page;
00306 } teletext;
00307 };
00308
00309
00310
00311
00312 typedef struct extra_languages_t
00313 {
00314 char *psz_language;
00315 char *psz_description;
00316 } extra_languages_t;
00317
00318
00319
00320
00321 struct es_format_t
00322 {
00323 int i_cat;
00324 vlc_fourcc_t i_codec;
00325 vlc_fourcc_t i_original_fourcc;
00326
00327 int i_id;
00328
00329
00330 int i_group;
00331
00332
00333
00334 int i_priority;
00335
00336
00337
00338
00339
00340 char *psz_language;
00341 char *psz_description;
00342 int i_extra_languages;
00343 extra_languages_t *p_extra_languages;
00344
00345 audio_format_t audio;
00346 audio_replay_gain_t audio_replay_gain;
00347 video_format_t video;
00348 subs_format_t subs;
00349
00350 unsigned int i_bitrate;
00351 int i_profile;
00352 int i_level;
00353
00354 bool b_packetized;
00355 int i_extra;
00356 void *p_extra;
00357
00358 };
00359
00360
00361 enum es_format_category_e
00362 {
00363 UNKNOWN_ES = 0x00,
00364 VIDEO_ES = 0x01,
00365 AUDIO_ES = 0x02,
00366 SPU_ES = 0x03,
00367 NAV_ES = 0x04,
00368 };
00369
00370
00371
00372
00373 VLC_API void video_format_FixRgb( video_format_t * );
00374
00375
00376
00377
00378 VLC_API void es_format_Init( es_format_t *, int i_cat, vlc_fourcc_t i_codec );
00379
00380
00381
00382
00383 VLC_API void es_format_InitFromVideo( es_format_t *, const video_format_t * );
00384
00385
00386
00387
00388 VLC_API int es_format_Copy( es_format_t *p_dst, const es_format_t *p_src );
00389
00390
00391
00392
00393
00394
00395 VLC_API void es_format_Clean( es_format_t *fmt );
00396
00397
00398
00399
00400
00401
00402
00403 VLC_API bool es_format_IsSimilar( const es_format_t *, const es_format_t * );
00404
00405 #endif