#if !defined(_VIDEO_OVERLAY_H_) #define _VIDEO_OVERLAY_H_ /* Copyright Be Incorporated. This file will eventually be merged into Accelerant.h once the API is finalized. */ #include #include #if defined(__cplusplus) extern "C" { #endif enum { B_SUPPORTS_OVERLAYS = 1U << 31 // part of display_mode.flags }; enum { B_OVERLAY_COUNT = 0x08000000, B_OVERLAY_SUPPORTED_SPACES, B_OVERLAY_SUPPORTED_FEATURES, B_ALLOCATE_OVERLAY_BUFFER, B_RELEASE_OVERLAY_BUFFER, B_GET_OVERLAY_CONSTRAINTS, B_ALLOCATE_OVERLAY, B_RELEASE_OVERLAY, B_CONFIGURE_OVERLAY }; typedef struct { uint32 space; /* color_space of buffer */ uint16 width; /* width in pixels */ uint16 height; /* height in lines */ uint32 bytes_per_row; /* number of bytes in one line */ void *buffer; /* pointer to first byte of overlay buffer in virtual memory */ void *buffer_dma; /* pointer to first byte of overlay buffer in physical memory for DMA */ } overlay_buffer; typedef struct { uint16 h_start; uint16 v_start; uint16 width; uint16 height; } overlay_view; enum { B_OVERLAY_COLOR_KEY = 1 << 0, B_OVERLAY_CHROMA_KEY = 1 << 1, B_OVERLAY_HORIZONTAL_FILTERING = 1 << 2, B_OVERLAY_VERTICAL_FILTERING = 1 << 3, B_OVERLAY_HORIZONTAL_MIRRORING = 1 << 4, B_OVERLAY_KEYING_USES_ALPHA = 1 << 5 }; typedef struct { uint8 value; /* if DAC color component of graphic pixel & mask == value, */ uint8 mask; /* then show overlay pixel, else show graphic pixel */ } overlay_key_color; typedef struct { int16 h_start; /* Top left un-clipped corner of the window in the virtual display */ int16 v_start; /* Note that these are _signed_ values */ uint16 width; /* un-clipped width of the overlay window */ uint16 height; /* un-clipped height of the overlay window */ uint16 offset_left; /* that portion of the overlay_window which is actually displayed */ uint16 offset_top; /* ie, the first line displayed is v_start + offset_top */ uint16 offset_right; /* and the first pixel displayed is h_start + offset_left */ uint16 offset_bottom; overlay_key_color red; /* when using color keying, all components must match */ overlay_key_color green; overlay_key_color blue; overlay_key_color alpha; uint32 flags; /* which features should be enabled. See enum above. */ } overlay_window; typedef struct { uint16 min; uint16 max; } overlay_uint16_minmax; typedef struct { float min; float max; } overlay_float_minmax; typedef struct { uint16 h_alignment; /* alignments: a 1 bit set in every bit which must be zero */ uint16 v_alignment; uint16 width_alignment; uint16 height_alignment; overlay_uint16_minmax width; /* min and max sizes in each axis */ overlay_uint16_minmax height; } overlay_limits; typedef struct { overlay_limits view; overlay_limits window; overlay_float_minmax h_scale; overlay_float_minmax v_scale; } overlay_constraints; typedef void * overlay_token; typedef uint32 (*overlay_count)(const display_mode *dm); typedef const uint32 *(*overlay_supported_spaces)(const display_mode *dm); typedef uint32 (*overlay_supported_features)(uint32 a_color_space); typedef const overlay_buffer *(*allocate_overlay_buffer)(color_space cs, uint16 width, uint16 height); typedef status_t (*release_overlay_buffer)(const overlay_buffer *ob); typedef status_t (*get_overlay_constraints)(const display_mode *dm, const overlay_buffer *ob, overlay_constraints *oc); typedef overlay_token (*allocate_overlay)(void); typedef status_t (*release_overlay)(overlay_token ot); typedef status_t (*configure_overlay)(overlay_token ot, const overlay_buffer *ob, const overlay_window *ow, const overlay_view *ov); #if defined(__cplusplus) } #endif #endif