日々

昼食後に化膿止めの薬飲むの忘れてたので3時のお茶終わってから適当に北側のセブン・イレブン行ってどら焼き買って帰って事務所で食った後、薬飲む。
定時後、しばらくTSファイルのPCRについて調べたり。第二神明で帰宅。
何やら封筒が宅配便扱いで届いてた。先月契約したauケータイ×2台のキャッシュバックだった。忘れてた(笑)

晩御飯はオムライスとコーンスープ。
TOTパケットの処理は一応出来たけど、TOTパケットは最長5秒に1回なので最大で10秒近い誤差が出ることになるってこともあって、100msに1回出てくるPCRパケットからタイムスタンプを求める方法を調べてみる。大体判った。例のMPEG教科書やっぱ便利だなー。
ふと、TSファイルの読み込みで4GB超ファイルの対応や、先頭が0x47で始まらないファイルのことを考えると、標準入力から1バイトずつ読み込んで処理する方がいいんじゃないかと思って作ってみたり。さすがに188バイト後に0x47が来るか否かくらいしかチェックはしてないけど、可能ならヘッダに間違いが無いかとCRCがある場合は計算チェックも行った方がいいんだろうなー。
CRCは計算方法調べてみるとデータ全体を巨大な1つの値と見なして規格で定められた定数で割った余りのことらしい。しかし、データ全体を1つの値にまとめるのは現実的じゃないのでデータを順次読み取りながら計算するのはアルゴリズムを理解するのが死ぬほど煩雑で面倒。
どうやら予め計算しておいた0〜255に相当するテーブルを用意して1バイトずつ、このテーブルデータを元に計算していくのが定番っぽい。「TS CRC」でググってみると本人も過去に作ったソースを完全に理解出来てないと書きながら解説してるMPEG2 TSのCRC32を計算するってページを見つけた。ここのソースが定数を元にテーブルを作成する(テーブル値を予め固定で準備しない)ことや、計算方法は簡便なのでそのまま使わせていただこうと思う。