]> git.vomp.tv Git - vompserver.git/blob - medialauncher.h
15 years that line of code has been waiting to crash
[vompserver.git] / medialauncher.h
1 /*
2     Copyright 2004-2005 Chris Tallon, Andreas Vogel
3
4     This file is part of VOMP.
5
6     VOMP is free software; you can redistribute it and/or modify
7     it under the terms of the GNU General Public License as published by
8     the Free Software Foundation; either version 2 of the License, or
9     (at your option) any later version.
10
11     VOMP is distributed in the hope that it will be useful,
12     but WITHOUT ANY WARRANTY; without even the implied warranty of
13     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14     GNU General Public License for more details.
15
16     You should have received a copy of the GNU General Public License
17     along with VOMP; if not, write to the Free Software
18     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19 */
20
21 #ifndef MEDIALAUNCHER_H
22 #define MEDIALAUNCHER_H
23
24 #include "media.h"
25 #include "config.h"
26
27
28 class MediaLauncher
29 {
30   public:
31     MediaLauncher(Config *c);
32     ~MediaLauncher();
33     //let the launcher read it's config
34     //return != 0 if nothing handled
35     int init();
36     //init as a copy of another launcher
37     int init(MediaLauncher *cp);
38     //get the type for a file (if the launcher can handle it)
39     //return MEDIA_TYPE_UNKNOWN if it cannot be handled
40     ULONG getTypeForName(const char *name);
41     //open a stream, return PID of child , <0 on error
42     int openStream(const char *filename,ULONG xsize, ULONG ysize,const char * command=NULL);
43     //get the next chunk
44     //if *buffer!= NULL - use this one, else allocate an own (with malloc!)
45     //return read len (can be 0!)
46     //return <0 on error, >0 on stream end,0 on OK
47     int getNextBlock(ULONG size,unsigned char **buffer,ULONG *readLen);
48     int closeStream();
49     bool isOpen();
50
51   private:
52     Config *cfg;
53     class MCommand{
54       public:
55       char *command;
56       ULONG mediaType;
57       char *extension;
58       MCommand(const char *name,ULONG type,const char *ext);
59       ~MCommand();
60     } ;
61     typedef MCommand *Pcmd;
62     Pcmd *commands;
63     int numcommands;
64     int pnum;
65     pid_t child;
66     int findCommand(const char *name); //return -1 if not found
67
68
69 };
70
71 #endif