/***************************************************************************** * vlc_input.h: Core input structures ***************************************************************************** * Copyright (C) 1999-2015 VLC authors and VideoLAN * * Authors: Christophe Massiot * Laurent Aimar * * This program 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 program 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 program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef VLC_INPUT_H #define VLC_INPUT_H 1 /** * \defgroup input Input * \ingroup vlc * Input thread * @{ * \file * Input thread interface */ #include #include #include #include #include #include #include typedef struct input_resource_t input_resource_t; /***************************************************************************** * Seek point: (generalisation of chapters) *****************************************************************************/ struct seekpoint_t { vlc_tick_t i_time_offset; char *psz_name; }; static inline seekpoint_t *vlc_seekpoint_New( void ) { seekpoint_t *point = (seekpoint_t*)malloc( sizeof( seekpoint_t ) ); if( !point ) return NULL; point->i_time_offset = -1; point->psz_name = NULL; return point; } static inline void vlc_seekpoint_Delete( seekpoint_t *point ) { if( !point ) return; free( point->psz_name ); free( point ); } static inline seekpoint_t *vlc_seekpoint_Duplicate( const seekpoint_t *src ) { seekpoint_t *point = vlc_seekpoint_New(); if (unlikely(point == NULL)) return NULL; if (src->psz_name) { point->psz_name = strdup(src->psz_name); if (point->psz_name == NULL) { vlc_seekpoint_Delete(point); return NULL; } } point->i_time_offset = src->i_time_offset; return point; } /***************************************************************************** * Title: *****************************************************************************/ /* input_title_t.i_flags field */ #define INPUT_TITLE_MENU 0x01 /* Menu title */ #define INPUT_TITLE_INTERACTIVE 0x02 /* Interactive title. Playback position has no meaning. */ #define INPUT_TITLE_MAIN 0x04 /* Main title */ typedef struct input_title_t { char *psz_name; vlc_tick_t i_length; /* Length(microsecond) if known, else 0 */ unsigned i_flags; /* Is it a menu or a normal entry */ /* Title seekpoint */ int i_seekpoint; seekpoint_t **seekpoint; } input_title_t; static inline input_title_t *vlc_input_title_New(void) { input_title_t *t = (input_title_t*)malloc( sizeof( input_title_t ) ); if( !t ) return NULL; t->psz_name = NULL; t->i_flags = 0; t->i_length = 0; t->i_seekpoint = 0; t->seekpoint = NULL; return t; } static inline void vlc_input_title_Delete( input_title_t *t ) { int i; if( t == NULL ) return; free( t->psz_name ); for( i = 0; i < t->i_seekpoint; i++ ) vlc_seekpoint_Delete( t->seekpoint[i] ); free( t->seekpoint ); free( t ); } static inline input_title_t *vlc_input_title_Duplicate( const input_title_t *t ) { input_title_t *dup = vlc_input_title_New( ); if( dup == NULL) return NULL; if( t->psz_name ) dup->psz_name = strdup( t->psz_name ); dup->i_flags = t->i_flags; dup->i_length = t->i_length; if( t->i_seekpoint > 0 ) { dup->seekpoint = (seekpoint_t**)vlc_alloc( t->i_seekpoint, sizeof(seekpoint_t*) ); if( likely(dup->seekpoint) ) { for( int i = 0; i < t->i_seekpoint; i++ ) dup->seekpoint[i] = vlc_seekpoint_Duplicate( t->seekpoint[i] ); dup->i_seekpoint = t->i_seekpoint; } } return dup; } /***************************************************************************** * Attachments *****************************************************************************/ struct input_attachment_t { char *psz_name; char *psz_mime; char *psz_description; size_t i_data; void *p_data; }; VLC_API void vlc_input_attachment_Release( input_attachment_t *a ); VLC_API 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 ); VLC_API input_attachment_t *vlc_input_attachment_Hold( input_attachment_t *a ); /** * Input rate. * * It is an float used by the variable "rate" in the * range [INPUT_RATE_MIN, INPUT_RATE_MAX] * the default value being 1.f. It represents the ratio of playback speed to * nominal speed (bigger is faster). */ /** * Minimal rate value */ #define INPUT_RATE_MIN 0.03125f /** * Maximal rate value */ #define INPUT_RATE_MAX 31.25f /** @} */ #endif