sub get_ffmpeg_codecs { my $ffmpeg_bin = shift; my $ffmpeg_ver = shift; my $audio_decode = shift; my $audio_encode = shift; my $video_decode = shift; my $video_encode = shift; my $exitcode = system($CONFIG{'FFMPEG_BIN'}.' -codecs > /dev/null 2>&1'); # FIX ME for WINDOWS if (defined($exitcode) && $exitcode == 0) { open(CMD, $CONFIG{'FFMPEG_BIN'}.' -codecs 2>&1 |'); } else { open(CMD, $CONFIG{'FFMPEG_BIN'}.' -formats 2>&1 |'); } my @output = ; close(CMD); if ($output[0] =~ /^ffmpeg\s+version\s+(.+),\scopyright/i) { $$ffmpeg_ver = $1; } else { return 0; } foreach my $line (@output) { if ($line =~ /\s+([A-Z\s]{6})\s([a-z0-9\_]+)\s+/) { my $support = $1; my $codec = $2; next if !defined($support); next if !defined($codec); if (substr($support, 2, 1) eq 'A') # audio codecs { # $codec = PDLNA::Media::audio_codec_by_beautiful_name($codec); # next unless defined($codec); if (substr($support, 0, 1) eq 'D') { push(@{$audio_decode}, $codec); } if (substr($support, 1, 1) eq 'E') { push(@{$audio_encode}, $codec); } } elsif (substr($support, 2, 1) eq 'V') # video codecs { # TODO transcoding profiles for videos } } } return 1; }