因爲項目中遇到了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; /** 視頻幀寬 */
}