modules/raw_video/mlv_rec/mlv.lua

-- 
-- mlv_dump LUA example script
-- 
-- The LUA scripting language is *not* made for efficient bit and byte modifications, so it is hard to patch bytes here.
-- But it is very easy to embed into existing C programs and has a stable API.
-- 

--
-- helpers
--
function replace_bytes(pos, str, hex)
    local binary = hex:fromhex();
    return str:sub(1, pos-1) .. binary .. str:sub(pos + binary:len())
end

function string.fromhex(str)
    return (str:gsub('..', function (cc)
        return string.char(tonumber(cc, 16))
    end))
end

function string.tohex(str)
    return (str:gsub('.', function (c)
        return string.format('%02X', string.byte(c))
    end))
end
--
--


function init()
    print("LUA script loaded");
end

function dng_saved(file, seq)
    print("  --  DNG file was saved (file: '"..file.."', seq: '"..seq.."')");
end

function handle_MLVI(hdr)
    print("  --  handle MLVI ("..#hdr.." byte)");
end

function handle_VIDF(hdr)
    print("  --  handle VIDF ("..#hdr.." byte)");
end

function handle_VIDF_data_read(hdr, data)
    print("  --  handle VIDF after read. hdr ("..#hdr.." byte) and data ("..#data.." byte)");
end

function handle_VIDF_data_write(hdr, data)
    print("  --  handle VIDF before write. hdr ("..#hdr.." byte) and data ("..#data.." byte)");
end

function handle_VIDF_data_write_mlv(hdr, data)
    print("  --  handle VIDF before write as MLV. hdr ("..#hdr.." byte) and data ("..#data.." byte)");
end

function handle_RTCI(hdr)
    print("  --  handle RTCI ("..#hdr.." byte)");
    
    -- replace data in header at position 17 (counting from 1) with 0xDEAD in little endian
    -- this is the tm_sec field
    local ret = replace_bytes(17, hdr, "ADDE");
    
    return ret;
end

