亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 3649 | 回復(fù): 4
打印 上一主題 下一主題

[其他] 環(huán)形緩沖區(qū) [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-09-02 09:46 |只看該作者 |倒序?yàn)g覽
20可用積分
通常看到的環(huán)形緩沖區(qū)里面的節(jié)點(diǎn)長度通常是相同的, 問下有沒有長度不不固定的環(huán)形緩沖區(qū)的開源實(shí)現(xiàn)?
最好要總得內(nèi)存大小固定, 讀寫高效

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
2 [報(bào)告]
發(fā)表于 2014-09-02 09:56 |只看該作者
數(shù)據(jù)項(xiàng)前面加個(gè)長度信息,應(yīng)該很容易改造

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2014-09-02 10:05 |只看該作者
簡單地處理,可以用數(shù)組或鏈表來實(shí)現(xiàn),這樣總長固定,元素長可以不定。
以前處理視頻時(shí)的比較簡陋的實(shí)現(xiàn),不過不考慮其他情況讀寫h264幀夠用了:

HRESULT        CCycleBuffer::WriteBuffer(IN void* pBuffer, IN int nLength)
{
        CAutoLock lock(&m_cStateLock);

        CopyMemory(m_pCycleBuffer[m_nWriteIndex].pBuffer, pBuffer, min(m_nBufLen, nLength));
        m_pCycleBuffer[m_nWriteIndex].lLength = min(m_nBufLen, nLength);
        m_nWriteIndex++;
        m_nWriteIndex %= m_nBufCount;

        return S_OK;
}

HRESULT        CCycleBuffer::ReadBuffer(IN void* pBuffer, IN OUT int* pReadLength)
{
    CheckPointer(pReadLength, E_POINTER);
    CheckPointer(pBuffer, E_POINTER);

        CAutoLock lock(&m_cStateLock);
        if (m_nReadIndex == m_nWriteIndex || m_pCycleBuffer[m_nReadIndex].lLength == 0)
        { //Can't read
                m_cStateLock.Unlock();
                *pReadLength = 0;
                return S_OK;
        }
       
        CopyMemory(pBuffer, m_pCycleBuffer[m_nReadIndex].pBuffer, min(m_pCycleBuffer[m_nReadIndex].lLength, *pReadLength));
        * pReadLength = min(m_pCycleBuffer[m_nReadIndex].lLength, *pReadLength);
        m_pCycleBuffer[m_nReadIndex].lLength = 0;
        m_nReadIndex++;
        m_nReadIndex %= m_nBufCount;

        return S_OK;
}


其中:CYCLE_BUFFER*        m_pCycleBuffer;

typedef struct _tagCycleBuffer
        {
                BYTE*        pBuffer;
                long        lLength;
        }CYCLE_BUFFER;

前后加上各變量初始化,就這么簡單。當(dāng)然效率一般,因?yàn)閿z像機(jī)每秒25幀,速度要求不高,所以上面這種普通的同步lock足夠用了。如果你要求效率高的話,可以考慮用不加鎖的內(nèi)存數(shù)組。

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2014-09-02 11:03 |只看該作者
謝謝樓上

1. min(m_nBufLen, nLength) 可能造成數(shù)據(jù)丟失
2. 讀寫的時(shí)候用了內(nèi)存拷貝
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP