diff --git a/Slim/Player/TranscodingHelper.pm b/Slim/Player/TranscodingHelper.pm index 5f2e344ed17..1fdc4f500da 100644 --- a/Slim/Player/TranscodingHelper.pm +++ b/Slim/Player/TranscodingHelper.pm @@ -33,6 +33,7 @@ sub init { our %commandTable = (); our %capabilities = (); our %binaries = (); +my %proxies = (); sub Conversions { return \%commandTable; @@ -85,7 +86,10 @@ sub loadConversionTables { $line =~ s/^\s*//o; $line =~ s/\s*$//o; - if ($line =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/) { + if ($line =~ /^proxy\s+(\S+)\s+(\S+)/i) { + $proxies{$1} = $2; + } + elsif ($line =~ /^(\S+)\s+(\S+)\s+(\S+)\s+(\S+)$/) { my $inputtype = $1; my $outputtype = $2; @@ -352,7 +356,8 @@ sub getConvertCommand2 { } if ($prefs->get('prioritizeNative')) { - my @types = $type eq 'wav' ? ('pcm', $type) : ($type); + my @types = split /,/, ($proxies{$type} || $type); + unshift @types, 'pcm' if grep /wav/, @types; foreach my $type (@types) { my ($format) = grep /$type/, @supportedformats; @supportedformats = ($format, grep { $_ !~ $type } @supportedformats) if $format; diff --git a/convert.conf b/convert.conf index e60830830e5..51f706d00de 100644 --- a/convert.conf +++ b/convert.conf @@ -86,6 +86,15 @@ # %q, $QUALITY$ - quality # %Q, - quality ( fractal notation: if = '0' return '01' ) # ${FILENAME}$ - contents of {FILENAME} (may contain other $*$ substitutions ) +# +# It's also possible to define "proxies" who tell rules matcher what format(s) a +# helper spits out. This is useful to stick to player's native format whenever +# possible. Use comma-separated list for multiple output formats, from least +# favorite to most favorite +# proxy [,] +# For example if a plugin has created a new format named 'spt' whose helper's output +# is 'ogg' or 'pcm', and you want 'ogg' to be most desired, then add +# proxy spt pcm,ogg # specific combinations match before wildcards