Привет, ЛОР.
Возникла нетривиальная задачка уровня «шлакоблокунь». :) Есть кучка JPEG-файлов, вытащенных из MJPEG-потока с довольно большим количеством битых участков. Оригинальный поток тоже имеется и связать позиции файлов с позицией потока я могу. Нужно определить закономерность, с которой возникают сбои.
Со сбоями в растровых изображениях я сталкиваюсь не в первый раз, даже написал простенький алгоритм, который на раскодированном битмапе считает разности цветовых компонентов и определяет строку, с которой начался искажённый фрагмент. Немножко усложнив алгоритм, можно и пиксель определить (хотя там уже есть нюансы). Так вот, а получится ли, зная X и Y, определить, какой байт в JPEG-е виновен в его подтверждении?
На самом деле да, я понимаю, что этих байт может быть несколько, поскольку JPEG собирается из нескольких таблиц. Но если на выходе у меня будут несколько «подозреваемых», это тоже поможет сложить пазл.
Битые байты, разумеется, могут попадать не только на «количественные» поля. Но если в сигнатуре «JFIF» или «AVI1» вместо I будет Q или что-то вообще нечитаемое – тут сразу понятно, кто виноват. Если в таблице смещений попадётся смещение, выкидывающее за пределы файла – тоже. К сожалению, не все искажения такие легко определяемые.
Уже вижу, как мне пишут про проблему XY. Да, методически я занимаюсь не совсем правильными вещами, надо искать сам источник искажений. Но доступ к нему у меня не слишком регулярный, а вот анализ потока помог бы понять, периодические эти искажения или нет? И если да, то с каким периодом? Байты только искажаются или добавляются/пропадают? В зависимости от этого уже можно определиться, кого пинать – канал связи, сервисы, через которые этот поток проходил до меня и др.