C++聯合體轉換成C#結構

參考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;          /** 視頻幀寬 */
        }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章