c0de0fdc21e7c884949e2ae9c46984fbc8961699
[meviz.git] / src / main / java / eu / svjatoslav / meviz / encoder / FormatsRegistry.java
1 /*
2  * Meviz - Various tools collection to work with multimedia. Author: Svjatoslav Agejenko.
3  * This project is released under Creative Commons Zero (CC0) license.
4  */
5
6
7 package eu.svjatoslav.meviz.encoder;
8
9 import eu.svjatoslav.meviz.encoder.converters.*;
10
11 import java.util.ArrayList;
12 import java.util.List;
13
14 public class FormatsRegistry {
15
16     private final ArrayList<AbstractConverter> encoders = new ArrayList<>();
17
18     public FormatsRegistry() {
19         // video conversion
20         registerEncoder(new Ffmpeg2theora());
21         registerEncoder(new FFMpegVideo());
22
23         // image conversion
24         registerEncoder(new Convert());
25         registerEncoder(new Cwebp());
26
27         // image to text (OCR)
28         registerEncoder(new Ocr());
29
30         // audio conversion
31         registerEncoder(new Ogg2Wav());
32         registerEncoder(new Flac());
33         registerEncoder(new FFMpegAudio());
34         registerEncoder(new Midi2Wav());
35     }
36
37     public List<AbstractConverter> getEncoders(final String sourceFormat,
38                                                final String targetFormat) {
39
40         final String sourceFormatLowerCase = sourceFormat.toLowerCase();
41         final String targetFormatLowerCase = targetFormat.toLowerCase();
42
43         final ArrayList<AbstractConverter> encoders = new ArrayList<>();
44
45         for (final AbstractConverter encoder : this.encoders)
46             if (encoder.supportsSource(sourceFormatLowerCase))
47                 if (encoder.supportsTarget(targetFormatLowerCase)) {
48                     encoders.add(encoder);
49                     return encoders;
50                 }
51
52         return encoders;
53     }
54
55     private void registerEncoder(final AbstractConverter encoder) {
56         encoders.add(encoder);
57     }
58
59 }