本文實例主要參考MSDN:http://msdn.microsoft.com/zh-cn/library/ya9bz4ha%28v=vs.80%29.aspx
最近因為項目中遇到了C++聯合體轉換成C#結構的情況,查了很多資料才轉換成功。
備注:對于官方這個UNION示例,我的簡單理解,就是這類UNION做法,可適當代替IF ELSE 之類操作。
解決問題:如果只接收視頻解碼數據,而從不接收音頻數據,那么是否可以直接定義結構體,并以此來獲取視頻數據。
/// <summary>/// * @struct tagTFrameInfo_YUV420/// * @brief 解碼后幀信息結構(包括音頻和視頻)/// * @attention 如果只接收視頻解碼數據,而從不接收音頻數據,那么是否可以直接定義結構體,并以此來獲取視頻數據/// * @原型定義:/// 解碼后幀信息結構(包括音頻和視頻)/// typedef struct tagTFrameInfo/// {/// BYTE m_byMediaType; // 媒體類型(PCM或YUV420)/// DWORD m_dwTimeStamp; // 時間戳 /// union/// {/// BYTE m_byBitCount; // 為YUV時的顏色bit位數 /// BYTE m_bStereo; // 為PCM時的聲道值/// };/// union/// {/// WORD m_wVideoWidth; // 視頻幀寬/// WORD m_wBitRate; // 采樣bit率(如8000)/// };/// union/// {/// WORD m_wVideoHeight;// 視頻幀寬/// WORD m_wBand; // 采樣的位數(如16)/// };/// }TFrameInfo,*PFrameInfo; /// </summary>[StructLayout(LayoutKind.Sequential)]public struct tagTFrameInfo_YUV420{ /// <summary> /// 媒體類型(0:yuv420; 1:pcm; 2:rgb32: 3:uyvy; 4:YV12),pcm是音頻 /// @原型:BYTE m_byMediaType; // 媒體類型(1:PCM或0:YUV420) /// </summary> public byte m_byMediaType; /** 媒體類型(0:yuv420; 1:pcm; 2:rgb32: 3:uyvy; 4:YV12),pcm是音頻 */ /// <summary> /// 時間戳 /// @原型:DWORD m_dwTimeStamp; // 時間戳 /// </summary> public UInt32 m_dwTimeStamp; /** 時間戳 */ // YUV /// <summary> /// 為YUV時的顏色bit位數 /// @原型:BYTE m_byBitCount; //為YUV時的顏色bit位數 /// </summary> public byte m_byBitCount; /** 為YUV時的顏色bit位數 */ /// <summary> /// 視頻幀寬 /// @原型:WORD m_wVideoWidth; //視頻幀寬 /// </summary> public UInt16 m_wVideoWidth; /** 視頻幀寬 */ /// <summary> /// 視頻幀寬 /// @原型:WORD m_wVideoHeight; //視頻幀寬 /// </summary> public UInt16 m_wVideoHeight; /** 視頻幀寬 */}
感興趣的讀者可以對此調試運行一下,希望對大家有所幫助。
新聞熱點
疑難解答