Tommy 碎碎念

Tommy Wu's blog

« 上一篇 | 下一篇 »

修正 mencoder 在 Linux kernel 3.9 底下電視錄影不正確的問題
post by tommy @ 04 五月, 2013 10:29

這個我不確定算是 mencoder 還是 Linux kernel 3.9 的問題. 反正兩者放一起就是有問題就對了.

發生的原因是在 Linux kernel 3.9 中, 對於 V4L2 的時間取得改成使用 monotonic timestamp (透過 v4l2_get_timestamp() 來處理), 但是在 mencoder 中, 似乎沒辦法正確去判斷是一般的 timestamp 還是 monotonic timestamp 就直接當成一般的時間來處理, 所以在計算時間上就有問題.

直接對 kernel 修改, 似乎是比較快的方式, 所以... 我就直接把 v4l2_get_timestamp() 改回原本用的 do_gettimeofday() 來處理, 這樣子在 mencoder 就可以正確的處理了.

例如:

--- linux/drivers/media/pci/saa7134/saa7134-core.c.orig 2013-05-03 14:41:58.146094840 +0800
+++ linux/drivers/media/pci/saa7134/saa7134-core.c 2013-05-03 14:42:23.690886995 +0800
@@ -308,7 +308,7 @@
 
/* finish current buffer */
q->curr->vb.state = state;
- v4l2_get_timestamp(&q->curr->vb.ts);
+ do_gettimeofday(&q->curr->vb.ts);
wake_up(&q->curr->vb.done);
q->curr = NULL;
}

上面是對 saa7134 的處理, 如果你用的是其他的模組, 就要去修改該模組的內容, 或... 直接去改 v4l2_get_timestamp() 也是可以.

Del.icio.us Furl HEMiDEMi Technorati MyShare
迴響
暱稱:
標題:
個人網頁:
電子郵件:
迴響

  

Bad Behavior 已經阻擋了 68 個過去 7 天試圖闖關的垃圾迴響與引用。
Power by LifeType. Template design by JamesHuang. Valid XHTML and CSS