• <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>

            牽著老婆滿街逛

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

            輕松使用 ffmpeg sdk 實現各種格式的rgb以及yuv raw

            轉載自:http://www.roarsoft.net/a/Media/AVPlay/201006/9661.html

            有些時候大家需要一些yuv或者rgb 的 raw data的文件。ffmpeg項目中的libavcodec支持很多格式的raw相互轉換,在早期的版本中,使用 img_convert,在新版本中,使用 sws_scale 完成。各種不同的格式在ffmpeg里面被稱為 pixel formats,下面貼出來的就是:

            PIX_FMT_YUV420P,    < Planar YUV 4:2:0 (1 Cr & Cb sample per 2x2 Y samples)/n"
            PIX_FMT_YUV422,     < Packed pixel, Y0 Cb Y1 Cr /n"
            PIX_FMT_RGB24,      < Packed pixel, 3 bytes per pixel, RGBRGB.../n"
            PIX_FMT_BGR24,      < Packed pixel, 3 bytes per pixel, BGRBGR.../n"
            PIX_FMT_YUV422P,    < Planar YUV 4:2:2 (1 Cr & Cb sample per 2x1 Y samples)/n"
            PIX_FMT_YUV444P,    < Planar YUV 4:4:4 (1 Cr & Cb sample per 1x1 Y samples)/n"
            PIX_FMT_RGBA32,     < Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness/n"
            PIX_FMT_YUV410P,    < Planar YUV 4:1:0 (1 Cr & Cb sample per 4x4 Y samples)/n"
            PIX_FMT_YUV411P,    < Planar YUV 4:1:1 (1 Cr & Cb sample per 4x1 Y samples)/n"
            IX_FMT_RGB565,     < always stored in cpu endianness /n"
            PIX_FMT_RGB555,     < always stored in cpu endianness, most significant bit to 1 /n"
            PIX_FMT_GRAY8,/n"
            PIX_FMT_MONOWHITE, < 0 is white /n"
            PIX_FMT_MONOBLACK, < 0 is black /n"
            PIX_FMT_PAL8,       < 8 bit with RGBA palette /n"
            PIX_FMT_YUVJ420P,   < Planar YUV 4:2:0 full scale (jpeg)/n"
            PIX_FMT_YUVJ422P,   < Planar YUV 4:2:2 full scale (jpeg)/n"
            PIX_FMT_YUVJ444P,   < Planar YUV 4:4:4 full scale (jpeg)/n"
            PIX_FMT_UYVY422,    < Packed pixel, Cb Y0 Cr Y1 /n"
            PIX_FMT_UYVY411,    < Packed pixel, Cb Y0 Y1 Cr Y2 Y3/n"
            /////////////////////////////////////////////////////////////////

            舉例來說,
            PIX_FMT_YUV444P,    < Planar YUV 4:4:4  
            指的是文件的開始1/3是y分量,中間1/3是u分量,最后1/3是v分量。

            PIX_FMT_RGB24,      < Packed pixel, 3 bytes per pixel, RGBRGB.../n"
            指的是文件內的數據3個byte是一組,始終按照RGB方式排列。

            PIX_FMT_RGBA32,     < Packed pixel, 4 bytes per pixel, BGRABGRA..., stored in cpu endianness/n"
            指的是文件內的數據4個byte是一組,始終按照RGB+alpha byte方式排列,alpha表示透明度。
            /////////////////////////////////////////////////////////////////

            ffmpeg對于以上所有類型抽象成
            typedef struct AVPicture {
                 uint8_t *data[4];
                 int linesize[4];
            } AVPicture;

            該結構體總共表示四個平面,
            data[0]表示第一個平面的數據開始地址,
            linesize[0]表示第一個平面的每一行有多少個字節。

            這樣PIX_FMT_YUV444P有三個Planar,最后一個平面空著不用就好了。

            AVFrame這個結構體的包含AVPicture,此外,AVFrame還含有其他一些成員數據,比如。是否key_frame、已編碼圖像數 coded_picture_number、是否作為參考幀reference、宏塊類型 *mb_type等等,這里就不詳細敘述了。
            /////////////////////////////////////////////////////////////////


            鑒于img_convert在新版中已經不用,所以這里只介紹一下效率更高的。sws_scale。

            來看看它的函數定義:
            int sws_scale(struct SwsContext *ctx, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[])

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

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

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

            當然,RGB格式是按照緊湊格式進行編碼的,因此只有一個平面,也就是說只要設置src[0]就可以,src[1],src[2],src[3]都為 NULL。

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

            按照一般處理src[0]和srcStride[0]分別設置為起始圖像數據的開始和圖像每一行的像素個數。

            那如果把src[0] 設置為 width * ( height - 1)     srcStride[0] = -height 結果會如何呢?是不是就會把圖像倒過來呢?

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

            /////////////////////////////////////////////////////////////////

            不發命令行工具了,需要的mail給我.

            這里提供一個windows平臺下使用ffmpeg的快捷方法,下面這個開發包內直接提供lib給開發人員使用。

            posted on 2013-01-28 18:40 楊粼波 閱讀(2976) 評論(2)  編輯 收藏 引用

            評論

            # re: 輕松使用 ffmpeg sdk 實現各種格式的rgb以及yuv raw 2013-04-12 09:19 chinayin

            樓主是怎么編譯ffmpeg的啊,怎么將他編譯成能夠獨立運行的lib呢,這個很困惑啊!還希望樓主不吝賜教  回復  更多評論   

            # re: 輕松使用 ffmpeg sdk 實現各種格式的rgb以及yuv raw 2013-04-12 09:21 chinayin

            我按照你的說明編譯了最新版。但是在自己的工程里面不能使用,以為頭文件需要其他的頭文件 這個問題你是怎么解決的啊  回復  更多評論   

            久久AAAA片一区二区| 亚洲国产一成久久精品国产成人综合 | 久久久精品人妻一区二区三区蜜桃| 久久国产精品99精品国产987| 国产成人香蕉久久久久| 久久99国产精品久久99| 久久成人精品| 人妻无码αv中文字幕久久| 国产69精品久久久久9999| 亚洲国产成人久久笫一页| 少妇久久久久久被弄高潮| 情人伊人久久综合亚洲| 欧美亚洲国产精品久久| 国产国产成人久久精品| 国内精品久久久久影院薰衣草| 国产成人精品免费久久久久| 欧美国产精品久久高清| 97精品久久天干天天天按摩| 人妻无码久久一区二区三区免费| 9999国产精品欧美久久久久久 | 国内精品九九久久精品| 成人免费网站久久久| 免费无码国产欧美久久18| 7国产欧美日韩综合天堂中文久久久久| 一级a性色生活片久久无| 国产 亚洲 欧美 另类 久久| 久久99亚洲网美利坚合众国| 精品久久久一二三区| 精品国产一区二区三区久久蜜臀| 久久青青草原亚洲av无码app| 热久久视久久精品18| 久久se这里只有精品| 国产成人精品久久一区二区三区av| 亚洲国产精品久久电影欧美| 色婷婷狠狠久久综合五月| 久久高清一级毛片| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 狠狠精品干练久久久无码中文字幕| 久久精品天天中文字幕人妻| 影音先锋女人AV鲁色资源网久久| 亚洲午夜久久久|