Я нашел это сообщение на форуме:
http://www.ureader.com/msg/14712447.aspx
В нем член дает следующую формулу для вычисления временных отметок для аудио, учитывая его формат (частота дискретизации, количество каналов, биты на выборку):
С аудио PCM, duration_in_secs = 8 * buffer_size / wBitsPerSample /
nChannels / nSamplesPerSec или duration_in_secs = buffer_size /
nAvgBytesPerSec (поскольку для аудио PCM nAvgBytesPerSec =
wBitsPerSample * nChannels * nSamplesPerSec / 8).
Единственное, что вам нужно добавить, - это переменная отслеживания, которая сообщает вам, какой номер выборки в потоке, в котором вы находитесь, так что вы можете использовать его для смещения времени начала и окончания на продолжительность (duration_in_secs) при выполнении линейного потоковое видео. Для операций поиска вам, конечно, нужно знать или вычислять номер выборки в потоке.
Не забывайте, что единицы для отметок времени в DirectShow набираются как REFERENCE_TIME, длинное целое число или Int64. Каждая единица равна 100 наносекундам. Вот почему вы видите в видеофильтрах значение 10 000 000, деленное на соответствующее число кадров в секунду (FPS) для вычисления временных меток для каждого кадра, поскольку 10 000 000 равны 1 секунде в переменной REFERENCE_TIME.