Комментарии
function get_sample(s, sample_index) local byte_index = 2*sample_index - 1 local L = string.byte(s, byte_index) local H = string.byte(s, byte_index + 1)
Можно схлопнуть до одного обращения
local L, H = s:byte(byte_index, byte_index + 1)
А так как это горячее место, то обычно идут в ход разные заморочки типа локализации горячих переменных/функций (чтобы Lua VM не лезла через всю цепочку locals, upvalues, globals), а находила нужные переменные самое позднее в upvalues.
И вообще (: string хоть и всеядное, но медленное место в Lua. Раз тут все равно числодробительные данные, может стоит их ещё на стороне C записать в array-часть таблицы целочисленным типом и отдать Lua уже эту таблицу. Опционально указывать размер данных в новом пакете (т.е. при передаче в фильтр), чтобы таблицу вообще можно было переиспользовать без реаллокации (если новых данных ровно или незначительно меньше, чем старых).
Mediastreamer2. Применение Lua-машины в фильтрах