請教影像直接於記憶體處理之問題 |
尚未結案
|
swindler
一般會員 發表:13 回覆:22 積分:17 註冊:2003-01-08 發送簡訊給我 |
有感於存取影像檔在進行編碼處理的速度太慢
參考各位大大之前的文章 進行修改成記憶體直接處理
目前已可進行編碼動作
不過 編碼有時會有錯誤訊息出現 及速度並沒有提升很多
有幾個問題想請教各位大大
....... HWND hWndC; CAPTUREPARMS USB_CCD; LPVIDEOHDR VideoStr; Byte *FrameBuf; int FrameSize; int FrameWidth,FrameHeight,FrameNColor; int frame_count = 1002 ; int new_frame = 1001 ; char s[20]; LRESULT CALLBACK FrameCallBack( HWND hwnd, Longint lpvhdr) { static BITMAPINFOHEADER BitmapHead; static BITMAPINFO BitmapInfo; static BITMAPFILEHEADER BitmapFileHead; CAPSTATUS status; int BIHsize; //取得圖片資料 VideoStr=LPVIDEOHDR(lpvhdr); //取得CAP訊息 capGetStatus(hWndC, &status, sizeof(status) ) ; //取得圖片格式容量大小 BIHsize=capGetVideoFormatSize(hWndC); //取得圖片格式 代入 bitmapinfohead 內 capGetVideoFormat(hWndC, &BitmapHead, BIHsize); // 編碼影像資料設定 FrameWidth=BitmapHead.biWidth; FrameHeight=BitmapHead.biHeight; FrameNColor=BitmapHead.biBitCount; // 將資料存入 int cnt; if(FrameBuf==0) { FrameSize=VideoStr->dwBufferLength; FrameBuf=new Byte[FrameSize]; } for( cnt=0;cnt<FrameSize;cnt ) { FrameBuf[cnt]= VideoStr->lpData[cnt]; } capSetCallbackOnFrame(hWndC,NULL); return (0); } //--------------------------------------------- void __fastcall TForm1::N2Click(TObject *Sender) { hWndC = capCreateCaptureWindow("USB_CCD",WS_CHILD | WS_VISIBLE, 0,0, 320,240,Panel2->Handle,0); capDriverConnect(hWndC,0); capOverlay(hWndC, true); capPreview(hWndC,true); //抓取影像出現在視窗中 capPreviewRate(hWndC, 1000/20); //每秒影像變化張數 USB_CCD.dwRequestMicroSecPerFrame = 1000000/20; Timer1->Enabled=true;//設成50ms 啟動一次 } //---------------------------------------------- void __fastcall TForm1::Timer1Timer(TObject *Sender) { sprintf(s,"C:\\temp\\%d.cod",frame_count); capSetCallbackOnFrame(hWndC, &FrameCallBack); LoadFromBuf(FrameBuf,FrameWidth,FrameHeight,FrameNColor); //自寫之編碼函數,測試結果只需30ms左右 frame_count ; } ..............................小弟剛寫程式 有些程式排程上不甚瞭解,希望各位大大賜教 問題1: 有時會出現[Access violation at address 0640A928 in module "server.exe" read of address] 但編碼動作依然執行 請問這是處理速度不夠快造成的嗎 如何改善 程式執行動作 因為我對320*240影像編碼只需30ms 理論上應該可以 處理20張/秒以上 事實卻不然 問題2:若這裡 capPreviewRate(hWndC, 1000/20); USB_CCD.dwRequestMicroSecPerFrame = 1000000/20; 是如此設定 但硬體速度未達此更新速率(如使用WEBCAM),請問我執行 capSetCallbackOnFrame(hWndC, &FrameCallBack); 速度會拖慢編碼嗎 發表人 - taishyang 於 2003/10/23 17:14:39 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
swindler您好:
您的問題與我的問題相當類似
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=39134
處理速度似乎就取決於您攝影機的擷取速度了
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |