<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 2.2 數據結構定義 ~~~ // 庫包含編解碼器能力定義 #define MEDIACODEC_CAPABILITY_AUDIOENCODEC 0x00000001 ///< 音頻編碼器 #define MEDIACODEC_CAPABILITY_AUDIODECODEC 0x00000002 ///< 音頻解碼器 #define MEDIACODEC_CAPABILITY_VIDEOENCODEC 0x00000004 ///< 視頻編碼器 #define MEDIACODEC_CAPABILITY_VIDEODECODEC 0x00000008 ///< 視頻解碼器 #define MEDIACODEC_CAPABILITY_YUV420SPINPUT 0x00000100 ///< 視頻編碼器支持YUV420SP 數據輸入 #define MEDIACODEC_CAPABILITY_YUV420SPOUTPUT 0x00000200 ///< 視頻解碼器輸出數據為 YUV420SP #define MEDIACODEC_CAPABILITY_DIRECTRENDER 0x00000400 ///< 支持直接視頻顯示,硬件渲染 // 功能標志定義 #define MEDIACODEC_FLAGS_KEYFRAME 0x00000001 ///< 關鍵幀標志 #define MEDIACODEC_FLAGS_WANTSPSPPS 0x00000002 ///< 上層應用處理 SPS、PPS 標志, 視頻編碼使用 #define MEDIACODEC_FLAGS_USEARMV6 0x00000100 ///< 強制使用 ARMv6 指令集 #define MEDIACODEC_FLAGS_NEEDREINIT 0x00000200 ///< 需要重新初始化 Codec #define MEDIACODEC_MAXCODECNAME 50 // 編解碼器 ID 定義 enum MEDIA_CODEC_ID { MEDIA_CODEC_ID_NONE = 0, /* video codecs */ MEDIA_CODEC_ID_H264, MEDIA_CODEC_ID_MJPEG, /* audio codecs */ MEDIA_CODEC_ID_AMR_NB = 10, MEDIA_CODEC_ID_AMR_WB, MEDIA_CODEC_ID_MP3, MEDIA_CODEC_ID_AAC, MEDIA_CODEC_ID_MP2, MEDIA_CODEC_ID_CELT, MEDIA_CODEC_ID_SPEEX, /* user define codecs*/ MEDIA_CODEC_ID_USERSTART = 100, ///< 用戶自定義編解碼器起始 ID }; // 音視頻數據包結構 typedef struct MediaPacket { CHAR *lpData; DWORD dwSize; DWORD dwFlags; DWORD dwTimeStamp; }MediaPacket,*LPMediaPacket; // 編解碼器上下文句柄結構 struct MediaCodecContext { DWORD cbSize; ///< 結構體大小 DWORD dwCodecId;///< 編解碼器 ID DWORD dwFlags; ///< 相關標志 CHAR szCodecName[MEDIACODEC_MAXCODECNAME];///< 編解碼器的名稱 // 編解碼器私有數據 void* lpPrivateData; ///< 私有數據指針 // 音頻部分參數 DWORD dwChannels; ///< 音頻通道數 DWORD dwSamplesPerSec; ///< 音頻采樣率 DWORD dwBitsPerSample; ///< 音頻量化位數 DWORD dwFrameSize; ///< 音頻編碼器處理幀長 // 視頻部分 DWORD dwWidth; ///< 視頻寬度 DWORD dwHeight; ///< 視頻高度 DWORD dwFrameRate; ///< 幀率 DWORD dwGopSize; ///< 關鍵幀間隔 AC_PIX_FMT PixFmt; ///< 視頻幀格式 // 編碼設置 DWORD dwBitrate; ///< 目標碼率,單位:bps DWORD dwQuality; ///< 質量 DWORD dwPreset; ///< 預設參數 // 顯示部分 void* lpGlobalContext; ///< 全局環境,Android 中為 JavaVM* void* lpSuface; ///< 顯示表面句柄 DWORD reserved[20]; ///< 保留 ~~~ 音視頻數據包結構(struct MediaPacket)是 AnyChat 內核與 CODEC 交換數據的基本結構,里面包含了數據域(lpData)、數據長度(dwSize)和標志域(dwFlags),所有數據域的內存均由 AnyChat 內核分配與管理(包括輸入類型與輸出類型),CODEC 不需要再分配,對于輸出類型的數據包,CODEC 內部需要檢查 AnyChat 內核分配的內存是否足夠(通過 dwSize 來判定),否則可能導致數據越界,形成非法內存訪問異常,當 CODEC 內部檢查到 AnyChat 內核分配的輸出內存大小不足時,需要返回出錯代碼。標志域需要根據實際情況進行設置,如當視頻編碼 CODEC 輸出的數據是關鍵幀時,標志域需要設置“MEDIACODEC_FLAGS_KEYFRAME”標志。 編解碼器上下文句柄結構(struct MediaCodecContext)是 AnyChat 內核與 CODEC 之間傳遞參數的重要數據結構,初始化 CODEC 之前,AnyChat 內核會先設置相關的變量(如視頻類型 CODEC 的寬度、高度、碼率等),初始化 CODEC 之后,CODEC 內部需要設置該結構的相關變量,將信息返回給 AnyChat 內核,如初始化音頻編碼 CODEC 之后,CODEC 需要設置 dwFrameSize 變量,便于 AnyChat 內核了解每次需要向 CODEC 提交多少數據進行編碼,詳細信息可參考后面的“音頻 CODEC” 和“視頻 CODEC”等相關章節的具體說明。 編解碼器上下文句柄結構(struct MediaCodecContext)中的“lpPrivateData”非常重要,可用于保存編解碼器內部的狀態參數,通常在初始化時分配內存,并初始化相關的狀態,然后在編碼(解碼)的過程中使用,最后在關閉時釋放內存, 分配內存、釋放內存均在 CODEC 內部完成,“lpPrivateData”只是起一個中間橋梁的作用,AnyChat 內核會保障 CODEC 調用(初始化、編解碼、關閉)之間的互斥。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看