日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2024年12月29日(星期日)

2021年12月29日 | 4412 移植x264并且YUV422轉(zhuǎn)x264

發(fā)布者:BeaLaity0170 來源: eefocus 手機(jī)看文章 掃描二維碼
隨時隨地手機(jī)看文章

一、YUV422轉(zhuǎn)換規(guī)律 

  做視頻采集與處理,自然少不了要學(xué)會分析YUV數(shù)據(jù)。因?yàn)閺牟杉慕嵌葋碚f,一般的視頻采集芯片輸出的碼流一般都是YUV數(shù)據(jù)流的形式,而從視頻處理(例如H.264、MPEG視頻編解碼)的角度來說,也是在原始YUV碼流進(jìn)行編碼和解析,所以,了解如何分析YUV數(shù)據(jù)流對于做視頻領(lǐng)域的人而言,至關(guān)重要。本文就是根據(jù)我的學(xué)習(xí)和了解,簡單地介紹如何分析YUV數(shù)據(jù)流。


         YUV,分為三個分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的則是色度(Chrominance或Chroma),作用是描述影像色彩及飽和度,用于指定像素的顏色。


        與我們熟知的RGB類似,YUV也是一種顏色編碼方法,主要用于電視系統(tǒng)以及模擬視頻領(lǐng)域,它將亮度信息(Y)與色彩信息(UV)分離,沒有UV信息一樣可以顯示完整的圖像,只不過是黑白的,這樣的設(shè)計(jì)很好地解決了彩色電視機(jī)與黑白電視的兼容問題。并且,YUV不像RGB那樣要求三個獨(dú)立的視頻信號同時傳輸,所以用YUV方式傳送占用極少的頻寬。


        好了,言歸正傳,談?wù)勅绾畏治鯵UV碼流吧。YUV碼流有多種不同的格式,要分析YUV碼流,就必須搞清楚你面對的到底是哪一種格式,并且必須搞清楚這種格式的YUV采樣和分布情況。下面我將介紹幾種常用的YUV碼流格式,供大家參考。


        YUV碼流的存儲格式其實(shí)與其采樣的方式密切相關(guān),主流的采樣方式有三種,YUV4:4:4,YUV4:2:2,YUV4:2:0,關(guān)于其詳細(xì)原理,可以通過網(wǎng)上其它文章了解,這里我想強(qiáng)調(diào)的是如何根據(jù)其采樣格式來從碼流中還原每個像素點(diǎn)的YUV值,因?yàn)橹挥姓_地還原了每個像素點(diǎn)的YUV值,才能通過YUV與RGB的轉(zhuǎn)換公式提取出每個像素點(diǎn)的RGB值,然后顯示出來。


1.1 YUV格式

為了方便后面敘述,圖片的大小定 義為:w * h,寬高分別為w和h


YUV420格式


先Y,后V,中間是U。其中的Y是w * h,U和V是w/2 * (h/2)

如果w = 4,h = 2,則:

yyyy

yyyy

uu

vv

內(nèi)存則是:yyyyyyyyuuvv

需要占用的內(nèi)存:w * h * 3 / 2

采樣規(guī)律是:每個像素點(diǎn)都采樣Y,寄數(shù)行采樣1/2個U,不采樣V,偶數(shù)行采樣1/2個V,不采樣U


YUV422格式

本格式使用較為廣泛

每兩個點(diǎn)為一組,共占用4個字節(jié)

YUYVYUYV…

對于每一組YUYV,前面一個Y和本組中的UV組成第一個點(diǎn),第二個Y和本組中的UV組成第二個點(diǎn)

所以,在內(nèi)存中,寬高分別為w * 2、h。

如果w = 4,h = 2,則:

YUYVYUYV

YUYVYUYV

需要占用的內(nèi)存:w * h * 2


UYUY422格式

本格式和YUYV422一樣,只是YUV的位置不一樣罷了

每組中YUV的排列順序?yàn)椋篣YUV

需要占用的內(nèi)存:w * h * 2


YUV的采樣格式及每種格式中單像素所占內(nèi) 存大小

YUV主要的采樣格式有YCbCr 4:2:0、YCbCr 4:2:2、YCbCr 4:1:1和 YCbCr 4:4:4。

 

 采樣格式       單像素所占內(nèi)存大小        存放的碼流

 

 YCbCr 4:4:4    3byte       Y0 U0 V0 Y1 U1 V1 Y2 U2 V2 Y3 U3 V3(4像素為例)

 

 YCbCr 4:2:2    2byte              Y0 U0 Y1 V1 Y2 U2 Y3 V3(4像素為例)

 

 YCbCr 4:2:0    1.5byte     Y0 U0 Y1 Y2 U2 Y3 Y5 V5 Y6 Y7 V7 Y8(8像素為例)

 

 YCbCr 4:1:1    1.5byte              Y0 U0 Y1 Y2 V2 Y3(4像素為例)

 

1.2  存儲方式

下面我用圖的形式給出常見的YUV碼流的存儲方式,并在存儲方式后面附有取樣每個像素點(diǎn)的YUV數(shù)據(jù)的方法,其中,Cb、Cr的含義等同于U、V。

(1) YUVY 格式 (屬于YUV422)

  

YUYV為YUV422采樣的存儲格式中的一種,相鄰的兩個Y共用其相鄰的兩個Cb、Cr,分析,對于像素點(diǎn)Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00,其他的像素點(diǎn)的YUV取值依次類推。

(2) UYVY 格式 (屬于YUV422)

 

UYVY格式也是YUV422采樣的存儲格式中的一種,只不過與YUYV不同的是UV的排列順序不一樣而已,還原其每個像素點(diǎn)的YUV值的方法與上面一樣。


(3) YUV422P(屬于YUV422)

YUV422P也屬于YUV422的一種,它是一種Plane模式,即打包模式,并不是將YUV數(shù)據(jù)交錯存儲,而是先存放所有的Y分量,然后存儲所有的U(Cb)分量,最后存儲所有的V(Cr)分量,如上圖所示。其每一個像素點(diǎn)的YUV值提取方法也是遵循YUV422格式的最基本提取方法,即兩個Y共用一個UV。比如,對于像素點(diǎn)Y'00、Y'01 而言,其Cb、Cr的值均為 Cb00、Cr00。

 

二、移植x264

首先下載對應(yīng)的源文件http://ftp.videolan.org/pub/videolan/x264/snapshots/

我選擇了x264-snapshot-20181021-2245-stable.tar.bz2


tar jxvf x264-snapshot-20181021-2245-stable.tar.bz


./configure --host=arm-linux --prefix=/opt/wecam/ffmpeg --enable-shared --disable-asm


host:是要使用的平臺

prefix:是make install的目錄

enable-shared:是使能動態(tài)鏈接庫

disable-asm:是關(guān)閉匯編命令


然后需要修改config.mak文件

然后運(yùn)行指令:


make

make install


然后在/opt/wecam/ffmpeg目錄下就有了對應(yīng)的文件:

然后把libx264.so.155和pkgconfig目錄放到4412開發(fā)板的/lib目錄,再用指令創(chuàng)建軟鏈接


ln -s libx264.so.155 libx264.so


而頭文件x264.h是編譯程序時需要使用的頭文件


三、使用庫編寫YUV422轉(zhuǎn)x264應(yīng)用

#include

#include


#include "stdint.h"


#include "include/x264.h"


int main(int argc, char *argv[])

