TSツールもどき

以前から、TSのParserルーチン作って、epgdumpもどきとか、TSSplitterもどきとか、TSConverterもどきとか作りかけては放置してたのだけど、新しくwakasaを追加。読んで字のごとく、トラップ外し。
以前にコメントいただいたTosyさんのtsstrip.cは、さらっと見たのだけどよく分からん(^^; 台風で外出できないので、思い立って作ってみた。だいたいこんな感じ。

  • 188バイトずつ読み込む。出力開始位置が確定するまでは、データは全部メモリに保存。<ぉぃ
  • PATがあったら、PMTへの参照を拾って、最後に出てきたPATのメモリ上の位置を覚えておく
  • TOTがあったら、1個目は記録し、2個目以降で最初から20秒以上たっていたらあきらめて全メモリフラッシュし、続きは単にファイルコピー
  • PMTがあったら、ElementPIDごとに、1個目は記録し、2個目以降で1個目のものと違っていれば切り替わったと判断し、その時点で最後のPAT位置を出力開始位置としてメモリフラッシュ、続きは単にファイルコピー

一応できたのだけど、もとが4GBの録画ファイルだと、処理時間のほとんどはただのファイルコピーだ。ftruncateの逆?みたいな、頭を切り捨てられるsyscallがあればいいのに。
というわけで、どうせなら一時ファイルなしで、録画と同時に処理すべきだろー、というわけで、recpt1.plに組み込むのも考えたんだけど、どうせならいろいろ作りかけたルーチンをまとめて、こんなどこかで見たような感じにできないか、考えてみた。

ts-launch tunersrc ch=20 duration=1800 ! b25filter ! filesink file=ch20.ts

とか

ts-launch filesrc file=foo.ts ! wakasafilter ! filesink file=bar.ts

とか

ts-launch filesrc file=foo.ts { hdfilter ! filesink file=foo_hd.ts, onesegfilter ! filesink file=foo_oneseg.ts }

とか。こりゃコマンドラインのparseが面倒だな。。。