epgrecをpt2(dvb)で使っててたまに以下のようなエラーが出る。
dd: reading `/dev/dvb/adapter0/dvr0': Value too large for defined data type
これが出るとデータがドロップされているので、動画がちょっと飛ぶ。
なんとかしたい。
ちょっと調べた限りでは、ファイルサイズ32bitの壁みたいな情報があったけど、
多分それが原因では無さそう。
(ちゃんと64bitを指定してるし。)
メッセージを調べると、errornoのEOVERFLOWの時に出るメッセージのようだ。
どうもdd内のreadがEOVERFLOWで失敗しているっぽい。
となると原因はドライバ内と思われる。
で、pt2に関係ありそうなところで、EOVERFLOWがあるのは、kernelソース内
drivers/media/dvb/pt1/dvb-core/dmxdev.c
dvb_dmxdev_buffer_writeで、
free = dvb_ringbuffer_free(buf);
if (len > free) {
dprintk("dmxdev: buffer overflow\n");
return -EOVERFLOW;
}
という感じでリングバッファにデータを詰め込もうとしているところくらいか。
どうもカーネル内のリングバッファが足りてないのではないか?
と思ったので、カーネルのリングバッファサイズを増やしたい。
カーネルソースを眺めた結果、ioctlのDMX_SET_BUFFER_SIZEで動的に変更できそうだ。
結果はまたあとで書く。
0 件のコメント:
コメントを投稿