討論區快速選單
知識庫快速選單
討論區最近新進100則主題 網路投保旅行平安險 傑米的攝影旅遊筆記
[ 回上頁 ] [ 討論區發言規則 ]
Still image lose 30 frames in windows explorer?
更改我的閱讀文章字型大小
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/26 下午 03:47:28
Hi 好久不見的大家

請 幫幫忙找一下我掉了的30個frame
Purpose : 在重寫usb avstream camera mini driver時,still pin出了問題,向上送的首30個frame不見了去

Enviroment : Windows XP SP2/ DirectShow 9.0/Windows server 2008 WDK

Issue:

我最近在重寫usb video mini driver碰到了很玄的問題。是這樣的,為了要支援still pin,所以最近給他加了interrupt和宣告still pin的介面。同時宣告支援WIA,可以在檔案總管中看到video stream。但是,當我觸發still pin動作時,事情發生了,still image並沒有顯示在畫面下方,我重複做了幾次,發現每次不管哪個resolution,都到第三十一次觸發still image時,就可以恢復正常顯示。. (巧合的是30 fps 是我的device目前支援的維一一種framerate )

我回頭檢查了幾次driver的code,看看觸發和填image buffer的情況,以及動一動timestamp/drop frame property的設定,看起來沒有發現異常,到這邊 我卡住了..上來求救

於是笨妹阿熊我就用graphedit來抓取graph來run看看,結果發現也是一樣無法顯示在active window上面,但是如果此時用滑鼠去拉動一下active windows的話(觸發re-paint). 畫面就可以顯示出來了。這樣看起來似乎資料是有填到buffer裡去的,但是沒有顯示,所以阿熊就去debug renderer,結 果發現renderer的input pin在資料來的call back沒有被呼叫咧,有人吞了我的image不交出來。



**下面是我用graphedit抓來的檔案總管graph描述
camera capture pin(YUY2)-> smart tee->directshow AVI decompressor(RGB24)->Video Renderer.
camera still pin(YUY2)->directshow AVI decompressor(RGB24)->Video Renderer. ---- (X)

**作實驗,將renderer改為另一種VMR render 接在camera still pin後面,並拿掉AVI compressor。可以正常並顯示 still image

camera still pin(YUY2)->VMR renderer. (ok!!)

**再作實驗將 VMR 連結到 AVI decompressor後面,結果問題又發生了.

camera still pin(YUY2)->directshow AVI decompressor(RGB24)->VMR Renderer ---- (X)

猜測:
感覺上是AVI decompressor 不知道為了什麼hold住了我30 frames的資料。請問有沒有人碰過類似的情況或知道AVI decompressor有那些可能會drop掉特定數量的frame。

其它參考:
我將用一個graph給 UVC driver使用,UVC driver不會發生此問題

任何幫忙都誠心感謝。

笨妹阿熊回來了

[這個問題亦post在msdn forum上]
http://social.msdn.microsoft.com/Forums/en-US/windowsdirectshowdevelopment/thread/e7c6e3c7-fd07-400c-a6e9-ba611e352f9d
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/5/27 上午 11:38:08

我找到 CVideoTransformFilter 在 base class中,根據msdn文件它就是Transform filter的base class.
在該base class中有一個function是負責drop frame的,叫Shouldskipframe

不過看起來並不是這個function讓我出局的。

看來我得建一個transform filter然後放下去debug一下了。

嗚 路好長

熊仔
作者 : venny(北極熊) 貼文超過500則人氣指數超過10000點
[ 貼文 602 | 人氣 29600 | 評價 790 | 評價/貼文 1.31 | 送出評價 64 次 ] 
[ 給個讚 ]  [ 給個讚 ]  [ 回應本文 ]  [ 發表新文 ]  [ 回上頁 ] [ 回討論區列表 ] [ 回知識入口 ]
2009/6/1 下午 06:46:38
我要來結束這個熊仔自編自導自演自問自答的問題了

看官以後若有碰到一樣的問題 就不用我一樣debug好久了

如果你在檔案總管之中看到snapshot總是要30張以後才看的到 而且在 graphedit中

若你接
source (still pin) ->AVI decompressor->video renderer 也會有一樣的情況

source (still pin) ->VMR render 不發生的話

那請你跟著我做這些事
1.找到quartz.dll的check build並放進系統裡讓他作用
   使用方法以及windows xp sp2的quartz.dll可以見這裡
    http://rebecca9906.blog.ithome.com.tw/post/1710/26623

2.觸動snaphot 並觀看錯誤訊息

3.尋找SDK中的baseclasses source code "....SDK install path...\Samples\Multimedia\DirectShow\BaseClasses"中
    看看你的錯誤訊息是怎麼被引發的,並找到你driver中有錯的部份

在我的情況中,我是frame的frameflag設錯了,多設或少設都可能會形成我掉30frame的情況。最後是 讓still frame只有
OptionsFlags = KSSTREAM_HEADER_OPTIONSF_SPLICEPOINT;
修正了這個bug.
 板主 : 徵求中
 > 驅動程式 - 討論區
 - 最近熱門問答精華集
 - 全部歷史問答精華集
 - 驅動程式 - 知識庫
  ■ 全站最新Post列表
  ■ 我的文章收藏
  ■ 我最愛的作者
  ■ 全站文章收藏排行榜
  ■ 全站最愛作者排行榜
  ■  月熱門主題
  ■  季熱門主題
  ■  熱門主題Top 20
  ■  本區Post排行榜
  ■  本區評價排行榜
  ■  全站專家名人榜
  ■  全站Post排行榜
  ■  全站評價排行榜
  ■  全站人氣排行榜
 請輸入關鍵字 
  開始搜尋
 
Top 10
評價排行
驅動程式
1 新兵衛 1240 
2 eBoy 980 
3 牧童哥 780 
4 北極熊 580 
5 天行者 580 
6 燒酒仙 440 
7 weber 380 
8 KEN 350 
9 jonay 180 
10 掌握文武半邊天 180 
驅動程式
  專家等級 評價  
  一代宗師 10000  
  曠世奇才 5000  
  頂尖高手 3000  
  卓越專家 1500  
  優秀好手 750  
Microsoft Internet Explorer 6.0. Screen 1024x768 pixel. High Color (16 bit).
2000-2019 程式設計俱樂部 http://www.programmer-club.com.tw/
0.03125