Странная логика активации формата вывода "Int32" [не баг, доработано]

Автор Evgeniy1990, 02 мая 2016, 05:30:38

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Evgeniy1990

Если во время воспроизведения совершенно любого файла, постепенно, по порядку переключать выходные форматы, то можно обнаружить одну странность.

Она заключается в формате вывода Int32.

Итак, порядковая цепочка переключения:

Int16 -> Int24 -> Int32 -> Float

Прямой порядок:

Int16 -> Int24 = 24 bit
Int24 -> int32 = 24 bit
Int32 -> Float = 32 bit float

Обратный порядок:

Float -> int32 = 24 bit
int32 -> int24 = 24 bit
int24 -> int16 = 16 bit

Т.е. у нас, при "Int24 -> int32" и "Float -> int32 = 24 bit" напрочь отсутствует вывод в Int32 (32 bit), всегда остается работать Int24 (24 bit).

По логике, если поочередно включать галочки во время воспроизведения файлов, то при включении Int32, должен меняться формат вывода на лету в Int32 (32 bit), а не оставаться в Int24 (24 bit).

Сейчас же формат вывода: int32 (32 bit) можно включить только лишь одним единственным способом - это полностью отключить все остальные форматы вывода, т.е. снять с их галочки.

Довольно странная (не совсем правильная) логика, как будто бы формат вывода: Int32 (32 bit) - вообще отдален от всех остальных форматов вывода.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

V0lt

Возможно есть какая-то неоптимальность выбора, но ты написал так, что ничего непонятно.

Попробую расставить оптимальные приоритеты, не смотря в код:
16 bit -> 16, 32, 24, float
24 bit* -> 24, 32, float, 16
32 bit -> 32, 24, float, 16
float -> float, 32, 24, 16

*этот сценарий очень редкий из-за паддинга 24 в 32.

Такая логика устраивает? Если чего-нибудь непонятно могу пояснить.
[merge_posts_bbcode]Добавлено: 2016-05-02 08:57:13[/merge_posts_bbcode]

Посмотрел код. Сейчас логика следующая.
16 bit -> 16, float, 24, 32
24 bit* -> 24, float, 16, 32
32 bit -> 32, float, 24, 16
float -> float, 24, 16, 32

Неоптимальность конечно же присутствует.

Aleksoid1978

AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Поясню, почему в текущих версиях у float высоких приоритет, а у int32 низкий.
Float высокий, потому что хотелось уменьшить доп. преобразования, если включена какая-нибудь обработка. Было особенно актуально когда в декодере был микшер.
int32 низкий - скорее всего просто не понравилась избыточность формата :). Но в свете популярности паддинга 24 в 32 решение было неправильное.
[merge_posts_bbcode]Добавлено: 2016-05-02 10:19:58[/merge_posts_bbcode]

Переделал в r1469.