リスタートマーカーがどの程度実用になっているかと試してみました。
0FFDxhの下位3ビットが番号を表してRST0~RST7の8種類ですから、7連続で破損しても回復できるはずです。つまり例えばRST2の次が同じRST2の場合。
8連続以上を判別できないのは桁数の問題ですからどうにもなりません。MPEG-2 TSのcontinuity_counter(4ビット)も16連続以上は無理です。
そのJPEGですが、3連続の破損でずれました。ずれるつまり想定されるMCUの位置に進めなかったことを意味します。
私の実装だと回復できるのですが...IJGの実装のようですね。djpeg.exeでも確認しました。WindowsプレビューやFirefox等々。
jdmarker.cのjpeg_resync_to_restart()の中で再同期を処理していて、なるほど確かに2連続までしか復帰処理をしないようです。
そんなに派手に吹っ飛んだら表示し続けることの意味も薄いでしょうが、なぜ制限しているのでしょうね。
0FFDxhの下位3ビットが番号を表してRST0~RST7の8種類ですから、7連続で破損しても回復できるはずです。つまり例えばRST2の次が同じRST2の場合。
8連続以上を判別できないのは桁数の問題ですからどうにもなりません。MPEG-2 TSのcontinuity_counter(4ビット)も16連続以上は無理です。
そのJPEGですが、3連続の破損でずれました。ずれるつまり想定されるMCUの位置に進めなかったことを意味します。
私の実装だと回復できるのですが...IJGの実装のようですね。djpeg.exeでも確認しました。WindowsプレビューやFirefox等々。
jdmarker.cのjpeg_resync_to_restart()の中で再同期を処理していて、なるほど確かに2連続までしか復帰処理をしないようです。
そんなに派手に吹っ飛んだら表示し続けることの意味も薄いでしょうが、なぜ制限しているのでしょうね。
コメントする