如在標題我需要從一個字符緩衝器如何讀取短(16位)從一個無符號字符整數(8比特)緩衝器
緩衝
uint8_t *data[AV_NUM_DATA_POINTERS]
這是一個字段讀短整數該AVFrame frame
結構,是通過調用填充FFmpeg的功能
avcodec_decode_audio4(avctx,frame,got_frame_ptr,avpkt)
但是,我需要閱讀該緩衝區簽署16位整數的緩衝區,因爲這是樣本格式INDI由編解碼器上下文 avctx-> sample_fmt == cated AV_SAMPLE_FMT_S16
我試圖做到這一點使用的memcpy,但我還沒有成功獲得合理的值,所以後來我試圖用一個工會結構上的一些相關問題的建議在這裏在StackOverflow中。我的代碼如下: union CharToStruct {0} {0} {0} {0} {0} uint8_t myCharArray [2]; 空頭值; } presentSound;
audioRet=avcodec_decode_audio4(avctx,frame,got_frame_ptr,avpkt);
if(got_frame_ptr){
audioRet=audioRet/2;
int b=0;
for(int i=0;i<audioRet;i++){
presentSound.myCharArray[0]=frame->data[0][2*i+1];
presentSound.myCharArray[1]=frame->data[0][2*i]
dbuf[((i-b)/2)*8+info->mLeft+b]=info->presentSound.value;//the reason of the offset by 8 here is because I will be writing the result to a multichannel device
}
因此,這些值是合理的,但是當我使用portaudio將其寫入設備時,我只是點擊噪聲。我是否以錯誤的方式進行轉換?你能幫助我以更好的方式來做這個閱讀嗎?
非常感謝您的幫助
阿爾巴
噢,謝謝,把結果寫到一個wav文件是一個好主意,這樣我就可以看到播放的聲音是否如預期那樣。 –
這個相關問題的回答[鏈接](http://stackoverflow.com/a/16673014/2716163)建議首先放第二個字節,告訴最短的最重要的位是最後一個字節。但我也嘗試了另一種方式,先把[2 * i]然後再把[2 * i + 1]和我得到的數字放在那麼小,我什麼都聽不到。 –