LINUX.ORG.RU

Написал (базовый) декодер DTS-HD Master Audio

 , , ,


3

2

Давно меня разочаровывала ситуация с поддержкой формата DTS-HD в Linux: инструментов для его декодирования попросту не было. Существующие open source декодеры (а их два: библиотека libdca и основанный на ее коде встроенный декодер FFmpeg) умеют декодировать только обратно совместимое DTS ядро с потерями в качестве. Для перевода треков без потерь (т.е. декодирования расширения XLL, маркетинговое название которого DTS-HD Master Audio) во FLAC приходилось ставить винду и проприетарные кодеки. Поэтому решил покурить стандарт ETSI TS 102114 и написать свой собственный декодер XLLDEC.

Ввиду отсутствия нормальной документации на формат DTS (стандарт не в счет, там много пробелов, недоговорок и неточностей) возможности декодера сильно ограничены. Пока он умеет декодировать без потерь только наиболее базовую конфигурацию потока DTS-HD MA: не более 5.1 каналов, 48 кГц, 16/24 бит. Если обратно совместимое ядро содержит какие-либо расширения (более 5.1 каналов, удвоенная частота дискретизации, DTS-ES мастеринг), декодирование без потерь становится невозможно. Но практика показывает, что аудио треки большого числа Blu-Ray ремуксов, которые можно найти в сети, имеют именно такую конфигурацию. Поэтому декодер не совсем бесполезен.

В общем, желающие приглашаются собрать декодер и попробовать им что-нибудь декодировать. Описание процедуры с примерами есть в README.

P.S. За качество кода просьба сильно не пинать, это моя первая программа на D.

Deleted

Дописал поддержку отмены иерархического даунмикса. Теперь декодер умеет выводить в том числе и 7.1 аудио (но не для всех треков, некоторые 7.1 треки идут без коэффициентов даунмикса, что с ними делать, пока непонятно).

Deleted ()

Декодер переписан на C и переехал на новый адрес. Также добавлена поддержка декодирования DTS-HD High-Resolution Audio.

Deleted ()
Ответ на: комментарий от Deleted

Декодер переписан на C

В D разочаровался, или?..

hobbit ★★★★★ ()
Ответ на: комментарий от Deleted

Хотя я бы, конечно, для программы такого уровня тоже предпочёл бы Си. Не потому, Что Ди плохой, а для того, чтобы максимально облегчить включение декодера в другие проекты...

hobbit ★★★★★ ()
Ответ на: комментарий от hobbit

Хотя я бы, конечно, для программы такого уровня тоже предпочёл бы Си. Не потому, Что Ди плохой, а для того, чтобы максимально облегчить включение декодера в другие проекты...

Ну да, собственно поэтому и пришлось переписать, поскольку декодер на каком-то этапе трансформировался из самостоятельного proof-of-concept приложения в библиотеку. Не все хотят вызывать из своей программы код, завязанный на GC.

А так сам D вроде неплохим языком показался. Порадовало, что можно сразу писать рабочий код, а не городить кучу типичных для C микровелосипедов для отладки, работы с памятью и т.п. Но я D совсем немного помучал, к OOP-части и не прикасался почти, как он там по сравнению с C++, не знаю.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.