]> git.sesse.net Git - vlc/blobdiff - include/vlc_demux.h
Fixed doc for vlc_demux.
[vlc] / include / vlc_demux.h
index 1f8e25f92c17fba6cc335aa28d72069f6b5e8010..6af44af48c4080d2edc27e86be072c48579ffb78 100644 (file)
  * 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_DEMUX_H
+#define VLC_DEMUX_H 1
 
-#ifndef _VLC_DEMUX_H
-#define _VLC_DEMUX_H 1
+/**
+ * \file
+ * This files defines functions and structures used by demux objects in vlc
+ */
 
 #include <vlc_es.h>
 #include <vlc_stream.h>
@@ -105,10 +106,10 @@ enum demux_query_e
      * reading everything (you should not use this to call es_out_Control)
      * if you don't know what to do with it, just IGNORE it, it is safe(r)
      * -1 means all group, 0 default group (first es added) */
-    DEMUX_SET_GROUP,            /* arg1= int            can fail */
+    DEMUX_SET_GROUP,            /* arg1= int, arg2=const vlc_list_t *   can fail */
 
     /* Ask the demux to demux until the given date at the next pf_demux call
-     * but not more (and not less, at the precision avaiable of course).
+     * but not more (and not less, at the precision available of course).
      * XXX: not mandatory (except for subtitle demux) but I will help a lot
      * for multi-input
      */
@@ -123,8 +124,14 @@ enum demux_query_e
     /* Attachments */
     DEMUX_GET_ATTACHMENTS,      /* arg1=input_attachment_t***, int* res=can fail */
 
+    /* RECORD you should accept it only if the stream can be recorded without
+     * any modification or header addition. */
+    DEMUX_CAN_RECORD,           /* arg1=bool*   res=can fail(assume false) */
+    DEMUX_SET_RECORD_STATE,     /* arg1=bool    res=can fail */
+
+
     /* II. Specific access_demux queries */
-    DEMUX_CAN_PAUSE,            /* arg1= bool*    can fail (assume false)*/
+    DEMUX_CAN_PAUSE = 0x1000,   /* arg1= bool*    can fail (assume false)*/
     DEMUX_SET_PAUSE_STATE,      /* arg1= bool     can fail */
 
     DEMUX_GET_PTS_DELAY,        /* arg1= int64_t*       cannot fail */
@@ -150,6 +157,7 @@ VLC_EXPORT( int,       demux_vaControlHelper, ( stream_t *, int64_t i_start, int
  * Miscellaneous helpers for demuxers
  *************************************************************************/
 
+LIBVLC_USED
 static inline bool demux_IsPathExtension( demux_t *p_demux, const char *psz_extension )
 {
     const char *psz_ext = strrchr ( p_demux->psz_path, '.' );
@@ -158,6 +166,7 @@ static inline bool demux_IsPathExtension( demux_t *p_demux, const char *psz_exte
     return true;
 }
 
+LIBVLC_USED
 static inline bool demux_IsForced( demux_t *p_demux, const char *psz_name )
 {
    if( !p_demux->psz_demux || strcmp( p_demux->psz_demux, psz_name ) )
@@ -165,6 +174,21 @@ static inline bool demux_IsForced( demux_t *p_demux, const char *psz_name )
     return true;
 }
 
+/**
+ * This function will create a packetizer suitable for a demuxer that parses
+ * elementary stream.
+ *
+ * The provided es_format_t will be cleaned on error or by
+ * demux_PacketizerDestroy.
+ */
+VLC_EXPORT( decoder_t *,demux_PacketizerNew, ( demux_t *p_demux, es_format_t *p_fmt, const char *psz_msg ) );
+
+/**
+ * This function will destroy a packetizer create by demux_PacketizerNew.
+ */
+VLC_EXPORT( void, demux_PacketizerDestroy, ( decoder_t *p_packetizer ) );
+
+/* */
 #define DEMUX_INIT_COMMON() do {            \
     p_demux->pf_control = Control;          \
     p_demux->pf_demux = Demux;              \
@@ -173,7 +197,7 @@ static inline bool demux_IsForced( demux_t *p_demux, const char *psz_name )
 
 #define STANDARD_DEMUX_INIT_MSG( msg ) do { \
     DEMUX_INIT_COMMON();                    \
-    msg_Dbg( p_demux, msg ); } while(0)
+    msg_Dbg( p_demux, "%s", msg ); } while(0)
 
 #define DEMUX_BY_EXTENSION( ext ) \
     demux_t *p_demux = (demux_t *)p_this; \
@@ -209,39 +233,6 @@ static inline bool demux_IsForced( demux_t *p_demux, const char *psz_name )
 
 #define POKE( peek, stuff, size ) (strncasecmp( (const char *)peek, stuff, size )==0)
 
-#define COMMON_INIT_PACKETIZER( location ) \
-    location = vlc_object_create( p_demux, VLC_OBJECT_PACKETIZER ); \
-    location->pf_decode_audio = 0; \
-    location->pf_decode_video = 0; \
-    location->pf_decode_sub = 0; \
-    location->pf_packetize = 0; \
-
-#define INIT_APACKETIZER( location, a,b,c,d ) \
-    COMMON_INIT_PACKETIZER(location ); \
-    es_format_Init( &location->fmt_in, AUDIO_ES, \
-                    VLC_FOURCC( a, b, c, d ) );
-
-#define INIT_VPACKETIZER( location, a,b,c,d ) \
-    COMMON_INIT_PACKETIZER(location ); \
-    es_format_Init( &location->fmt_in, VIDEO_ES, \
-                    VLC_FOURCC( a, b, c, d ) );
-
-/* BEWARE ! This can lead to memory leaks ! */
-#define LOAD_PACKETIZER_OR_FAIL( location, msg ) \
-    location->p_module = \
-        module_Need( location, "packetizer", NULL, 0 ); \
-    if( location->p_module == NULL ) \
-    { \
-        vlc_object_release( location ); \
-        msg_Err( p_demux, "cannot find packetizer for " # msg ); \
-        free( p_sys ); \
-        return VLC_EGENERIC; \
-    }
-
-#define DESTROY_PACKETIZER( location ) \
-    if( location->p_module ) module_Unneed( location, location->p_module ); \
-    vlc_object_release( location );
-
 /**
  * @}
  */