線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1556
推到 Plurk!
推到 Facebook!

DircetShow transform filter 如何取的frame的高跟寬

答題得分者是:ikk
chiganlin
一般會員


發表:1
回覆:3
積分:0
註冊:2009-04-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-04-02 17:53:08 IP:140.121.xxx.xxx 訂閱
各位前輩你們好:
小弟有一個問題卡很久,frame height and width如何取得,encode 是用h.264,目前實作transform filter是手動將height 跟 width設死了,請問各位前輩我如何得知高寬的資訊呢??
編輯記錄
chiganlin 重新編輯於 2009-04-02 17:53:50, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-04-02 18:11:29 IP:163.28.xxx.xxx 訂閱
你是指在你自己寫的filter裡面取得高寬,
或是在GraphBuilder裡面取得?
------
FPGA驗證, FPGA開發平台, http://smims.com
chiganlin
一般會員


發表:1
回覆:3
積分:0
註冊:2009-04-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-04-03 00:26:42 IP:140.121.xxx.xxx 訂閱
你好:
要在transform filter取得高寬!!

我是要從source filter 傳來的資訊中,取得高跟寬,目前我是在transform filter中把高跟寬手動設定好,假設我今天要撥320*240的影片,我將高寬設成320*240,如果要撥800*600的影片就不能撥了,又要重新設定,所以我想知道如何自動取得高跟寬。謝謝!!
編輯記錄
chiganlin 重新編輯於 2009-04-03 00:28:55, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-03 09:00:38 IP:163.28.xxx.xxx 訂閱
你有這個function嗎?
CheckInputType(const CMediaType *pMediaType)

pMediaType就可以取得

[code cpp]
// Get the format area of the media type
VIDEOINFO *pvi = (VIDEOINFO *) pMediaType->Format();

iBitsPerSample = pvi->bmiHeader.biBitCount;
iImageWidth = pvi->bmiHeader.biWidth;
iImageHeight = pvi->bmiHeader.biHeight;
iSizeImage = pvi->bmiHeader.biSizeImage;

[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
chiganlin
一般會員


發表:1
回覆:3
積分:0
註冊:2009-04-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-03 10:09:54 IP:140.121.xxx.xxx 訂閱
恩恩   我有這個函式

typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;

typedef struct tagVIDEOINFOHEADER {
RECT rcSource; // The bit we really want to use
RECT rcTarget; // Where the video should go
DWORD dwBitRate; // Approximate bit data rate
DWORD dwBitErrorRate; // Bit error rate for this stream
REFERENCE_TIME AvgTimePerFrame; // Average time per frame (100ns units)
BITMAPINFOHEADER bmiHeader;
} VIDEOINFOHEADER;

HRESULT CH264Decoder::CheckInputType(const CMediaType *mtIn)
{
// BYTE* test = mtIn->Format();
VIDEOINFOHEADER * temp;
temp =(VIDEOINFOHEADER *) mtIn->Format();
pvi.AvgTimePerFrame = temp->AvgTimePerFrame;
pvi.bmiHeader = temp->bmiHeader;
if (*mtIn->Type() != MEDIATYPE_Video || *mtIn->Subtype() != MEDIASUBTYPE_264VEDIO)
return VFW_E_TYPE_NOT_ACCEPTED;

return S_OK;
}

我用debug模式,把值show出來看了,但是高寬值的位置好像不對,我列在下面:





- temp 0x000dca18
rcSource {top=0 bottom=0 left=0 right=0}
rcTarget {top=0 bottom=0 left=0 right=0}
dwBitRate 0
dwBitErrorRate 0
AvgTimePerFrame 333666
- bmiHeader {...}
biSize 0
biWidth 0
biHeight 0
biPlanes 0
biBitCount 0
biCompression 0
biSizeImage 0
biXPelsPerMeter 40
biYPelsPerMeter 320
biClrUsed 240
biClrImportant 1572865



我也不知道為什麼會這樣,麻煩前輩幫我看一下
編輯記錄
chiganlin 重新編輯於 2009-04-03 10:17:23, 註解 無‧
ikk
尊榮會員


發表:4
回覆:413
積分:768
註冊:2003-06-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-03 10:19:40 IP:163.28.xxx.xxx 訂閱
請用以下code試

[code cpp]
//
// CheckInputType
//
// Check if the pin can support this specific proposed type and format
//
HRESULT CDumpInputPin::CheckInputType(const CMediaType *pMediaType)
{
if ( IsEqualGUID(*pMediaType->Type(), MEDIATYPE_Video))
{
if(pMediaType->formattype == FORMAT_VideoInfo)
{
// Get the format area of the media type
VIDEOINFO *pvi = (VIDEOINFO *) pMediaType->Format();

iBitsPerSample = pvi->bmiHeader.biBitCount;
iImageWidth = pvi->bmiHeader.biWidth;
iImageHeight = pvi->bmiHeader.biHeight;
iSizeImage = pvi->bmiHeader.biSizeImage;
return S_OK;
}
else
{
return S_FALSE;
}
}
else
{
return S_FALSE;
}
}
[/code]
------
FPGA驗證, FPGA開發平台, http://smims.com
編輯記錄
ikk 重新編輯於 2009-04-03 10:20:29, 註解 無‧
chiganlin
一般會員


發表:1
回覆:3
積分:0
註冊:2009-04-02

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-03 11:14:54 IP:140.121.xxx.xxx 訂閱
前輩謝謝你:
我發現問題出在x.264跟h.264,formattype不一樣,我檔案必須用FORMAT_MPEG2_VIDEO這種type,所以我高寬用這個VIDEOINFOHEADER2 Structure就ok了,謝謝前輩指教,讓我發現type不一樣的問題。
系統時間:2024-04-24 14:32:14
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!