-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDefaultConversionHub.java
More file actions
50 lines (44 loc) · 2.58 KB
/
DefaultConversionHub.java
File metadata and controls
50 lines (44 loc) · 2.58 KB
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
package me.tamkungz.codecmedia.internal.convert;
import me.tamkungz.codecmedia.CodecMediaException;
import me.tamkungz.codecmedia.model.ConversionResult;
public final class DefaultConversionHub implements ConversionHub {
private final MediaConverter passthroughConverter = new SameFormatCopyConverter();
private final MediaConverter wavPcmConverter = new WavPcmConverter();
private final MediaConverter videoToAudioConverter = new UnsupportedRouteConverter(
"video->audio conversion is not implemented yet (planned conversion hub path)"
);
private final MediaConverter audioToImageConverter = new UnsupportedRouteConverter(
"audio->image (album cover) conversion is not implemented yet (planned conversion hub path)"
);
private final MediaConverter videoToVideoConverter = new UnsupportedRouteConverter(
"video->video conversion is not implemented yet (planned conversion hub path)"
);
private final MediaConverter audioToAudioTranscodeConverter = new UnsupportedRouteConverter(
"audio->audio transcoding is not implemented yet (planned conversion hub path)"
);
private final MediaConverter imageToImageTranscodeConverter = new ImageTranscodeConverter();
@Override
public ConversionResult convert(ConversionRequest request) throws CodecMediaException {
if (request.sourceExtension().equals(request.targetExtension())) {
return passthroughConverter.convert(request);
}
ConversionRoute route = ConversionRouteResolver.resolve(request.sourceMediaType(), request.targetMediaType());
return switch (route) {
case VIDEO_TO_AUDIO -> videoToAudioConverter.convert(request);
case AUDIO_TO_IMAGE -> audioToImageConverter.convert(request);
case VIDEO_TO_VIDEO -> videoToVideoConverter.convert(request);
case AUDIO_TO_AUDIO -> {
boolean wavPcmPair = ("wav".equals(request.sourceExtension()) && "pcm".equals(request.targetExtension()))
|| ("pcm".equals(request.sourceExtension()) && "wav".equals(request.targetExtension()));
if (wavPcmPair) {
yield wavPcmConverter.convert(request);
}
yield audioToAudioTranscodeConverter.convert(request);
}
case IMAGE_TO_IMAGE -> imageToImageTranscodeConverter.convert(request);
case UNSUPPORTED -> throw new CodecMediaException(
"Unsupported conversion route: " + request.sourceMediaType() + " -> " + request.targetMediaType()
);
};
}
}