Added EPG (Electronic Program Guide) helpers and ES_OUT_SET_GROUP_EPG.
authorLaurent Aimar <fenrir@videolan.org>
Fri, 23 Mar 2007 19:54:14 +0000 (19:54 +0000)
committerLaurent Aimar <fenrir@videolan.org>
Fri, 23 Mar 2007 19:54:14 +0000 (19:54 +0000)
include/vlc_epg.h [new file with mode: 0644]
include/vlc_es_out.h
src/Makefile.am

diff --git a/include/vlc_epg.h b/include/vlc_epg.h
new file mode 100644 (file)
index 0000000..3777f2b
--- /dev/null
@@ -0,0 +1,119 @@
+/*****************************************************************************
+ * vlc_epg.h: Electronic Program Guide
+ *****************************************************************************
+ * Copyright (C) 2007 the VideoLAN team
+ * $Id: vlc_meta.h 18214 2006-12-03 13:48:21Z zorglub $
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ *****************************************************************************/
+
+#if !defined( __LIBVLC__ )
+  #error You are not libvlc or one of its plugins. You cannot include this file
+#endif
+
+#ifndef _VLC_EPG_H
+#define _VLC_EPG_H 1
+
+typedef struct
+{
+       int64_t i_start;        /* Interpreted as a value return by time() */
+       int     i_duration;     /* Duration of the event in second */
+
+       char    *psz_name;
+       char    *psz_short_description;
+       char    *psz_description;
+
+} vlc_epg_event_t;
+
+typedef struct
+{
+    char            *psz_name;
+    vlc_epg_event_t *p_current; /* Can be null or should be the same than one of pp_event entry */
+
+       int                     i_event;
+       vlc_epg_event_t **pp_event;
+} vlc_epg_t;
+
+static inline void vlc_epg_Init( vlc_epg_t *p_epg, const char *psz_name )
+{
+    p_epg->psz_name = psz_name ? strdup( psz_name ) : NULL;
+    p_epg->p_current = NULL;
+       TAB_INIT( p_epg->i_event, p_epg->pp_event );
+}
+static inline void vlc_epg_Clean( vlc_epg_t *p_epg )
+{
+    int i;
+    for( i = 0; i < p_epg->i_event; i++ )
+    {
+        vlc_epg_event_t *p_evt = p_epg->pp_event[i];
+        if( p_evt->psz_name )
+            free( p_evt->psz_name );
+        if( p_evt->psz_short_description )
+            free( p_evt->psz_short_description );
+        if( p_evt->psz_description )
+            free( p_evt->psz_description );
+        free( p_evt );
+    }
+    TAB_CLEAN( p_epg->i_event, p_epg->pp_event );
+    if( p_epg->psz_name )
+        free( p_epg->psz_name );
+}
+static inline void vlc_epg_AddEvent( vlc_epg_t *p_epg, int64_t i_start, int i_duration,
+                                const char *psz_name, const char *psz_short_description, const char *psz_description )
+{
+    vlc_epg_event_t *p_evt = (vlc_epg_event_t*)malloc( sizeof(vlc_epg_event_t) );
+    if( !p_evt )
+        return;
+    p_evt->i_start = i_start;
+    p_evt->i_duration = i_duration;
+    p_evt->psz_name = psz_name ? strdup( psz_name ) : NULL;
+    p_evt->psz_short_description = psz_short_description ? strdup( psz_short_description ) : NULL;
+    p_evt->psz_description = psz_description ? strdup( psz_description ) : NULL;
+    TAB_APPEND_CPP( vlc_epg_event_t, p_epg->i_event, p_epg->pp_event, p_evt );
+}
+
+static inline vlc_epg_t *vlc_epg_New( const char *psz_name )
+{
+       vlc_epg_t *p_epg = (vlc_epg_t*)malloc( sizeof(vlc_epg_t) );
+       if( p_epg )
+               vlc_epg_Init( p_epg, psz_name );
+    return p_epg;
+}
+static inline void vlc_epg_Delete( vlc_epg_t *p_epg )
+{
+    vlc_epg_Clean( p_epg );
+    free( p_epg );
+}
+static inline void vlc_epg_SetCurrent( vlc_epg_t *p_epg, int64_t i_start )
+{
+    int i;
+    p_epg->p_current = NULL;
+    if( i_start < 0 )
+        return;
+
+    for( i = 0; i < p_epg->i_event; i++ )
+    {
+        if( p_epg->pp_event[i]->i_start == i_start )
+        {
+            p_epg->p_current = p_epg->pp_event[i];
+            break;
+        }
+    }
+}
+
+#endif
+
index 03ea27a..048a954 100644 (file)
@@ -84,6 +84,8 @@ enum es_out_query_e
     ES_OUT_SET_NEXT_DISPLAY_TIME,   /* arg1=es_out_id_t* arg2=int64_t i_pts(microsecond) */
     /* Set meta data for group (dynamic) */
     ES_OUT_SET_GROUP_META,  /* arg1=int i_group arg2=vlc_meta_t */
+    /* Set epg for group (dynamic) */
+    ES_OUT_SET_GROUP_EPG,   /* arg1=int i_group arg2=vlc_epg_t */
     /* */
     ES_OUT_DEL_GROUP        /* arg1=int i_group */
 };
index 7361e41..d1c17f0 100644 (file)
@@ -59,6 +59,7 @@ HEADERS_include = \
        ../include/vlc_demux.h \
        ../include/vlc_es.h \
        ../include/vlc_es_out.h \
+       ../include/vlc_epg.h \
        ../include/vlc_filter.h \
        ../include/vlc_config_cat.h \
        ../include/vlc_httpd.h \