vlc_epg.h
上传用户:kjfoods
上传日期:2020-07-06
资源大小:29949k
文件大小:4k
源码类别:

midi

开发平台:

Unix_Linux

  1. /*****************************************************************************
  2.  * vlc_epg.h: Electronic Program Guide
  3.  *****************************************************************************
  4.  * Copyright (C) 2007 the VideoLAN team
  5.  * $Id: 3313e4a6ba928171ed1279941978433b48cd4093 $
  6.  *
  7.  * Authors: Laurent Aimar <fenrir@via.ecp.fr>
  8.  *
  9.  * This program is free software; you can redistribute it and/or modify
  10.  * it under the terms of the GNU General Public License as published by
  11.  * the Free Software Foundation; either version 2 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 General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  22.  *****************************************************************************/
  23. #ifndef VLC_EPG_H
  24. #define VLC_EPG_H 1
  25. /**
  26.  * file
  27.  * This file defines functions and structures for storing dvb epg information
  28.  */
  29. typedef struct
  30. {
  31.     int64_t i_start;    /* Interpreted as a value return by time() */
  32.     int     i_duration;    /* Duration of the event in second */
  33.     char    *psz_name;
  34.     char    *psz_short_description;
  35.     char    *psz_description;
  36. } vlc_epg_event_t;
  37. typedef struct
  38. {
  39.     char            *psz_name;
  40.     vlc_epg_event_t *p_current; /* Can be null or should be the same than one of pp_event entry */
  41.     int             i_event;
  42.     vlc_epg_event_t **pp_event;
  43. } vlc_epg_t;
  44. static inline void vlc_epg_Init( vlc_epg_t *p_epg, const char *psz_name )
  45. {
  46.     p_epg->psz_name = psz_name ? strdup( psz_name ) : NULL;
  47.     p_epg->p_current = NULL;
  48.     TAB_INIT( p_epg->i_event, p_epg->pp_event );
  49. }
  50. static inline void vlc_epg_Clean( vlc_epg_t *p_epg )
  51. {
  52.     int i;
  53.     for( i = 0; i < p_epg->i_event; i++ )
  54.     {
  55.         vlc_epg_event_t *p_evt = p_epg->pp_event[i];
  56.         free( p_evt->psz_name );
  57.         free( p_evt->psz_short_description );
  58.         free( p_evt->psz_description );
  59.         free( p_evt );
  60.     }
  61.     TAB_CLEAN( p_epg->i_event, p_epg->pp_event );
  62.     free( p_epg->psz_name );
  63. }
  64. static inline void vlc_epg_AddEvent( vlc_epg_t *p_epg, int64_t i_start, int i_duration,
  65.                                 const char *psz_name, const char *psz_short_description, const char *psz_description )
  66. {
  67.     vlc_epg_event_t *p_evt = (vlc_epg_event_t*)malloc( sizeof(vlc_epg_event_t) );
  68.     if( !p_evt )
  69.         return;
  70.     p_evt->i_start = i_start;
  71.     p_evt->i_duration = i_duration;
  72.     p_evt->psz_name = psz_name ? strdup( psz_name ) : NULL;
  73.     p_evt->psz_short_description = psz_short_description ? strdup( psz_short_description ) : NULL;
  74.     p_evt->psz_description = psz_description ? strdup( psz_description ) : NULL;
  75.     TAB_APPEND_CPP( vlc_epg_event_t, p_epg->i_event, p_epg->pp_event, p_evt );
  76. }
  77. LIBVLC_USED
  78. static inline vlc_epg_t *vlc_epg_New( const char *psz_name )
  79. {
  80.     vlc_epg_t *p_epg = (vlc_epg_t*)malloc( sizeof(vlc_epg_t) );
  81.     if( p_epg )
  82.         vlc_epg_Init( p_epg, psz_name );
  83.     return p_epg;
  84. }
  85. static inline void vlc_epg_Delete( vlc_epg_t *p_epg )
  86. {
  87.     vlc_epg_Clean( p_epg );
  88.     free( p_epg );
  89. }
  90. static inline void vlc_epg_SetCurrent( vlc_epg_t *p_epg, int64_t i_start )
  91. {
  92.     int i;
  93.     p_epg->p_current = NULL;
  94.     if( i_start < 0 )
  95.         return;
  96.     for( i = 0; i < p_epg->i_event; i++ )
  97.     {
  98.         if( p_epg->pp_event[i]->i_start == i_start )
  99.         {
  100.             p_epg->p_current = p_epg->pp_event[i];
  101.             break;
  102.         }
  103.     }
  104. }
  105. #endif