/** * * @param unknown_type $source * @param unknown_type $sourceAnalize * @return NULL|stdClass */ private static function sourceMultiStreamToTarget($source, $sourceAnalize) { if (!isset($sourceAnalize->streamsAsChannels)) { return null; } /* * Sample json string: * - {"detect":"auto"} * - {"audio":{"mapping":[1,2]}} * Struct: * detect - 'auto', when set all other fields are omitted, (optional) * audio - either as a single field or as array * mapping - array of stream ids, optionally in ffmpeg syntax (with source file id) * action - 'merge' (default),'languages', (optional) * output - output stream (optional) * video * ... * */ $multiStream = new stdClass(); $multiStream->audio = new stdClass(); $multiStream->audio->mapping = array(); /* * Use 'downnmix' stream, if there is such, * Otherwise try to map-in FL and FR streams */ $mappedStreams = KDLAudioLayouts::matchLayouts($source->_contentStreams->audio, KDLAudioLayouts::DOWNMIX); if (count($mappedStreams) == 0) { $mappedStreams = KDLAudioLayouts::matchLayouts($sourceAnalize->streamsAsChannels, array(KDLAudioLayouts::FL, KDLAudioLayouts::FR, KDLAudioLayouts::MONO)); } foreach ($mappedStreams as $stream) { $multiStream->audio->mapping[] = $stream->id; } return $multiStream; }
/** * * @param unknown_type $source * @param unknown_type $analyzedStreams * @return NULL|stdClass */ private static function sorroundAudioSurceToTarget($source, $multiStreamSettings, $analyzedStreams) { /* * If there is manually defined multiStream/sorround preset - use it, * don't attempt to figure it out automatically */ if (isset($multiStreamSettings) && !(isset($multiStreamSettings->detect) && $multiStreamSettings->detect == 'auto')) { return $multiStreamSettings; } /* * Sample json string: * - {"detect":"auto"} * - {"audio":{"mapping":[1,2]}} * Struct: * detect - 'auto', when set all other fields are omitted, (optional) * audio - either as a single field or as array * mapping - array of stream ids, optionally in ffmpeg syntax (with source file id) * action - 'merge' (default),'languages', (optional) * output - output stream (optional) * video * ... * */ $multiStream = new stdClass(); $multiStream->audio = new stdClass(); $multiStream->audio->mapping = array(); /* * Use 'downnmix' stream, if there is such, * Otherwise try to map-in FL and FR streams */ $mappedStreams = KDLAudioLayouts::matchLayouts($source->_contentStreams->audio, KDLAudioLayouts::DOWNMIX); if (count($mappedStreams) == 0) { $mappedStreams = KDLAudioLayouts::matchLayouts($analyzedStreams, array(KDLAudioLayouts::FL, KDLAudioLayouts::FR, KDLAudioLayouts::MONO)); } foreach ($mappedStreams as $stream) { $multiStream->audio->mapping[] = $stream->id; } return $multiStream; }
/** * * @param unknown_type $layout * @return string */ protected static function parseAudioLayout($layout) { $lout = KDLAudioLayouts::Detect($layout); if (!isset($lout)) { $lout = $layout; } return $lout; }