]> git.sesse.net Git - vlc/blob - modules/gui/wxwindows/streamdata.h
* implemented MMS-support (refs #271)
[vlc] / modules / gui / wxwindows / streamdata.h
1 /*****************************************************************************
2  * streamdata.h: streaming/transcoding data
3  *****************************************************************************
4  * Copyright (C) 2000-2004 the VideoLAN team
5  * $Id: wizard.cpp 7826 2004-05-30 14:43:12Z zorglub $
6  *
7  * Authors: ClĂ©ment Stenac <zorglub@videolan.org>
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., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
22  *****************************************************************************/
23
24
25 #define MUXERS_NUMBER 9
26
27 // Do not count dummy here !
28 #define VCODECS_NUMBER 12
29 #define ACODECS_NUMBER 9
30
31 #define MUX_PS          0
32 #define MUX_TS          1
33 #define MUX_MPEG        2
34 #define MUX_OGG         3
35 #define MUX_RAW         4
36 #define MUX_ASF         5
37 #define MUX_AVI         6
38 #define MUX_MP4         7
39 #define MUX_MOV         8
40 #define MUX_WAV         9
41
42 /* Muxer / Codecs / Access_out compatibility tables */
43
44
45 struct codec {
46     char *psz_display;
47     char *psz_codec;
48     char *psz_descr;
49     int muxers[MUXERS_NUMBER];
50 };
51
52 static struct codec vcodecs_array[] =
53 {
54     { "MPEG-1 Video" , "mp1v" , N_("MPEG-1 Video codec (useable with MPEG PS, " \
55         "MPEG TS, MPEG1, OGG and RAW)"),
56 //       {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_AVI, MUX_RAW, -1,-1,-1 } },
57        {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_RAW, -1,-1,-1,-1 } },
58     { "MPEG-2 Video" , "mp2v" , N_("MPEG-2 Video codec (useable with MPEG PS, " \
59         "MPEG TS, MPEG1, OGG and RAW)"),
60 //       {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_AVI, MUX_RAW, -1,-1,-1 } },
61        {MUX_PS, MUX_TS, MUX_MPEG, MUX_OGG, MUX_RAW, -1,-1,-1,-1 } },
62     { "MPEG-4 Video" , "mp4v" , N_("MPEG-4 Video codec (useable with MPEG PS, " \
63         "MPEG TS, MPEG1, ASF, MPEG4, OGG and RAW)"),
64 //       {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_AVI,MUX_RAW, -1} },
65        {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_RAW, -1,-1} },
66     { "DIVX 1" ,"DIV1",N_("DivX first version (useable with MPEG TS, MPEG1, ASF" \
67         " and OGG)") ,
68 //       {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , MUX_AVI , -1,-1,-1,-1 } },
69        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
70     { "DIVX 2" ,"DIV2",N_("DivX second version (useable with MPEG TS, MPEG1, ASF" \
71         " and OGG)") ,
72        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
73     { "DIVX 3" ,"DIV3",N_("DivX third version (useable with MPEG TS, MPEG1, ASF" \
74         " and OGG)") ,
75        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
76     { "H 263" , "H263" , N_("H263 is a video codec optimized for videoconference " \
77         "(low rates, useable with MPEG TS)") ,
78        { MUX_TS, -1, -1,-1,-1,-1,-1,-1,-1 } },
79     { "H 264" , "H264" , N_("H264 is a new video codec (useable with MPEG TS " \
80         "and MPEG4)") ,
81        { MUX_TS, MUX_MP4, MUX_ASF,-1,-1,-1,-1,-1,-1 } },
82     { "WMV 1" , "WMV1", N_("WMV (Windows Media Video) 7 (useable with MPEG TS, " \
83         "MPEG1, ASF and OGG)") ,
84        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
85     { "WMV 2" , "WMV2", N_("WMV (Windows Media Video) 8 (useable with MPEG TS, " \
86         "MPEG1, ASF and OGG)") ,
87        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
88 #ifdef WIN32
89     { "WMV 3" , "WMV3", N_("WMV (Windows Media Video) 9 (useable with MPEG TS, " \
90         "MPEG1, ASF and OGG)") ,
91        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
92 #endif
93     { "MJPEG" , "MJPG", N_("MJPEG consists of a series of JPEG pictures " \
94         "(useable with MPEG TS, MPEG1, ASF and OGG)") ,
95        {MUX_TS , MUX_MPEG , MUX_ASF , MUX_OGG , -1 , -1,-1,-1,-1 } },
96     { "Theora" , "theo", N_("Theora is a free general-purpose codec (useable " \
97         "with MPEG TS)"),
98        {MUX_TS, -1,-1,-1,-1,-1,-1,-1,-1} },
99     { "Dummy", "dummy", N_("Dummy codec (do not transcode, useable with all " \
100         "encapsulation formats)") ,
101       {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_WAV,MUX_RAW,MUX_MOV}},
102     { NULL,NULL,NULL , {-1,-1,-1,-1,-1,-1,-1,-1,-1}} /* Do not remove me */
103 };
104
105 static struct codec acodecs_array[] =
106 {
107     { "MPEG Audio" , "mpga" , N_("The standard MPEG audio (1/2) format " \
108         "(useable with MPEG PS, MPEG TS, MPEG1, ASF, OGG and RAW)") ,
109 //       {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_AVI,MUX_RAW, -1,-1} },
110        {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_RAW, -1,-1,-1} },
111     { "MP3" , "mp3" , N_("MPEG Audio Layer 3 (useable with MPEG PS, MPEG TS, " \
112         "MPEG1, ASF, OGG and RAW)") ,
113 //       {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_AVI,MUX_RAW, -1,-1} },
114        {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_RAW, -1,-1, -1} },
115     { "MPEG 4 Audio" , "mp4a" , N_("Audio format for MPEG4 (useable with " \
116         "MPEG TS and MPEG4)") ,
117        {MUX_TS, MUX_MP4, -1,-1,-1,-1,-1,-1,-1 } },
118     { "A/52" , "a52" , N_("DVD audio format (useable with MPEG PS, MPEG TS, " \
119         "MPEG1, ASF, OGG and RAW)") ,
120 //       {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_AVI,MUX_RAW, -1,-1} },
121        {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_OGG,MUX_RAW, -1,-1,-1} },
122     { "Vorbis" , "vorb" , N_("Vorbis is a free audio codec (useable with OGG)") ,
123        {MUX_OGG, -1,-1,-1,-1,-1,-1,-1,-1} },
124     { "FLAC" , "flac" , N_("FLAC is a lossless audio codec (useable with OGG " \
125         "and RAW)") ,
126        {MUX_OGG , MUX_RAW, -1,-1,-1,-1,-1,-1,-1} },
127     { "Speex" , "spx" , N_("A free audio codec dedicated to compression of " \
128         "voice (useable with OGG)") ,
129        {MUX_OGG, -1,-1,-1,-1,-1,-1,-1,-1} },
130     { "Uncompressed, integer" , "s16l" , N_("Uncompressed audio samples " \
131         "(useable with WAV)"),
132        {MUX_WAV, -1,-1,-1,-1,-1,-1,-1,-1} },
133     { "Uncompressed, floating" , "fl32" , N_("Uncompressed audio samples " \
134         "(useable with WAV)"),
135        {MUX_WAV, -1,-1,-1,-1,-1,-1,-1,-1} },
136     { "Dummy", "dummy", N_("Dummy codec (do not transcode, useable with all " \
137         "encapsulation formats)") ,
138 //     {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_AVI,MUX_RAW,MUX_MOV}},
139      {MUX_PS,MUX_TS,MUX_MPEG,MUX_ASF,MUX_MP4,MUX_OGG,MUX_RAW,MUX_MOV,MUX_WAV}},
140     { NULL,NULL,NULL , {-1,-1,-1,-1,-1,-1,-1,-1,-1}} /* Do not remove me */
141 };
142
143 struct method {
144     char *psz_access;
145     char *psz_method;
146     char *psz_descr;
147     char *psz_address;
148     int   muxers[MUXERS_NUMBER];
149 };
150
151 static struct method methods_array[] =
152 {
153     {"udp:",N_("UDP Unicast"), N_("Use this to stream to a single computer."),
154      N_("Enter the address of the computer to stream to."),
155      { MUX_TS, -1,-1,-1,-1,-1,-1,-1,-1 } },
156     {"udp:",N_("UDP Multicast"),
157      N_("Use this to stream to a dynamic group of computers on a "
158      "multicast-enabled network. This is the most efficient method "
159      "to stream to several computers, but it does not work over Internet."),
160      N_("Enter the multicast address to stream to in this field. "
161      "This must be an IP address between 224.0.0.0 an 239.255.255.255. "
162      "For a private use, enter an address beginning with 239.255."),
163      { MUX_TS, -1,-1,-1,-1,-1,-1,-1,-1 } },
164     {"http://","HTTP",
165      N_("Use this to stream to several computers. This method is "
166      "less efficient, as the server needs to send the "
167      "stream several times."),
168      N_("Enter the local addresses you want to listen to. Do not enter "
169      "anything if you want to listen to all adresses or if you don't "
170      "understand. This is generally the best thing to do. Other computers "
171      "can then access the stream at http://yourip:8080 by default."),
172      { MUX_TS, MUX_PS, MUX_MPEG, MUX_OGG, MUX_RAW, MUX_ASF, -1,-1,-1} },
173     { NULL, NULL,NULL,NULL , {-1,-1,-1,-1,-1,-1,-1,-1,-1}} /* Do not remove me */
174 };
175
176 struct encap {
177     int   id;
178     char *psz_mux;
179     char *psz_encap;
180     char *psz_descr;
181 };
182
183 static struct encap encaps_array[] =
184 {
185     { MUX_PS, "ps","MPEG PS", N_("MPEG Program Stream") },
186     { MUX_TS, "ts","MPEG TS", N_("MPEG Transport Stream") },
187     { MUX_MPEG, "ps", "MPEG 1", N_("MPEG 1 Format") },
188     { MUX_OGG, "ogg", "OGG", "OGG" },
189     { MUX_RAW, "raw", "RAW", "RAW" },
190     { MUX_ASF, "asf","ASF", "ASF" },
191 //    { MUX_AVI, "avi","AVI", "AVI" },
192     { MUX_MP4, "mp4","MP4", "MPEG4" },
193     { MUX_MOV, "mov","MOV", "MOV" },
194     { MUX_WAV, "wav","WAV", "WAV" },
195     { -1 , NULL,NULL , NULL } /* Do not remove me */
196 };
197
198
199 /* Bitrates arrays */
200     static const wxString vbitrates_array[] =
201     {
202         wxT("3072"),
203         wxT("2048"),
204         wxT("1024"),
205         wxT("768"),
206         wxT("512"),
207         wxT("384"),
208         wxT("256"),
209         wxT("192"),
210         wxT("128"),
211         wxT("96"),
212         wxT("64"),
213         wxT("32"),
214         wxT("16")
215     };
216     static const wxString abitrates_array[] =
217     {
218         wxT("512"),
219         wxT("256"),
220         wxT("192"),
221         wxT("128"),
222         wxT("96"),
223         wxT("64"),
224         wxT("32"),
225         wxT("16")
226     };
227