Как получить длину кадра FLAC

Я изучаю проблему декодирования FLAC, но не могу понять, как получить длину кадра FLAC. Пожалуйста помоги. https://xiph.org/flac/format.html Я закодировал METADATA_BLOCK_STREAMINFO и получил данные ниже :

mMinBlock: 4096
mMaxBlock: 4096
mMinFrame: 1201
mMaxFrame: 12804
mSampleRate: 44100
mBitPerSample: 16
mTotalSample: 14170212

Затем я начинаю анализировать первый фрейм, ниже информация из заголовка первого фрейма:

isFixBlock = true
blockSize = 12
sampleRate = 9
channel = 10
sampleSize = 4
number = 0
Blocking strategy is fixed-blocksize;
Block size: 1100, it means 256 * (2^(12-8)) samples = 4096 samples;
Sample rate: 1001 : 44.1kHz;
Channel: 2;
Sample size: 100 : 16 bits per sample;

Итак, из приведенной выше информации мы узнаем, что этот кадр имеет 4096 выборок, а размер выборки составляет 16 бит на выборку. Это означает, что длина этого кадра составляет не менее (игнорируя заголовок подкадра, нижний колонтитул кадра и т. д.) 4096 * 16/8 = 8192 байта. Но если я проверю файл FLAC вручную, разрыв смещения первого и второго кадров составит всего 2976 байт, это означает, что длина кадра первого кадра составляет всего 2976 байт. Что-то не так с моим расчетом?

Моя цель - получить смещение кадра и длину кадра для каждого кадра, есть ли хороший способ? Я знаю, что есть код синхронизации 0xFF F8, но это очень низкая эффективность. Заранее спасибо!


person Dongfu He    schedule 13.01.2016    source источник


Ответы (1)


Из http://lists.xiph.org/pipermail/flac-dev/2016-February/005845.html

Вычисленная вами длина кадра (8192 байта) — это длина декодированного кадра, а не кадра FLAC. Поскольку он сжат, он действительно должен быть меньше 8192 байт.

Нет прямого способа найти длину кадра, кроме как найти, где начинается следующий кадр.

person Erdem    schedule 07.03.2016