Thursday, May 29, 2008

VFW: 視訊資料表頭結構

在 vfw.h 中第 3148 行起, 定義了視訊資料表頭結構(video data block header), 如下:

/* video data block header */
typedef struct videohdr_tag {
LPBYTE lpData; /* pointer to locked data buffer */
DWORD dwBufferLength; /* Length of data buffer */
DWORD dwBytesUsed; /* Bytes actually used */
DWORD dwTimeCaptured; /* Milliseconds from start of stream */
DWORD_PTR dwUser; /* for client's use */
DWORD dwFlags; /* assorted flags (see defines) */
DWORD_PTR dwReserved[4]; /* reserved for driver */
} VIDEOHDR, NEAR *PVIDEOHDR, FAR *LPVIDEOHDR;

使用 typedef 的宣告方式, 將 videohdr_tag 這個新的資料形態取了三個別名, 分別是 VIDEOHDR, NEAR *PVIDEOHDR 與 FAR *LPVIDEOHDR。

lpData 紀錄視訊資料緩衝區的位址, 透過此資料成員便可以直接存取視訊影像資料。

dwBufferLength 紀錄 lpData 所指向的視訊資料緩衝區的容量大小。

dwByteUsed 紀錄視訊資料緩衝區已經被使用了多少位元組。

dwTimeCaptured 紀錄影音串流擷取已使用的時間(毫秒 ms)。

dwUser 紀錄視訊擷取視窗關聯的使用者自訂資料。

dwFlags 紀錄視訊資料表頭旗標, 其定義就是在 vfw.h 中, 第 3158 行後所定義的, 如下:

/* dwFlags field of VIDEOHDR */
#define VHDR_DONE 0x00000001 /* Done bit */
#define VHDR_PREPARED 0x00000002
/* Set if this header has been prepared */
#define VHDR_INQUEUE 0x00000004 /* Reserved for driver */
#define VHDR_KEYFRAME 0x00000008 /* Key Frame */
#define VHDR_VALID 0x0000000F /* valid flags */ /* ;Internal */
 

No comments:

Post a Comment