summaryrefslogtreecommitdiffstats
path: root/mpeglib/lib/README
blob: 91a3b07119ecbcfc50a5cf8315fa58a782592187 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80


HOW TO WRITE A PLUGIN
=====================

we need a audio cd player and a grabber and <insert your cool plugin here>
The Plugin approach is minimalistic.

The plugin interface only supports one thing:

* open a stream play it and then close it.

nothing more.


For this you have a class "decoderPlugin.cpp" derive your decoder
from this class and then overwrite the decoder_loop method.
Thats it.

The typical structure in decoder loop look like this:

void decoder_loop() {

1. make instance of decoder and connect it to the input/output
2. go in loop and check sometime a few mutex variables
3. leave loop and destroy your decoder

}

For this your have 3 examples how it can be done.
I think splayPlugin.cpp and mpegPlugin.cpp are clean/good
examples for "education".


If your decoder supports "seek" you are a bit on your own.
You can look in splayPlugin.cpp how it is handled there.
If your decoder supports seek you must overwrite the seek method.

Ok, now you have your raw plugin.
If you want to make it a real KDE compliant player with arts integration
you need to write an arts plugin.



further readings
======================

* This interface doesn´t offer a gui based config dialog 

  To my mind a configuration dialog does not belong into a decoder plugin.
  And that´s the main reason why other solutions are not portable:
  The plugin interface depend on a widget lib. 


* This version has a completely reworked plugin interface.
  I removed the C bindings. And now the interface is C++.
  This made it much more readable. 
  This should make it a bit easier to inlcude new decoders.
  For example look in the directories for mainXYZ.cpp

inputPlugin:
             inputInterfaces like file,http,buffered(loopback) ,cdi
outPlugin  :
             output for audio/video 
playerPlugin:
            this is the base class fo new decoders
splay       : 
            mpeg I Layer 1,2,3 audio decoder
mpegplay    :
            mpeg I video decoder
mpgplayer   :
            mpeg I audio/video decoder
tplay       :
            wav decoder
vorbisPlugin:
            vorbis decoder.(GPLed mp3 replacement, better compression,
                            better sound ->www.xiph.org)