{

    int ret;

    int y_size;

    int i, j;


    if(argc != 3) {

        printf("usage: %s [source file] [dest file] n", argv[0]);

        return -1;

    }


    //source file

    FILE *fp_src = fopen(argv[1], "rb");

    FILE *fp_dst = fopen(argv[2], "wb");


    //Encode 0 frame

    int frame_num = 50;

    int csp = X264_CSP_I422;                //YUYV

    int width=640,height=480;               //640*480


    int iNal = 0;

    x264_nal_t *pNals = NULL;

    x264_t *pHandle = NULL;

    x264_picture_t *pPic_in = (x264_picture_t *)malloc(sizeof(x264_picture_t));

    x264_picture_t *pPic_out = (x264_picture_t *)malloc(sizeof(x264_picture_t));

    x264_param_t *pParam = (x264_param_t *)malloc(sizeof(x264_param_t));


    if(fp_src == NULL || fp_dst == NULL) {

        printf("Error open files.n");

        return -1;

    }


    x264_param_default(pParam);

    pParam->i_width = width;

    pParam->i_height = height;

    pParam->i_csp = csp;

    x264_param_apply_profile(pParam, x264_profile_names[4]);

    pHandle = x264_encoder_open(pParam);


    x264_picture_init(pPic_out);

    x264_picture_alloc(pPic_in, csp, pParam->i_width, pParam->i_height);

    y_size = pParam->i_width * pParam->i_height;

    printf("w:%d h:%drn",pParam->i_width,pParam->i_height);


    //detect frame number

    if(frame_num == 0) {

        fseek(fp_src, 0, SEEK_END);

        switch(csp) {

            case X264_CSP_I444:

                frame_num = ftell(fp_src)/(y_size*3);

                break;

            case X264_CSP_I420:

                frame_num = ftell(fp_src)/(y_size*3/2);

                break;

            case X264_CSP_I422:

                frame_num = ftell(fp_src)/(y_size*2);

                break;

            default:

                printf("Colorspace Not Support.n");

                return -1;

        }

        fseek(fp_src, 0, SEEK_SET);

    }


    printf("frame_num:%d y_size:%drn",frame_num,y_size);

    //Loop to Encode

    for(i=0;i        switch(csp) {

        case X264_CSP_I444:

            fread(pPic_in->img.plane[0], y_size, 1, fp_src);

            fread(pPic_in->img.plane[1], y_size, 1, fp_src);

            fread(pPic_in->img.plane[2], y_size, 1, fp_src);

            break;

        case X264_CSP_I420:

            fread(pPic_in->img.plane[0], y_size, 1, fp_src);

            fread(pPic_in->img.plane[1], y_size/4, 1, fp_src);

            fread(pPic_in->img.plane[2], y_size/4, 1, fp_src);

            break;

        case X264_CSP_I422:

            {

                int index = 0;

                int y_i = 0, u_i = 0, v_i = 0;

                for(index = 0; index < y_size*2; ) {

                    fread(&pPic_in->img.plane[0][y_i++], 1, 1, fp_src);         //Y

                    index++;

                    fread(&pPic_in->img.plane[1][u_i++], 1, 1, fp_src);         //U

                    index++;

                    fread(&pPic_in->img.plane[0][y_i++], 1, 1, fp_src);         //Y

                    index++;

                    fread(&pPic_in->img.plane[2][v_i++], 1, 1, fp_src);         //V

                    index++;

                }

                break;

            }

        default:

            printf("Colorspace Not Support.n");

            return -1;

        }


        pPic_in->i_pts = i;

        ret = x264_encoder_encode(pHandle, &pNals, &iNal, pPic_in, pPic_out);

        if(ret < 0) {

            printf("Error.n");

            return -1;

        }


        printf("Succeed encode frame: %5dn", i);


        for(j=0;j            fwrite(pNals[j].p_payload, 1, pNals[j].i_payload, fp_dst);

        }    

    }


    //flush encoder

    while(1) {

        ret = x264_encoder_encode(pHandle, &pNals, &iNal, NULL, pPic_out);

        if(ret == 0)

            break;

        printf("Flush 1 frame.n");

        for(j=0;j            fwrite(pNals[j].p_payload, 1, pNals[j].i_payload, fp_dst);

    }

    x264_picture_clean(pPic_in);

    x264_encoder_close(pHandle);

[1] [2]
引用地址:4412 移植x264并且YUV422轉(zhuǎn)x264

上一篇:嵌入式ARM開發(fā)板學(xué)習(xí)方法步驟
下一篇:4412 使用usb攝像頭拍照YUYV格式

推薦閱讀

? ? ? ? 在去年十一月的時候,就有消息傳出蘋果要推出一種成本更加低廉的解決方案,替換掉2018款iPhone的TrueDepth相機(jī)。TrueDepth相機(jī)能夠使用的30000個激光點(diǎn)來映射面部ID,而新的解決方案雖然更容易批量生產(chǎn)并且更便宜,但是解鎖時間會變得更長。iPhone XS和iPhone XS Max  現(xiàn)在,這一技術(shù)可能已經(jīng)成熟,引援彭博社消息,蘋果對索尼在去年...
近日,在東京國際展覽中心舉辦了世界最大規(guī)模的機(jī)器人展覽會“2019國際機(jī)器人展(iREX2019)”。 在Twitr上成為熱議話題的“自動蓋章機(jī)器人”引起了人們極大的關(guān)注,除此之外還有值得關(guān)注的多種多樣的機(jī)器人展示。 這次特別常見的是以與人協(xié)作為目的的協(xié)作機(jī)器人。就是在工廠與人并排作業(yè)的機(jī)器人。 據(jù)悉,協(xié)作機(jī)器人已經(jīng)得到了應(yīng)用,展會上也展示了...
  接近開關(guān)怎么判斷好壞  按說明書接好電源,用匹配的感應(yīng)源長距離接近開關(guān),在用萬用表電壓檔檢測out線和vcc線是否有信號輸出或者信號是否有變化,因?yàn)榻咏_關(guān)分pnp和npn型,所以信號輸出不同。 三根線,兩根電源一根信號輸出,有的是高有效輸出,有的是低有效輸出,有信號和無信號輸出時用萬用表量一量輸出端電壓有無差別。  接近開關(guān)判斷好壞最...
一、內(nèi)核設(shè)置Linux內(nèi)核中已經(jīng)帶有很完善的USB攝像頭驅(qū)動,支持幾乎所有的USB攝像頭,我們只需要配置內(nèi)核,選擇上相應(yīng)的Sensor型號即可。配置內(nèi)核,支持USB攝像頭: Device Drivers ---> <*> Multimedia support ---> <*> Video For Linux [*] Enable Video For Linux API 1 (DEPRECATED...

史海拾趣

問答坊 | AI 解惑

關(guān)于嵌入式系統(tǒng)發(fā)展方向

嵌入式系統(tǒng)無疑是當(dāng)前最熱門最有發(fā)展前途的IT應(yīng)用領(lǐng)域之一。嵌入式系統(tǒng)用在一些特定專用設(shè)備上,通常這些設(shè)備的硬件資源(如處理器、存儲器等)非常有限,并且對成本很敏感,有時對實(shí)時響應(yīng)要求很高等。特別是隨著消費(fèi)家電的智能化,嵌入式更顯重要。 ...…

查看全部問答∨

EasyARM2131開發(fā)板原理圖

本帖最后由 paulhyde 于 2014-9-15 09:34 編輯 EasyARM2131開發(fā)板原理圖  …

查看全部問答∨

ACPI電源管理模式——掃盲詳解

ACPI電源管理模式——掃盲詳解1、        ACPI的概念 ACPI: Advanced Configuration and Power Interface 2、        ACPI有以下幾種模式:? S0 正常。 S1 CPU停止工作。 S2 CPU ...…

查看全部問答∨

多線程串口采集,cpu占用過高

現(xiàn)在做串口采集,用多線程,出現(xiàn)了個問題cpu占用率有點(diǎn)太高了,在我一個雙核的機(jī)器上占30%,到了一低配的賽揚(yáng)單核上占50%多,簡直沒法用了; 簡單介紹:我現(xiàn)在是每一個串口連接著同一種類型的設(shè)備,每個設(shè)備連接的采集點(diǎn)的相關(guān)數(shù)據(jù)、參數(shù)都保存在 ...…

查看全部問答∨

最便宜的PXA310開發(fā)板才1800?

北京盟石科技的PXA310開發(fā)板目前已經(jīng)價格調(diào)整到最低1800的程度,也許您可以作為對比看看。不過,下面的幾點(diǎn)可能對你很重要:1. 盟石科技是國內(nèi)第一家推出PXA310開發(fā)板的公司。 2. 盟石科技是在PXA310開發(fā)板上能提供最多的系統(tǒng)的公司。(WindowsCE6 ...…

查看全部問答∨

請問一下用于追蹤日光要用哪種元件好?

如題,小弟準(zhǔn)備做一個與追蹤日光有關(guān)的作品,不知要選擇光電池還是光敏電阻,抑或光電二(三)極管,請各位知道的不吝賜教,跟我說一下他們之間的主要用途以及區(qū)別、價格等,詳細(xì)一點(diǎn),不過聲明一下不要抄網(wǎng)上的!感激不盡?。?!…

查看全部問答∨

緊急求助,PXA270 COre電壓問題

我們的板子目前上的CPU是pxa270 312Mhz的,理論上Core電壓所需是1.25V,但是由于采購疏忽,PMIC的默認(rèn)core電壓是1.4V,硬件此次沒有連出PMIC的I2C引腳,所以無法更改core電壓,請問在312M的CPU上用1.4V的Core電壓會不會有問題呢? 目前板子偶爾可 ...…

查看全部問答∨

編譯又有錯誤了,請教怎么改啊?

我直接按步驟建立的 OS ,沒做修改直接編譯,出錯,錯誤還真多,高手幫幫忙??纯词鞘裁村e誤,幫我改改。 BUILD: [00:0000000524:PROGC ] Building COMPILE Pass in C:\\WINCE600\\PLATFORM\\SMDK2440A\\Src\\Drivers\\Touch\\ directory. BUILD: ...…

查看全部問答∨

LM2678瞬間帶不了3A電流

LM2678輸入為28.6V,輸出電阻為1K和20K+1K電位器。電壓范圍為25.5-26.5V的   電感38uH,0.8平方的漆包線繞的,輸出電容為50V,220uf   其他均按照LM2678手冊設(shè)計(jì)~   電路圖在單位,不能詳說,明天上圖,先簡要說下   ...…

查看全部問答∨

FM3之順序漸進(jìn)筆記PDF

發(fā)個FM3之順序漸進(jìn)筆記PDF,見笑了。 …

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved