• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            牽著老婆滿街逛

            嚴(yán)以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            ffmpeg 進(jìn)行視頻轉(zhuǎn)換圖像翻轉(zhuǎn)的問(wèn)題的修正

            轉(zhuǎn)載自:http://blog.csdn.net/bluestn/article/details/2068351

            我在用FFMPEG 開(kāi)發(fā)在DirectShow 環(huán)境下生成FLV的篩選器(Filter)的時(shí)候,碰到了一個(gè)比較古怪的問(wèn)題。因?yàn)樵摵Y選器的輸入格式需要支持常見(jiàn)的RGB,和YUV格式。但是在輸入是RGB格式的時(shí)候,最終生成的視頻圖像是翻轉(zhuǎn)的。而用YUV格式確實(shí)沒(méi)有問(wèn)題的。

            分析了一下程序,因?yàn)閒fmpeg支持的最終存入FLV的格式是YUV420P,需要調(diào)用sws_scale進(jìn)行圖像的格式轉(zhuǎn)換,應(yīng)該是調(diào)用sws_scale進(jìn)行圖像格式轉(zhuǎn)換的時(shí)候發(fā)生的圖像反轉(zhuǎn)。雖然問(wèn)題很顯然,但是卻一直找不到好的辦法,這個(gè)問(wèn)題困擾了好久,也查看了ffmpeg的源代碼。本想也一段代碼,先把RGB格式的圖像先手工做一次反轉(zhuǎn),再通過(guò)sws_scale進(jìn)行處理,那樣負(fù)負(fù)得正正好解決問(wèn)題,當(dāng)然實(shí)現(xiàn)這樣的反轉(zhuǎn)代碼也比較簡(jiǎn)單,稍微花點(diǎn)時(shí)間就可以搞定。但是進(jìn)行編解碼處理的程序關(guān)鍵是性能,這樣處理,因?yàn)閳D像反轉(zhuǎn)操作,白白損失了大量的CPU。后來(lái)發(fā)現(xiàn)其實(shí),有一個(gè)非常巧妙的方法可以解決這個(gè)問(wèn)題。或許ffmpeg在開(kāi)發(fā)的時(shí)候,他們?cè)缫芽紤]到了這個(gè)問(wèn)題,已經(jīng)預(yù)留了這個(gè)后門(mén)了。

            辦法是這樣的:

            先看看sws_scale的函數(shù)定義

            int sws_scale(struct SwsContext *ctx, uint8_t* src[], int srcStride[],
                          int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[])

            其中src和srcStride定義了輸入圖像的四個(gè)平面的數(shù)據(jù)起始指針和四個(gè)平面中每一行包含的像素的個(gè)數(shù)。

            dst和dstStride是輸出變量,定義的是輸出圖像的四個(gè)平面的數(shù)據(jù)起始指針和四個(gè)平面包含的數(shù)據(jù)的大小。

            為什么一個(gè)圖像有四個(gè)平面,可以找一下YUV格式的一些詳細(xì)介紹就可以明白。

            當(dāng)然,RGB格式是按照緊湊格式進(jìn)行編碼的,因此只有一個(gè)平面,也就是說(shuō)只要設(shè)置src[0]就可以,src[1],src[2],src[3]都為NULL。

            我們就在設(shè)置src[0]和srcStride[0]的地方做文章。

            按照一般處理src[0]和srcStride[0]分別設(shè)置為起始圖像數(shù)據(jù)的開(kāi)始和圖像每一行的像素個(gè)數(shù)。

            那如果把src[0] 設(shè)置為 width * ( height - 1)    srcStride[0] = -height 結(jié)果會(huì)如何呢?是不是就會(huì)把圖像倒過(guò)來(lái)呢?

            實(shí)際確實(shí)如此。進(jìn)行圖像倒置的操作盡然如此簡(jiǎn)單。這樣避免了人為再添加一次圖像的反轉(zhuǎn)操作,提高了編碼的性能。

            posted on 2013-01-28 19:28 楊粼波 閱讀(2465) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            精品多毛少妇人妻AV免费久久| 国产午夜精品理论片久久影视| 久久婷婷午色综合夜啪| 综合久久精品色| 久久精品国产清高在天天线| a级毛片无码兔费真人久久| 一级A毛片免费观看久久精品| 亚洲日本va中文字幕久久| 2021国产成人精品久久| 久久WWW免费人成一看片| 久久这里只精品国产99热| 色婷婷久久综合中文久久一本| 久久婷婷成人综合色综合| 久久精品国产99国产精品| 久久国产色AV免费观看| 久久久久亚洲AV无码专区首JN| 办公室久久精品| 久久免费高清视频| 久久男人Av资源网站无码软件| 久久一区二区三区99| 99久久精品无码一区二区毛片| 亚洲国产精品无码久久久蜜芽 | 色偷偷久久一区二区三区| 88久久精品无码一区二区毛片 | 久久精品国产精品亚洲精品| 久久人做人爽一区二区三区| 91久久精品电影| 93精91精品国产综合久久香蕉| 国产成人久久AV免费| 国产亚洲色婷婷久久99精品| 色综合久久无码五十路人妻| 国产精品亚洲综合久久| 精品久久久久久久久免费影院| 噜噜噜色噜噜噜久久| 亚洲国产高清精品线久久| 久久这里有精品| 亚洲国产另类久久久精品| 99久久国产热无码精品免费| 精品午夜久久福利大片| 久久香蕉一级毛片| 国产精品九九久久免费视频|