sub.h

来自「VLC媒体播放程序」· C头文件 代码 · 共 151 行

H
151
字号
/***************************************************************************** * sub.h ***************************************************************************** * Copyright (C) 2001-2004 VideoLAN * $Id: sub.h,v 1.19 2004/01/27 13:10:29 fenrir Exp $ * * Authors: 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 General Public License as published by * the Free Software Foundation; either version 2 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA. *****************************************************************************/#include "../ps.h"#define SUB_TYPE_MICRODVD   0x00#define SUB_TYPE_SUBRIP     0x01#define SUB_TYPE_SSA1       0x02#define SUB_TYPE_SSA2_4     0x03#define SUB_TYPE_VPLAYER    0x04#define SUB_TYPE_SAMI       0x05#define SUB_TYPE_VOBSUB     0x100#define SUB_TYPE_UNKNOWN    0xfffftypedef struct subtitle_s{    mtime_t i_start;    mtime_t i_stop;    char    *psz_text;    int     i_vobsub_location;} subtitle_t;typedef struct subtitle_demux_s{    VLC_COMMON_MEMBERS    module_t        *p_module;    int     (*pf_open) ( struct subtitle_demux_s *p_sub,                         input_thread_t*p_input,                         char *psz_name,                         mtime_t i_microsecperframe );    int     (*pf_demux)( struct subtitle_demux_s *p_sub, mtime_t i_maxdate );    int     (*pf_seek) ( struct subtitle_demux_s *p_sub, mtime_t i_date );    void    (*pf_close)( struct subtitle_demux_s *p_sub );    /* *** private *** */    input_thread_t      *p_input;    int                 i_sub_type;    char                *psz_header;    int                 i_subtitle;    int                 i_subtitles;    subtitle_t          *subtitle;    es_out_id_t         *p_es;    int                 i_previously_selected; /* to make pf_seek */    FILE                *p_vobsub_file;} subtitle_demux_t;/***************************************************************************** * subtitle_New: Start a new subtitle demux instance (but subtitle ES isn't *               selected by default. ***************************************************************************** * Return: NULL if failed, else a pointer on a new subtitle_demux_t. * * XXX: - if psz_name is NULL then --sub-file is read *      - i_microsecperframe is used only for microdvd file. (overriden *        by --sub-fps ) *      - it's at this point that --sub-delay is applied * *****************************************************************************/static inline subtitle_demux_t *subtitle_New( input_thread_t *p_input,                                              char *psz_name,                                              mtime_t i_microsecperframe ){    subtitle_demux_t *p_sub;    p_sub = vlc_object_create( p_input, sizeof( subtitle_demux_t ) );    p_sub->psz_object_name = "subtitle demux";    vlc_object_attach( p_sub, p_input );    p_sub->p_module = module_Need( p_sub, "subtitle demux", "" );    if( p_sub->p_module &&        p_sub->pf_open( p_sub, p_input, psz_name, i_microsecperframe ) >=0 )    {        msg_Info( p_input, "subtitle started" );    }    else    {        msg_Warn( p_input, "failed to start subtitle demux" );        vlc_object_detach( p_sub );        if( p_sub->p_module )        {            module_Unneed( p_sub, p_sub->p_module );        }        vlc_object_destroy( p_sub );        p_sub = NULL;    }    return( p_sub );}/***************************************************************************** * subtitle_Demux: send subtitle to decoder from last date to i_max *****************************************************************************/static inline int subtitle_Demux( subtitle_demux_t *p_sub, mtime_t i_max ){    return( p_sub->pf_demux( p_sub, i_max ) );}/***************************************************************************** * subtitle_Seek: Seek to i_date *****************************************************************************/static inline int subtitle_Seek( subtitle_demux_t *p_sub, mtime_t i_date ){    return( p_sub->pf_seek( p_sub, i_date ) );}/***************************************************************************** * subtitle_Close: Stop ES decoder and free all memory included p_sub. *****************************************************************************/static inline void subtitle_Close( subtitle_demux_t *p_sub ){    msg_Info( p_sub, "subtitle stopped" );    if( p_sub )    {        p_sub->pf_close( p_sub );        vlc_object_detach( p_sub );        if( p_sub->p_module )        {            module_Unneed( p_sub, p_sub->p_module );        }        vlc_object_destroy( p_sub );    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?