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 
92 typedef struct input_title_t
93 {
94  char *psz_name;
95 
96  vlc_tick_t i_length; /* Length(microsecond) if known, else 0 */
97 
98  unsigned i_flags; /* Is it a menu or a normal entry */
99 
100  /* Title seekpoint */
101  int i_seekpoint;
104 
105 static inline input_title_t *vlc_input_title_New(void)
106 {
107  input_title_t *t = (input_title_t*)malloc( sizeof( input_title_t ) );
108  if( !t )
109  return NULL;
110 
111  t->psz_name = NULL;
112  t->i_flags = 0;
113  t->i_length = 0;
114  t->i_seekpoint = 0;
115  t->seekpoint = NULL;
116 
117  return t;
118 }
119 
120 static inline void vlc_input_title_Delete( input_title_t *t )
121 {
122  int i;
123  if( t == NULL )
124  return;
125 
126  free( t->psz_name );
127  for( i = 0; i < t->i_seekpoint; i++ )
129  free( t->seekpoint );
130  free( t );
131 }
132 
133 static inline input_title_t *vlc_input_title_Duplicate( const input_title_t *t )
134 {
136  if( dup == NULL) return NULL;
137 
138  if( t->psz_name ) dup->psz_name = strdup( t->psz_name );
139  dup->i_flags = t->i_flags;
140  dup->i_length = t->i_length;
141  if( t->i_seekpoint > 0 )
142  {
143  dup->seekpoint = (seekpoint_t**)vlc_alloc( t->i_seekpoint, sizeof(seekpoint_t*) );
144  if( likely(dup->seekpoint) )
145  {
146  for( int i = 0; i < t->i_seekpoint; i++ )
147  dup->seekpoint[i] = vlc_seekpoint_Duplicate( t->seekpoint[i] );
148  dup->i_seekpoint = t->i_seekpoint;
149  }
150  }
151 
152  return dup;
153 }
154 
155 /*****************************************************************************
156  * Attachments
157  *****************************************************************************/
158 struct input_attachment_t
159 {
160  char *psz_name;
161  char *psz_mime;
162  char *psz_description;
163 
164  size_t i_data;
165  void *p_data;
166 };
167 
169 
171  const char *psz_mime,
172  const char *psz_description,
173  const void *p_data,
174  size_t i_data );
175 
177 
178 /**
179  * Input rate.
180  *
181  * It is an float used by the variable "rate" in the
182  * range [INPUT_RATE_MIN, INPUT_RATE_MAX]
183  * the default value being 1.f. It represents the ratio of playback speed to
184  * nominal speed (bigger is faster).
185  */
186 
187 /**
188  * Minimal rate value
189  */
190 #define INPUT_RATE_MIN 0.03125f
191 /**
192  * Maximal rate value
193  */
194 #define INPUT_RATE_MAX 31.25f
195 
196 /** @} */
197 #endif
vlc_es.h
vlc_input_title_Duplicate
static input_title_t * vlc_input_title_Duplicate(const input_title_t *t)
Definition: vlc_input.h:134
VLC_API
#define VLC_API
Definition: fourcc_gen.c:31
input_attachment_t
Definition: vlc_input.h:159
input_title_t::psz_name
char * psz_name
Definition: vlc_input.h:95
psz_name
const char * psz_name
Definition: text_style.c:53
vlc_input_title_New
static input_title_t * vlc_input_title_New(void)
Definition: vlc_input.h:106
vlc_input_attachment_Hold
VLC_EXPORT input_attachment_t * vlc_input_attachment_Hold(input_attachment_t *a)
Definition: attachment.c:85
vlc_input_item.h
input_title_t::i_seekpoint
int i_seekpoint
Definition: vlc_input.h:102
vlc_common.h
vlc_vout.h
vlc_epg.h
vlc_input_attachment_Release
VLC_EXPORT void vlc_input_attachment_Release(input_attachment_t *a)
Definition: attachment.c:40
seekpoint_t::psz_name
char * psz_name
Definition: vlc_input.h:56
seekpoint_t
Definition: vlc_input.h:51
vlc_seekpoint_Duplicate
static seekpoint_t * vlc_seekpoint_Duplicate(const seekpoint_t *src)
Definition: vlc_input.h:74
input_attachment_t::p_data
void * p_data
Definition: vlc_input.h:168
input_attachment_t::psz_mime
char * psz_mime
Definition: vlc_input.h:164
input_title_t::i_length
vlc_tick_t i_length
Definition: vlc_input.h:97
vlc_input_title_Delete
static void vlc_input_title_Delete(input_title_t *t)
Definition: vlc_input.h:121
input_title_t::i_flags
unsigned i_flags
Definition: vlc_input.h:99
vlc_tick_t
int64_t vlc_tick_t
High precision date or time interval.
Definition: vlc_tick.h:45
vlc_input_attachment_New
VLC_EXPORT 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
psz_mime
const char * psz_mime
Definition: image.c:634
input_title_t
Definition: vlc_input.h:93
input_title_t
struct input_title_t input_title_t
input_attachment_t::i_data
size_t i_data
Definition: vlc_input.h:167
vlc_vout_osd.h
strdup
char * strdup(const char *)
input_attachment_t::psz_name
char * psz_name
Definition: vlc_input.h:163
input_attachment_t::psz_description
char * psz_description
Definition: vlc_input.h:165
likely
#define likely(p)
Predicted true condition.
Definition: vlc_common.h:218
seekpoint_t::i_time_offset
vlc_tick_t i_time_offset
Definition: vlc_input.h:55
vlc_alloc
static void * vlc_alloc(size_t count, size_t size)
Definition: vlc_common.h:1144
input_resource_t
Definition: resource.c:56
input_title_t::seekpoint
seekpoint_t ** seekpoint
Definition: vlc_input.h:103
vlc_meta.h
vlc_seekpoint_Delete
static void vlc_seekpoint_Delete(seekpoint_t *point)
Definition: vlc_input.h:67
vlc_seekpoint_New
static seekpoint_t * vlc_seekpoint_New(void)
Definition: vlc_input.h:57