VLC  3.0.15
vout_spuregion_helper.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * vout_spuregion_helper.h : vout subpicture region helpers
3  *****************************************************************************
4  * Copyright (C) 2017 VLC authors, VideoLAN and VideoLabs
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19  *****************************************************************************/
20 #include <vlc_image.h>
21 
22 #define RGB2YUV( R, G, B ) \
23  ((0.257 * R) + (0.504 * G) + (0.098 * B) + 16), \
24  (-(0.148 * R) - (0.291 * G) + (0.439 * B) + 128),\
25  ((0.439 * R) - (0.368 * G) - (0.071 * B) + 128)
26 
27 #define HEX2YUV( rgb ) \
28  RGB2YUV( (rgb >> 16), ((rgb & 0xFF00) >> 8), (rgb & 0xFF) )
29 
30 static inline void
31 spuregion_CreateVGradientPalette( video_palette_t *p_palette, uint8_t i_splits,
32  uint32_t argb1, uint32_t argb2 )
33 {
34  for( uint8_t i = 0; i<i_splits; i++ )
35  {
36  uint32_t rgb1 = argb1 & 0x00FFFFFF;
37  uint32_t rgb2 = argb2 & 0x00FFFFFF;
38 
39  uint32_t r = ((((rgb1 >> 16) * (i_splits - i)) + (rgb2 >> 16) * i)) / i_splits;
40  uint32_t g = (((((rgb1 >> 8) & 0xFF) * (i_splits - i)) + ((rgb2 >> 8) & 0xFF) * i)) / i_splits;
41  uint32_t b = ((((rgb1 & 0xFF) * (i_splits - i)) + (rgb2 & 0xFF) * i)) / i_splits;
42  uint8_t entry[4] = { RGB2YUV( r,g,b ), argb1 >> 24 };
43  memcpy( p_palette->palette[i], entry, 4 );
44  }
45  p_palette->i_entries = i_splits;
46 }
47 
48 static inline void
49 spuregion_CreateVGradientFill( plane_t *p, uint8_t i_splits )
50 {
51  const int i_split = p->i_visible_lines / i_splits;
52  const int i_left = p->i_visible_lines % i_splits + p->i_lines - p->i_visible_lines;
53  for( int i = 0; i<i_splits; i++ )
54  {
55  memset( &p->p_pixels[p->i_pitch * (i * i_split)],
56  i,
57  p->i_pitch * i_split );
58  }
59  memset( &p->p_pixels[p->i_pitch * (i_splits - 1) * i_split],
60  i_splits - 1,
61  p->i_pitch * i_left );
62 }
63 
64 
65 static inline subpicture_region_t *
67  const char *psz_uri )
68 {
71 
72  picture_t *p_pic = NULL;
73  int i_flags = p_this->obj.flags;
75  image_handler_t *p_image = image_HandlerCreate( p_this );
76  if( p_image )
77  {
78  p_pic = image_ReadUrl( p_image, psz_uri, &fmt_in, p_fmt );
79  image_HandlerDelete( p_image );
80  }
81  p_this->obj.flags = i_flags;
82 
83  if(!p_pic)
84  return NULL;
85 
87  if (!region)
88  return NULL;
89 
90  picture_Release( region->p_picture );
91  region->p_picture = p_pic;
92 
93  return region;
94 }
p_aspect_ratio_values
static const struct @95 p_aspect_ratio_values[]
vout_IntfInit
void vout_IntfInit(vout_thread_t *p_vout)
Definition: vout_intf.c:146
vout_ControlChangeZoom
void vout_ControlChangeZoom(vout_thread_t *vout, int num, int den)
Definition: video_output.c:495
VoutSnapshotPip
static int VoutSnapshotPip(vout_thread_t *p_vout, picture_t *p_pic)
This function will inject a subpicture into the vout with the provided picture.
Definition: vout_intf.c:331
p_zoom_values
static const struct @93 p_zoom_values[]
VOUT_SPU_CHANNEL_OSD
#define VOUT_SPU_CHANNEL_OSD
Definition: vlc_vout.h:156
subpicture_region_New
subpicture_region_t * subpicture_region_New(const video_format_t *p_fmt)
This function will create a new subpicture region.
Definition: subpicture.c:206
image_HandlerCreate
#define image_HandlerCreate(a)
Definition: vlc_image.h:64
VLC_VAR_SETTEXT
#define VLC_VAR_SETTEXT
Definition: vlc_variables.h:89
vout_ControlChangeSubMargin
void vout_ControlChangeSubMargin(vout_thread_t *vout, int margin)
Definition: video_output.c:551
FullscreenCallback
static int FullscreenCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:541
vlc_common.h
vout_OSDMessage
void vout_OSDMessage(vout_thread_t *vout, int channel, const char *format,...)
Write an informative message at the default location, for the default duration and only if the OSD op...
Definition: video_text.c:141
vout_snapshot_SaveImage
int vout_snapshot_SaveImage(char **name, int *sequential, const block_t *image, vout_thread_t *p_vout, const vout_snapshot_save_cfg_t *cfg)
This function will write an image to the disk an return the file name created.
Definition: snapshot.c:140
var_CreateGetNonEmptyString
#define var_CreateGetNonEmptyString(a, b)
Definition: vlc_variables.h:496
RGB2YUV
#define RGB2YUV(R, G, B)
Definition: vout_spuregion_helper.h:21
VLC_VAR_DOINHERIT
#define VLC_VAR_DOINHERIT
Creation flag.
Definition: vlc_variables.h:69
vlc_vout.h
vout_ControlChangeDisplayFilled
void vout_ControlChangeDisplayFilled(vout_thread_t *vout, bool is_filled)
Definition: video_output.c:490
video_palette_t::i_entries
int i_entries
to keep the compatibility with libavcodec's palette
Definition: vlc_es.h:46
var_TriggerCallback
#define var_TriggerCallback(a, b)
Definition: vlc_variables.h:166
filter_chain_t::fmt_in
es_format_t fmt_in
Chain input format (constant)
Definition: filter_chain.c:58
VLC_VAR_ADDCHOICE
#define VLC_VAR_ADDCHOICE
Definition: vlc_variables.h:96
subpicture_t::i_original_picture_height
int i_original_picture_height
original height of the movie
Definition: vlc_subpicture.h:186
OBJECT_FLAGS_NOINTERACT
#define OBJECT_FLAGS_NOINTERACT
Definition: vlc_objects.h:33
WallPaperCallback
static int WallPaperCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:522
vlc_value_t::p_address
void * p_address
Definition: vlc_common.h:331
var_InheritBool
#define var_InheritBool(o, n)
Definition: vlc_variables.h:601
vlc_charset.h
VoutSaveSnapshot
static void VoutSaveSnapshot(vout_thread_t *p_vout)
This function will handle a snapshot request.
Definition: vout_intf.c:372
VLC_VAR_BOOL
#define VLC_VAR_BOOL
Definition: vlc_variables.h:49
video_format_t
video format description
Definition: vlc_es.h:325
vlc_common_members::libvlc
libvlc_int_t * libvlc
LibVLC instance.
Definition: vlc_common.h:441
msg_Dbg
#define msg_Dbg(p_this,...)
Definition: vlc_messages.h:86
_
#define _(str)
Definition: vlc_fixups.h:371
vout_snapshot_save_cfg_t::prefix_fmt
char * prefix_fmt
Definition: snapshot.h:71
vout_snapshot_save_cfg_t::is_sequential
bool is_sequential
Definition: snapshot.h:67
image_ReadUrl
#define image_ReadUrl(a, b, c, d)
Definition: vlc_image.h:68
VLC_EGENERIC
#define VLC_EGENERIC
Unspecified error.
Definition: vlc_common.h:350
vout_ControlChangeFilters
void vout_ControlChangeFilters(vout_thread_t *vout, const char *filters)
Definition: video_output.c:536
VLC_VAR_ADDRESS
#define VLC_VAR_ADDRESS
Definition: vlc_variables.h:53
ARRAY_SIZE
#define ARRAY_SIZE(x)
Definition: vlc_arrays.h:162
spuregion_CreateFromPicture
static subpicture_region_t * spuregion_CreateFromPicture(vlc_object_t *p_this, video_format_t *p_fmt, const char *psz_uri)
Definition: vout_spuregion_helper.h:65
VLC_VAR_INTEGER
#define VLC_VAR_INTEGER
Definition: vlc_variables.h:50
SubSourceCallback
static int SubSourceCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:573
VLC_VAR_STRING
#define VLC_VAR_STRING
Definition: vlc_variables.h:51
picture_Release
void picture_Release(picture_t *p_picture)
This function will release a picture.
Definition: picture.c:300
vout_ControlChangeCropBorder
void vout_ControlChangeCropBorder(vout_thread_t *vout, int left, int top, int right, int bottom)
Definition: video_output.c:524
VLC_VAR_FLOAT
#define VLC_VAR_FLOAT
Definition: vlc_variables.h:52
OBJECT_FLAGS_QUIET
#define OBJECT_FLAGS_QUIET
Definition: vlc_objects.h:32
subpicture_NewFromPicture
subpicture_t * subpicture_NewFromPicture(vlc_object_t *p_obj, picture_t *p_picture, vlc_fourcc_t i_chroma)
This function will create a subpicture having one region in the requested chroma showing the given pi...
Definition: subpicture.c:101
VOUT_WINDOW_STATE_BELOW
Definition: vlc_vout_display.h:76
var_InheritString
#define var_InheritString(o, n)
Definition: vlc_variables.h:639
picture_t
Video picture.
Definition: vlc_picture.h:68
vlc_gettext
char * vlc_gettext(const char *msgid)
In-tree plugins share their gettext domain with LibVLC.
Definition: textdomain.c:89
vlc_value_t::i_int
int64_t i_int
Definition: vlc_common.h:327
var_Create
#define var_Create(a, b, c)
Definition: vlc_variables.h:121
vout_snapshot_save_cfg_t
Definition: snapshot.h:66
subpicture_t::i_channel
int i_channel
subpicture channel ID
Definition: vlc_subpicture.h:157
CropCallback
static int CropCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:436
SnapshotCallback
static int SnapshotCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:552
video_palette_t
Definition: vlc_es.h:44
vout_ControlChangeSampleAspectRatio
void vout_ControlChangeSampleAspectRatio(vout_thread_t *vout, unsigned num, unsigned den)
Definition: video_output.c:500
msg_Warn
#define msg_Warn(p_this,...)
Definition: vlc_messages.h:84
VLC_VAR_VOID
#define VLC_VAR_VOID
Definition: vlc_variables.h:48
vlc_value_t::b_bool
bool b_bool
Definition: vlc_common.h:328
VOUT_WINDOW_STATE_ABOVE
Definition: vlc_vout_display.h:75
vout_IntfReinit
void vout_IntfReinit(vout_thread_t *p_vout)
Definition: vout_intf.c:310
vlc_value_t::f_float
float f_float
Definition: vlc_common.h:329
vout_snapshot_save_cfg_t::format
char * format
Definition: snapshot.h:70
subpicture_t
Video subtitle.
Definition: vlc_subpicture.h:153
f_value
double f_value
Definition: vout_intf.c:81
vout_GetSnapshot
int vout_GetSnapshot(vout_thread_t *vout, block_t **image_dst, picture_t **picture_dst, video_format_t *fmt, const char *type, mtime_t timeout)
This function will handle a snapshot request.
Definition: video_output.c:441
vlc_strings.h
vout_snapshot_save_cfg_t::sequence
int sequence
Definition: snapshot.h:68
subpicture_region_t
Video subtitle region.
Definition: vlc_subpicture.h:57
block_Release
static void block_Release(block_t *block)
Releases a block.
Definition: vlc_block.h:181
VLC_VAR_ISCOMMAND
#define VLC_VAR_ISCOMMAND
Definition: vlc_variables.h:64
VOUT_WINDOW_STATE_NORMAL
Definition: vlc_vout_display.h:74
subpicture_t::i_original_picture_width
int i_original_picture_width
original width of the movie
Definition: vlc_subpicture.h:185
spuregion_CreateVGradientPalette
static void spuregion_CreateVGradientPalette(video_palette_t *p_palette, uint8_t i_splits, uint32_t argb1, uint32_t argb2)
Definition: vout_spuregion_helper.h:30
vout_snapshot_GetDirectory
char * vout_snapshot_GetDirectory(void)
This function will return the directory used for snapshots.
Definition: snapshot.c:135
video_palette_t::palette
uint8_t palette[256][4]
4-byte RGBA/YUVA palette
Definition: vlc_es.h:47
vlc_value_t::psz_string
char * psz_string
Definition: vlc_common.h:330
var_GetInteger
#define var_GetInteger(a, b)
Definition: vlc_variables.h:655
vout_ControlChangeCropWindow
void vout_ControlChangeCropWindow(vout_thread_t *vout, int x, int y, int width, int height)
Definition: video_output.c:512
var_SetInteger
#define var_SetInteger(a, b, c)
Definition: vlc_variables.h:256
vout_PutSubpicture
void vout_PutSubpicture(vout_thread_t *vout, subpicture_t *subpic)
Definition: video_output.c:370
image_HandlerDelete
void image_HandlerDelete(image_handler_t *p_image)
Delete the image_handler_t instance.
Definition: image.c:105
spuregion_CreateVGradientFill
static void spuregion_CreateVGradientFill(plane_t *p, uint8_t i_splits)
Definition: vout_spuregion_helper.h:48
CropBorderCallback
static int CropBorderCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:462
vout_ControlChangeSubFilters
void vout_ControlChangeSubFilters(vout_thread_t *vout, const char *filters)
Definition: video_output.c:546
SubMarginCallback
static int SubMarginCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:593
subpicture_t::i_stop
mtime_t i_stop
end of display date
Definition: vlc_subpicture.h:172
AddCustomRatios
static void AddCustomRatios(vout_thread_t *p_vout, const char *psz_var, char *psz_list)
Definition: vout_intf.c:123
vlc_object_t
The main vlc_object_t structure.
Definition: vlc_objects.h:39
subpicture_t::b_ephemer
bool b_ephemer
If this flag is set to true the subtitle will be displayed until the next one appear.
Definition: vlc_subpicture.h:173
VLC_UNUSED
#define VLC_UNUSED(x)
Definition: vlc_common.h:912
VLC_CODEC_YUVA
#define VLC_CODEC_YUVA
Definition: vlc_fourcc.h:261
VLC_SUCCESS
#define VLC_SUCCESS
No error.
Definition: vlc_common.h:349
plane_t
Description of a planar graphic field.
Definition: vlc_picture.h:37
vlc_vout_osd.h
psz_value
char psz_value[8]
Definition: vout_intf.c:91
subpicture_t::b_fade
bool b_fade
enable fading
Definition: vlc_subpicture.h:175
p_crop_values
static const struct @94 p_crop_values[]
vout_thread_t::obj
struct vlc_common_members obj
Definition: vlc_vout.h:71
image_handler_t
Definition: vlc_image.h:39
VLC_VAR_COORDS
#define VLC_VAR_COORDS
Definition: vlc_variables.h:54
ViewpointCallback
static int ViewpointCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:603
vlc_block.h
vout_ControlChangeCropRatio
void vout_ControlChangeCropRatio(vout_thread_t *vout, unsigned num, unsigned den)
Definition: video_output.c:506
name
const char name[16]
Definition: httpd.c:1249
video_format_Init
static void video_format_Init(video_format_t *p_src, vlc_fourcc_t i_chroma)
Initialize a video_format_t structure with chroma 'i_chroma'.
Definition: vlc_es.h:380
subpicture_region_t::p_picture
picture_t * p_picture
picture comprising this region
Definition: vlc_subpicture.h:60
entry
Definition: fourcc_gen.c:50
N_
#define N_(str)
Definition: vlc_fixups.h:372
SubFilterCallback
static int SubFilterCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:583
VoutOsdSnapshot
static void VoutOsdSnapshot(vout_thread_t *p_vout, picture_t *p_pic, const char *psz_filename)
This function will display the name and a PIP of the provided snapshot.
Definition: vout_intf.c:357
var_SetString
#define var_SetString(a, b, c)
Definition: vlc_variables.h:259
AspectCallback
static int AspectCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:478
psz_label
char psz_label[13]
Definition: vout_intf.c:82
vout_ControlChangeWindowState
void vout_ControlChangeWindowState(vout_thread_t *vout, unsigned st)
Definition: video_output.c:486
vout_ControlChangeFullscreen
void vout_ControlChangeFullscreen(vout_thread_t *vout, bool fullscreen)
Definition: video_output.c:481
subpicture_t::i_start
mtime_t i_start
beginning of display date
Definition: vlc_subpicture.h:171
vlc_image.h
var_AddCallback
#define var_AddCallback(a, b, c, d)
Definition: vlc_variables.h:164
AboveCallback
static int AboveCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:513
ZoomCallback
static int ZoomCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:503
vout_snapshot_save_cfg_t::path
char * path
Definition: snapshot.h:69
vout_thread_t
Video output thread descriptor.
Definition: vlc_vout.h:70
VLC_OBJECT
#define VLC_OBJECT(x)
Type-safe vlc_object_t cast.
Definition: vlc_common.h:464
vout_ControlChangeViewpoint
void vout_ControlChangeViewpoint(vout_thread_t *vout, const vlc_viewpoint_t *p_viewpoint)
Definition: video_output.c:557
mdate
mtime_t mdate(void)
Precision monotonic clock.
Definition: thread.c:406
vout_internal.h
VideoFilterCallback
static int VideoFilterCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:563
vlc_value_t
VLC value structure.
Definition: vlc_common.h:325
vout_ControlChangeSubSources
void vout_ControlChangeSubSources(vout_thread_t *vout, const char *filters)
Definition: video_output.c:541
block_t
Definition: vlc_block.h:111
msg_Err
#define msg_Err(p_this,...)
Definition: vlc_messages.h:82
vlc_object_t::obj
struct vlc_common_members obj
Definition: vlc_objects.h:42
AutoScaleCallback
static int AutoScaleCallback(vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void *)
Definition: vout_intf.c:493
p
#define p(t)
vlc_modules.h
vlc_common_members::flags
int flags
Definition: vlc_common.h:428
var_Change
#define var_Change(a, b, c, d, e)
Definition: vlc_variables.h:127