原创 讀寫鎖ReentrantReadWriteLock性質

讀寫鎖ReentrantReadWriteLock性質 一、性質 1、支持鎖的降級,在寫鎖釋放前降級爲讀鎖 2、不支持鎖的升級,由讀鎖升級爲寫鎖將會失敗 3、寫鎖支持ReentrantLock.newCondition,讀鎖不支持

原创 JNI 中jstring轉utf8

JNI 中jstring轉utf8 在java中通過GetStringUTFChars獲取的char*是修改後的utf8字節數組,可以採用如下方式轉換爲標準的utf8編碼 參見Getting true UTF-8 characte

原创 2、ffplay FrameQueue源碼分析

ffplay FrameQueue 源碼分析 一、FrameQueue結構 typedef struct FrameQueue { Frame queue[FRAME_QUEUE_SIZE]; int rindex

原创 5、ffplay音頻解碼模塊源碼分析

ffplay音頻解碼模塊源碼原理分析 一、初始化 二、音頻數據寫入輸出設備 sdl_audio_callback(…)輸出數據的回調函數,將被SDL循環調用。 //參數stream爲音頻緩衝區,len爲緩衝區長度,將音頻數據拷貝到

原创 9、ffplay音頻的波譜圖及頻譜圖源碼分析

ffplay音頻的波譜圖及頻譜圖源碼分析 當ffplay指定啓動參數-showmode [0/1/2]時,值爲0,正常播放(默認);值爲1,顯示波形;值爲2,顯示頻譜圖。 在ffplay中由show_mode變量控制顯示方式取值分

原创 7、ffplay視頻渲染模塊

ffplay視頻渲染模塊源碼分析 main函數中,在stream_open(…)之後調用event_loop()不斷的從SDL中查看是否有SDL事件發生, 如果有事件發生就取出事件處理,否循環從pictq隊列中取出AVFrame渲

原创 4、ffplay解碼線程源碼分析

ffplay解碼線程原理分析 一、視頻解碼模塊 1、從AVPacket 解碼出AVFrame static int decoder_decode_frame(Decoder *d, AVFrame *frame, AVSubtit

原创 3、ffplay同步時鐘源碼分析

ffplay同步時鐘源碼分析 同步時鐘用於音視頻同步(A-V sync) A-V同步可以選擇以音頻同步、視頻同步、外部時鐘同步 一、數據結構 typedef struct Clock { double pts;

原创 6、ffplay音視頻同步原理

ffplay音視頻同步原理 以視頻同步到音頻上進行分析: 音頻播放過程中更新音頻pts 視頻播放渲染過程中更新視頻pts 視頻渲染過程中發現pts大於音頻pts則sleep一定時間 視頻解碼出AVFrame發現小於音頻的pts還

原创 8、ffplay字幕解碼及渲染源碼分析

ffplay字幕解碼及渲染源碼分析 字幕解碼邏輯 static int subtitle_thread(void *arg) { VideoState *is = arg; Frame *sp; int g

原创 1、ffplay PacketQueue源碼分析

ffplay PacketQueue源碼分析 一、數據結構 typedef struct PacketQueue { MyAVPacketList *first_pkt, *last_pkt;//串聯AVPacket鏈表,

原创 Android Button英文全部大寫問題

添加如何寫代碼全局解決 <style name="myTextAppearanceButton" parent="TextAppearance.AppCompat.Widget.Button"> <item name=

原创 Skia Windows 編譯

Skia Windows 編譯 編譯環境:win10 64位、VS2017、git 一、下載Skia相關源碼 1、 下載google工具depot_tools git clone https://chromium.googleso

原创 socket.io使用之io.socket.engineio.client.EngineIOException: server error,parser error

項目中需要使用即時通訊模塊,決定採用socket.io作爲服務端模塊,客戶端採用socket.io-client-java。在開發過程中,測試環境均正常,但發佈到服務器上時客戶端卻報告如下異常: null,parser error io.

原创 最簡單的基於FFMPEG+SDL2的音頻播放器

來自雷神最簡單的基於FFMPEG+SDL的音頻播放器 ver2 (採用SDL2.0) 部分編碼器(例如WMA)的AVCodecContext中的frame_size沒有進行初始化,造成播放異常處理 #include <stdio.h>