/usr/include/libbluray/overlay.h is in libbluray-dev 1:0.6.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | /*
* This file is part of libbluray
* Copyright (C) 2010-2012 Petri Hintukainen <phintuka@users.sourceforge.net>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* <http://www.gnu.org/licenses/>.
*/
#ifndef BD_OVERLAY_H_
#define BD_OVERLAY_H_
#include <stdint.h>
#define BD_OVERLAY_INTERFACE_VERSION 2
typedef enum {
BD_OVERLAY_PG = 0, /* Presentation Graphics plane */
BD_OVERLAY_IG = 1, /* Interactive Graphics plane (on top of PG plane) */
} bd_overlay_plane_e;
typedef enum {
/* following events are executed immediately */
BD_OVERLAY_INIT = 0, /* init overlay plane. Size and position of plane in x,y,w,h */
BD_OVERLAY_CLOSE = 5, /* close overlay plane */
/* following events can be processed immediately, but changes
* should not be flushed to display before next FLUSH event
*/
BD_OVERLAY_CLEAR = 1, /* clear plane */
BD_OVERLAY_DRAW = 2, /* draw bitmap (x,y,w,h,img,palette,crop) */
BD_OVERLAY_WIPE = 3, /* clear area (x,y,w,h) */
BD_OVERLAY_HIDE = 6, /* overlay is empty and can be hidden */
BD_OVERLAY_FLUSH = 4, /* all changes have been done, flush overlay to display at given pts */
} bd_overlay_cmd_e;
/*
* Compressed YUV overlays
*/
typedef struct bd_pg_palette_entry_s {
uint8_t Y;
uint8_t Cr;
uint8_t Cb;
uint8_t T;
} BD_PG_PALETTE_ENTRY;
typedef struct bd_pg_rle_elem_s {
uint16_t len;
uint16_t color;
} BD_PG_RLE_ELEM;
typedef struct bd_overlay_s {
int64_t pts;
uint8_t plane; /* bd_overlay_plane_e */
uint8_t cmd; /* bd_overlay_cmd_e */
uint16_t x;
uint16_t y;
uint16_t w;
uint16_t h;
const BD_PG_PALETTE_ENTRY * palette;
const BD_PG_RLE_ELEM * img;
uint16_t crop_x; /* deprecated: cropping is executed by libbluray */
uint16_t crop_y; /* deprecated: cropping is executed by libbluray */
uint16_t crop_w; /* deprecated: cropping is executed by libbluray */
uint16_t crop_h; /* deprecated: cropping is executed by libbluray */
uint8_t palette_update_flag; /* only palette was changed */
} BD_OVERLAY;
/*
RLE images are reference-counted. If application caches rle data for later use,
it needs to use bd_refcnt_inc() and bd_refcnt_dec().
*/
void bd_refcnt_inc(const void *);
void bd_refcnt_dec(const void *);
#if 0
BD_OVERLAY *bd_overlay_copy(const BD_OVERLAY *src)
{
BD_OVERLAY *ov = malloc(sizeof(*ov));
memcpy(ov, src, sizeof(*ov));
if (ov->palette) {
ov->palette = malloc(256 * sizeof(BD_PG_PALETTE_ENTRY));
memcpy((void*)ov->palette, src->palette, 256 * sizeof(BD_PG_PALETTE_ENTRY));
}
if (ov->img) {
bd_refcnt_inc(ov->img);
}
return ov;
}
void bd_overlay_free(BD_OVERLAY **pov)
{
if (pov && *pov) {
BD_OVERLAY *ov = *pov;
void *p = (void*)ov->palette;
bd_refcnt_dec(ov->img);
X_FREE(p);
ov->palette = NULL;
X_FREE(*pov);
}
}
#endif
/*
* ARGB overlays
*/
typedef enum {
/* following events are executed immediately */
BD_ARGB_OVERLAY_INIT = 0, /* init overlay plane. Size and position of plane in x,y,w,h */
BD_ARGB_OVERLAY_CLOSE = 5, /* close overlay */
/* following events can be processed immediately, but changes
* should not be flushed to display before next FLUSH event
*/
BD_ARGB_OVERLAY_DRAW = 2, /* draw image */
BD_ARGB_OVERLAY_FLUSH = 4, /* all changes have been done, flush overlay to display at given pts */
} bd_argb_overlay_cmd_e;
typedef struct bd_argb_overlay_s {
int64_t pts;
uint8_t plane; /* bd_overlay_plane_e */
uint8_t cmd; /* bd_argb_overlay_cmd_e */
/* following fileds are used only when not using application-allocated
* frame buffer
*/
/* destination clip on the overlay plane
*/
uint16_t x;
uint16_t y;
uint16_t w;
uint16_t h;
const uint32_t * argb; /* 'h' lines, line length 'stride' pixels */
uint16_t stride; /* buffer stride */
} BD_ARGB_OVERLAY;
/*
* Application-allocated frame buffer for ARGB overlays
*
* When using application-allocated frame buffer DRAW events are
* executed by libbluray.
* Application needs to handle only OPEN/FLUSH/CLOSE events.
*
* DRAW events can still be used for optimizations.
*/
typedef struct bd_argb_buffer_s {
/* optional lock / unlock functions
* - Set by application
* - Called when buffer is accessed or modified
*/
void (*lock) (struct bd_argb_buffer_s *);
void (*unlock)(struct bd_argb_buffer_s *);
/* ARGB frame buffers
* - Allocated by application (BD_ARGB_OVERLAY_INIT).
* - Buffer can be freed after BD_ARGB_OVERLAY_CLOSE.
* - buffer can be replaced in overlay callback or lock().
*/
uint32_t *buf[2]; /* [0] - PG plane, [1] - IG plane */
/* size of buffers
* - Set by application
* - If the buffer size is smaller than the size requested in BD_ARGB_OVERLAY_INIT,
* the buffer points only to the dirty area.
*/
int width;
int height;
/* dirty area of frame buffers
* - Updated by library before lock() call.
* - Reset after each BD_ARGB_OVERLAY_FLUSH.
*/
struct {
uint16_t x0, y0, x1, y1;
} dirty[2]; /* [0] - PG plane, [1] - IG plane */
} BD_ARGB_BUFFER;
#endif // BD_OVERLAY_H_
|