VLC  4.0.0-dev
vlc_input.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * vlc_input.h: Core input structures
3  *****************************************************************************
4  * Copyright (C) 1999-2015 VLC authors and VideoLAN
5  *
6  * Authors: Christophe Massiot <massiot@via.ecp.fr>
7  * Laurent Aimar <fenrir@via.ecp.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU Lesser General Public License as published by
11  * the Free Software Foundation; either version 2.1 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public License
20  * along with this program; if not, write to the Free Software Foundation,
21  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23 
24 #ifndef VLC_INPUT_H
25 #define VLC_INPUT_H 1
26 
27 /**
28  * \defgroup input Input
29  * \ingroup vlc
30  * Input thread
31  * @{
32  * \file
33  * Input thread interface
34  */
35 
36 #include <vlc_es.h>
37 #include <vlc_meta.h>
38 #include <vlc_epg.h>
39 #include <vlc_input_item.h>
40 #include <vlc_vout.h>
41 #include <vlc_vout_osd.h>
42 
43 #include <string.h>
44 
45 typedef struct input_resource_t input_resource_t;
46 
47 /*****************************************************************************
48  * Seek point: (generalisation of chapters)
49  *****************************************************************************/
50 struct seekpoint_t
51 {
53  char *psz_name;
54 };
55 
56 static inline seekpoint_t *vlc_seekpoint_New( void )
57 {
58  seekpoint_t *point = (seekpoint_t*)malloc( sizeof( seekpoint_t ) );
59  if( !point )
60  return NULL;
61  point->i_time_offset = -1;
62  point->psz_name = NULL;
63  return point;
64 }
65 
66 static inline void vlc_seekpoint_Delete( seekpoint_t *point )
67 {
68  if( !point ) return;
69  free( point->psz_name );
70  free( point );
71 }
72 
73 static inline seekpoint_t *vlc_seekpoint_Duplicate( const seekpoint_t *src )
74 {
75  seekpoint_t *point = vlc_seekpoint_New();
76  if( likely(point) )
77  {
78  if( src->psz_name ) point->psz_name = strdup( src->psz_name );
79  point->i_time_offset = src->i_time_offset;
80  }
81  return point;
82 }
83 
84 /*****************************************************************************
85  * Title:
86  *****************************************************************************/
87 
88 /* input_title_t.i_flags field */
89 #define INPUT_TITLE_MENU 0x01 /* Menu title */
90 #define INPUT_TITLE_INTERACTIVE 0x02 /* Interactive title. Playback position has no meaning. */
91 #define INPUT_TITLE_MAIN 0x04 /* Main title */
92 
93 typedef struct input_title_t
94 {
95  char *psz_name;
96 
97  vlc_tick_t i_length; /* Length(microsecond) if known, else 0 */
98 
99  unsigned i_flags; /* Is it a menu or a normal entry */
100 
101  /* Title seekpoint */
102  int i_seekpoint;
105 
106 static inline input_title_t *vlc_input_title_New(void)
107 {
108  input_title_t *t = (input_title_t*)malloc( sizeof( input_title_t ) );
109  if( !t )
110  return NULL;
111 
112  t->psz_name = NULL;
113  t->i_flags = 0;
114  t->i_length = 0;
115  t->i_seekpoint = 0;
116  t->seekpoint = NULL;
117 
118  return t;
119 }
120 
121 static inline void vlc_input_title_Delete( input_title_t *t )
122 {
123  int i;
124  if( t == NULL )
125  return;
126 
127  free( t->psz_name );
128  for( i = 0; i < t->i_seekpoint; i++ )
130  free( t->seekpoint );
131  free( t );
132 }
133 
134 static inline input_title_t *vlc_input_title_Duplicate( const input_title_t *t )
135 {
137  if( dup == NULL) return NULL;
138 
139  if( t->psz_name ) dup->psz_name = strdup( t->psz_name );
140  dup->i_flags = t->i_flags;
141  dup->i_length = t->i_length;
142  if( t->i_seekpoint > 0 )
143  {
144  dup->seekpoint = (seekpoint_t**)vlc_alloc( t->i_seekpoint, sizeof(seekpoint_t*) );
145  if( likely(dup->seekpoint) )
146  {
147  for( int i = 0; i < t->i_seekpoint; i++ )
148  dup->seekpoint[i] = vlc_seekpoint_Duplicate( t->seekpoint[i] );
149  dup->i_seekpoint = t->i_seekpoint;
150  }
151  }
152 
153  return dup;
154 }
155 
156 /*****************************************************************************
157  * Attachments
158  *****************************************************************************/
159 struct input_attachment_t
160 {
161  char *psz_name;
162  char *psz_mime;
164 
165  size_t i_data;
166  void *p_data;
167 };
168 
170 
172  const char *psz_mime,
173  const char *psz_description,
174  const void *p_data,
175  size_t i_data );
176 
178 
179 /**
180  * Input rate.
181  *
182  * It is an float used by the variable "rate" in the
183  * range [INPUT_RATE_MIN, INPUT_RATE_MAX]
184  * the default value being 1.f. It represents the ratio of playback speed to
185  * nominal speed (bigger is faster).
186  */
187 
188 /**
189  * Minimal rate value
190  */
191 #define INPUT_RATE_MIN 0.03125f
192 /**
193  * Maximal rate value
194  */
195 #define INPUT_RATE_MAX 31.25f
196 
197 /** @} */
198 #endif
#define VLC_API
Definition: fourcc_gen.c:31
#define likely(p)
Predicted true condition.
Definition: vlc_common.h:255
struct input_title_t input_title_t
input_attachment_t * vlc_input_attachment_Hold(input_attachment_t *a)
Definition: attachment.c:85
static seekpoint_t * vlc_seekpoint_Duplicate(const seekpoint_t *src)
Definition: vlc_input.h:74
static seekpoint_t * vlc_seekpoint_New(void)
Definition: vlc_input.h:57
input_attachment_t * vlc_input_attachment_New(const char *psz_name, const char *psz_mime, const char *psz_description, const void *p_data, size_t i_data)
Definition: attachment.c:57
static input_title_t * vlc_input_title_New(void)
Definition: vlc_input.h:107
static void vlc_seekpoint_Delete(seekpoint_t *point)
Definition: vlc_input.h:67
static input_title_t * vlc_input_title_Duplicate(const input_title_t *t)
Definition: vlc_input.h:135
void vlc_input_attachment_Release(input_attachment_t *a)
Definition: attachment.c:40
static void vlc_input_title_Delete(input_title_t *t)
Definition: vlc_input.h:122
const char * psz_mime
Definition: image.c:633
Definition: vlc_input.h:161
char * psz_description
Definition: vlc_input.h:164
char * psz_name
Definition: vlc_input.h:162
void * p_data
Definition: vlc_input.h:167
size_t i_data
Definition: vlc_input.h:166
char * psz_mime
Definition: vlc_input.h:163
Definition: resource.c:58
Definition: vlc_input.h:95
char * psz_name
Definition: vlc_input.h:96
vlc_tick_t i_length
Definition: vlc_input.h:98
seekpoint_t ** seekpoint
Definition: vlc_input.h:104
unsigned i_flags
Definition: vlc_input.h:100
int i_seekpoint
Definition: vlc_input.h:103
Definition: vlc_input.h:52
char * psz_name
Definition: vlc_input.h:54
vlc_tick_t i_time_offset
Definition: vlc_input.h:53
const char * psz_name
Definition: text_style.c:33
VLC_USED static VLC_MALLOC void * vlc_alloc(size_t count, size_t size)
Definition: vlc_common.h:1182
This file defines functions and structures for storing dvb epg information.
This file defines the elementary streams format types.
char * strdup(const char *)
This file defines functions, structures and enums for input items in vlc.
This file defines functions and structures for stream meta-data in vlc.
int64_t vlc_tick_t
High precision date or time interval.
Definition: vlc_tick.h:35
Video output thread interface.
Overlay text and widgets.