X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_es.h;h=5790d2343b22322d1f5e4965697dbc3d5a0e378c;hb=ff2d06c6e931321f64943e027db06422642d28b0;hp=38d63da94b24a207fd5dff3cac8d3261a46c3791;hpb=b07ed16e1289758bef39c1122b085b5842b6f0f4;p=vlc diff --git a/include/vlc_es.h b/include/vlc_es.h index 38d63da94b..5790d2343b 100644 --- a/include/vlc_es.h +++ b/include/vlc_es.h @@ -25,6 +25,7 @@ #define VLC_ES_H 1 #include +#include /** * \file @@ -36,10 +37,12 @@ * \see video_format_t * \see subs_format_t */ +#define VIDEO_PALETTE_COLORS_MAX 256 + struct video_palette_t { int i_entries; /**< to keep the compatibility with libavcodec's palette */ - uint8_t palette[256][4]; /**< 4-byte RGBA/YUVA palette */ + uint8_t palette[VIDEO_PALETTE_COLORS_MAX][4]; /**< 4-byte RGBA/YUVA palette */ }; /** @@ -153,6 +156,8 @@ typedef enum video_orientation_t ORIENT_RIGHT_BOTTOM, /**< Anti-transposed */ ORIENT_NORMAL = ORIENT_TOP_LEFT, + ORIENT_TRANSPOSED = ORIENT_LEFT_TOP, + ORIENT_ANTI_TRANSPOSED = ORIENT_RIGHT_BOTTOM, ORIENT_HFLIPPED = ORIENT_TOP_RIGHT, ORIENT_VFLIPPED = ORIENT_BOTTOM_LEFT, ORIENT_ROTATED_180 = ORIENT_BOTTOM_RIGHT, @@ -174,6 +179,18 @@ typedef enum video_orientation_t /** Applies horizontal flip to an orientation */ #define ORIENT_ROTATE_180(orient) ((orient) ^ 3) +typedef enum video_transform_t +{ + TRANSFORM_IDENTITY = ORIENT_NORMAL, + TRANSFORM_HFLIP = ORIENT_HFLIPPED, + TRANSFORM_VFLIP = ORIENT_VFLIPPED, + TRANSFORM_R180 = ORIENT_ROTATED_180, + TRANSFORM_R270 = ORIENT_ROTATED_270, + TRANSFORM_R90 = ORIENT_ROTATED_90, + TRANSFORM_TRANSPOSE = ORIENT_TRANSPOSED, + TRANSFORM_ANTI_TRANSPOSE = ORIENT_ANTI_TRANSPOSED +} video_transform_t; + /** * video format description */ @@ -264,6 +281,28 @@ VLC_API void video_format_CopyCrop( video_format_t *, const video_format_t * ); */ VLC_API void video_format_ScaleCropAr( video_format_t *, const video_format_t * ); +/** + * This function "normalizes" the formats orientation, by switching the a/r according to the orientation, + * producing a format whose orientation is ORIENT_NORMAL. It makes a shallow copy (pallette is not alloc'ed). + */ +VLC_API void video_format_ApplyRotation(video_format_t *restrict out, const video_format_t *restrict in); + +/** + * This function applies the transform operation to fmt. + */ +VLC_API void video_format_TransformBy(video_format_t *fmt, video_transform_t transform); + +/** + * This function applies the transforms necessary to fmt so that the resulting fmt + * has the dst_orientation. + */ +VLC_API void video_format_TransformTo(video_format_t *fmt, video_orientation_t dst_orientation); + +/** + * Returns the operation required to transform src into dst. + */ +VLC_API video_transform_t video_format_GetTransform(video_orientation_t src, video_orientation_t dst); + /** * This function will check if the first video format is similar * to the second one. @@ -275,6 +314,18 @@ VLC_API bool video_format_IsSimilar( const video_format_t *, const video_format_ */ VLC_API void video_format_Print( vlc_object_t *, const char *, const video_format_t * ); + +static inline video_transform_t transform_Inverse( video_transform_t transform ) +{ + switch ( transform ) { + case TRANSFORM_R90: + return TRANSFORM_R270; + case TRANSFORM_R270: + return TRANSFORM_R90; + default: + return transform; + } +} /** * subtitles format description */ @@ -308,6 +359,8 @@ struct subs_format_t int i_magazine; int i_page; } teletext; + + text_style_t *p_style; /* Default styles to use */ }; /** @@ -369,11 +422,12 @@ struct es_format_t enum es_format_category_e { UNKNOWN_ES = 0x00, - VIDEO_ES = 0x01, - AUDIO_ES = 0x02, - SPU_ES = 0x03, - NAV_ES = 0x04, + VIDEO_ES, + AUDIO_ES, + SPU_ES, + NAV_ES, }; +#define ES_CATEGORY_COUNT (NAV_ES + 1) /** * This function will fill all RGB shift from RGB masks.