mirror of
https://code.videolan.org/videolan/vlc
synced 2024-09-24 20:48:52 +02:00
165ccf2cdf
Instead of performing a deep copy every time they are fetched
198 lines
5.5 KiB
C
198 lines
5.5 KiB
C
/*****************************************************************************
|
|
* vlc_input.h: Core input structures
|
|
*****************************************************************************
|
|
* Copyright (C) 1999-2015 VLC authors and VideoLAN
|
|
*
|
|
* Authors: Christophe Massiot <massiot@via.ecp.fr>
|
|
* Laurent Aimar <fenrir@via.ecp.fr>
|
|
*
|
|
* 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 <vlc_es.h>
|
|
#include <vlc_meta.h>
|
|
#include <vlc_epg.h>
|
|
#include <vlc_input_item.h>
|
|
#include <vlc_vout.h>
|
|
#include <vlc_vout_osd.h>
|
|
|
|
#include <string.h>
|
|
|
|
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( likely(point) )
|
|
{
|
|
if( src->psz_name ) point->psz_name = strdup( src->psz_name );
|
|
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. */
|
|
|
|
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
|