]> git.sesse.net Git - vlc/blob - include/stream_output.h
Fixed AFMT_AC3 and AFMT_S16_NE handling.
[vlc] / include / stream_output.h
1 /*****************************************************************************
2  * stream_output.h : stream output module
3  *****************************************************************************
4  * Copyright (C) 2002 VideoLAN
5  * $Id: stream_output.h,v 1.4 2003/01/13 02:33:13 fenrir Exp $
6  *
7  * Authors: Christophe Massiot <massiot@via.ecp.fr>
8  *          Laurent Aimar <fenrir@via.ecp.fr>
9  *          Eric Petit <titer@videolan.org>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 2 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
24  *****************************************************************************/
25
26 /*****************************************************************************
27  * sout_instance_t: stream output thread descriptor
28  *****************************************************************************/
29
30 /*
31  * i_allocated_size: size of allocated buffer
32  * p_allocated_buffer: where data has been allocated
33  *
34  * i_buffer_size: sizeof buffer from p_buffer
35  * p_buffer: where data begins
36  * i_size: size of valid data
37  *
38  */
39 struct sout_buffer_t
40 {
41     size_t                  i_allocated_size;
42     byte_t                  *p_allocated_buffer;
43
44     size_t                  i_buffer_size;
45     byte_t                  *p_buffer;
46
47     size_t                  i_size;
48     mtime_t                 i_length;
49
50     mtime_t                 i_dts;
51     mtime_t                 i_pts;
52
53     int                     i_bitrate;
54
55     struct sout_buffer_t    *p_next;
56 };
57
58 struct sout_packet_format_t
59 {
60     int             i_cat;      // AUDIO_ES, VIDEO_ES, SPU_ES
61     vlc_fourcc_t    i_fourcc;
62
63     void            *p_format;  // WAVEFORMATEX or BITMAPINFOHEADER
64
65 };
66
67 struct sout_fifo_t
68 {
69     vlc_mutex_t         lock;                         /* fifo data lock */
70     vlc_cond_t          wait;         /* fifo data conditional variable */
71
72     int                 i_depth;
73     sout_buffer_t       *p_first;
74     sout_buffer_t       **pp_last;
75 };
76
77 struct sout_input_t
78 {
79     vlc_mutex_t             lock;
80
81     sout_instance_t         *p_sout;
82
83     sout_packet_format_t    input_format;
84     sout_fifo_t             *p_fifo;
85
86     void                    *p_mux_data;
87 };
88
89 #define SOUT_METHOD_NONE        0x00
90 #define SOUT_METHOD_FILE        0x10
91 #define SOUT_METHOD_NETWORK     0x20
92
93 struct sout_instance_t
94 {
95     VLC_COMMON_MEMBERS
96
97     char * psz_dest;
98     char * psz_access;
99     char * psz_mux;
100     char * psz_name;
101
102     module_t                *p_access;
103     int                     i_method;
104     void                    *p_access_data;
105     int                     i_access_preheader;
106     int                     (* pf_write )( sout_instance_t *, sout_buffer_t * );
107     int                     (* pf_seek  )( sout_instance_t *, off_t );
108
109     module_t                *p_mux;
110     void                    *p_mux_data;
111     int                     i_mux_preheader;
112     int                     (* pf_mux_addstream )( sout_instance_t *,
113                                                    sout_input_t * );
114     int                     (* pf_mux_delstream )( sout_instance_t *,
115                                                    sout_input_t * );
116     int                     (* pf_mux )          ( sout_instance_t * );
117
118
119     vlc_mutex_t             lock;
120
121     int                     i_nb_inputs;
122     sout_input_t            **pp_inputs;
123 };
124
125
126
127
128 /*****************************************************************************
129  * Prototypes
130  *****************************************************************************/
131 #define sout_NewInstance(a,b) __sout_NewInstance(VLC_OBJECT(a),b)
132 VLC_EXPORT( sout_instance_t *, __sout_NewInstance,  ( vlc_object_t *, char * ) );
133 VLC_EXPORT( void,              sout_DeleteInstance, ( sout_instance_t * ) );
134
135 VLC_EXPORT( sout_fifo_t *,   sout_FifoCreate,     ( sout_instance_t * ) );
136 VLC_EXPORT( void,            sout_FifoDestroy,    ( sout_instance_t *, sout_fifo_t * ) );
137 VLC_EXPORT( void,            sout_FifoFree,       ( sout_instance_t *,sout_fifo_t * ) );
138
139 VLC_EXPORT( void,            sout_FifoPut,        ( sout_fifo_t *, sout_buffer_t* ) );
140 VLC_EXPORT( sout_buffer_t *, sout_FifoGet,        ( sout_fifo_t * ) );
141 VLC_EXPORT( sout_buffer_t *, sout_FifoShow,       ( sout_fifo_t * ) );
142
143
144 #define sout_InputNew( a, b ) __sout_InputNew( VLC_OBJECT(a), b )
145 VLC_EXPORT( sout_input_t *, __sout_InputNew,       ( vlc_object_t *, sout_packet_format_t * ) );
146 VLC_EXPORT( int,            sout_InputDelete,      ( sout_input_t * ) );
147 VLC_EXPORT( int,            sout_InputSendBuffer,  ( sout_input_t *, sout_buffer_t* ) );
148
149 VLC_EXPORT( sout_buffer_t*, sout_BufferNew,    ( sout_instance_t *, size_t ) );
150 VLC_EXPORT( int,            sout_BufferRealloc,( sout_instance_t *, sout_buffer_t*, size_t ) );
151 VLC_EXPORT( int,            sout_BufferReallocFromPreHeader,( sout_instance_t *, sout_buffer_t*, size_t ) );
152 VLC_EXPORT( int,            sout_BufferDelete, ( sout_instance_t *, sout_buffer_t* ) );
153 VLC_EXPORT( sout_buffer_t*, sout_BufferDuplicate,(sout_instance_t *, sout_buffer_t * ) );
154 VLC_EXPORT( void,           sout_BufferChain,  ( sout_buffer_t **, sout_buffer_t * ) );
155