1. 程式人生 > >YUV422轉BGR888(海思3516平臺)

YUV422轉BGR888(海思3516平臺)

#include "hi_comm_ive.h"
#include "mpi_ive.h"

#pragma pack(1)

typedef struct{
    short type;
    int size;
    short reserved1;
    short reserved2;
    int offset;
} BMPHeader;

typedef struct{
    int size;
    int width;
    int height;
    short planes;
    short bitsPerPixel;
    unsigned compression;
    unsigned imageSize;
    int xPelsPerMeter;
    int yPelsPerMeter;
    int clrUsed;
    int clrImportant;
} BMPInfoHeader;

#pragma pack()


int saveBMPFile(unsigned char* src, int width, int height, const char* name){
	BMPHeader hdr;
	BMPInfoHeader infoHdr;
    int ret = 0;

	FILE* fp = NULL;
    if(NULL == src) 
    {
		return (-1);
    }

    fp = fopen(name,"wb");
	if(NULL == fp)
    {
		printf("saveBMPFile: Err: Open!\n");
		return (-1);
	}

	infoHdr.size	= sizeof(BMPInfoHeader);
	infoHdr.width	= width;
	infoHdr.height	= 0 - height;
	infoHdr.planes	= 1;
	infoHdr.bitsPerPixel	= 24;
	infoHdr.compression		= 0;
	infoHdr.imageSize		= width*height;
	infoHdr.xPelsPerMeter	= 0;
	infoHdr.yPelsPerMeter	= 0;
	infoHdr.clrUsed			= 0;
	infoHdr.clrImportant	= 0;

	hdr.type	= 0x4D42;
	hdr.size	= 54 + infoHdr.imageSize*3;
	hdr.reserved1	= 0;
	hdr.reserved2	= 0;
	hdr.offset	= 54;


    //BGR2RGB
    int i;
    int temp;
    for(i = 0;i < width*height;i++)
    {
        temp = src[i*3];
        src[i*3] = src[i*3 + 2];
        src[i*3 + 2] = temp;
    }

	fwrite(&hdr, sizeof(hdr), 1, fp);
  	fwrite(&infoHdr, sizeof(infoHdr), 1, fp);
 	fwrite(src, sizeof(unsigned char), width*height*3, fp); //TODO:
    fflush(fp);

	if(ferror(fp)){
		printf("saveBMPFile: Err: Unknown!***\n");
	}

	fclose(fp);
    fp = NULL;

	return 0;
}

int main()
{
    HI_VOID *pVirtSrc = NULL;
	HI_VOID *pVirtDst = NULL;
	IVE_SRC_INFO_S stSrc;
	IVE_MEM_INFO_S stDst;
    unsigned int * pImage = NULL;

    stSrc.enSrcFmt = IVE_SRC_FMT_SP422;
    stSrc.stSrcMem.u32Stride = nWidth;
    stSrc.stSrcMem.u32PhyAddr = frameInfo->phyAddr;
    stSrc.u32Width = nWidth;
    stSrc.u32Height = nHeight;

    stDst.u32Stride = nWidth;

    IVE_HANDLE IveHandle;
    HI_BOOL bInstant = HI_TRUE;
    IVE_CSC_CTRL_S stCscCtrl;
    stCscCtrl.enOutFmt = IVE_CSC_OUT_FMT_PACKAGE;
    stCscCtrl.enCscMode = IVE_CSC_MODE_VIDEO_BT601_AND_BT656;

    //s32Ret = HI_MPI_SYS_MmzAlloc_Cached (&pstSrc->stSrcMem.u32PhyAddr,&pVirtSrc,"User", HI_NULL, pstSrc->u32Height * pstSrc->stSrcMem.u32Stride*2);
    //memset(pVirtSrc,1,pstSrc->u32Height * pstSrc->stSrcMem.u32Stride);
    ret = HI_MPI_SYS_MmzAlloc_Cached (&stDst.u32PhyAddr, &pVirtDst,"User", HI_NULL, stSrc.u32Height * stDst.u32Stride);
    //s32Ret = HI_MPI_IVE_DMA(&IveHandle, &stSrc, &stDst, bInstant);
    //HI_MPI_SYS_MmzFree(stSrc.stSrcMem.u32PhyAddr, pVirtSrc);
    HI_MPI_SYS_MmzFree(stDst.u32PhyAddr, pVirtDst);
    ret=HI_MPI_IVE_CSC(&IveHandle,&stSrc,&stDst,&stCscCtrl,bInstant);
    if(ret==HI_FAILURE)
    {
        printf("YUV Convert to RGB failed!\n");
        return HI_FAILURE;
    }

    pImage = HI_MPI_SYS_Mmap(stDst.u32PhyAddr, nLengthImage/2*3);
    if(NULL == pImage)
    {
        msg_print( "HI_MPI_SYS_Mmap err!\n");
        return NVD_FALSE;
    }

    ret = saveBMPFile((Byte*)pImage, nWidth, nHeight, "/mnt/rgb.dib");
    if(0 != ret)
    {
        printf( "saveBMPFile error\n");
        return;
    }
    printf("saveBMPFile done!\n");

    //uninit();
}

相關推薦

YUV422BGR8883516平臺

#include "hi_comm_ive.h" #include "mpi_ive.h" #pragma pack(1) typedef struct{ short type; int size; short reserved1; sh

arm平臺AAC音訊碼cpu佔用高、效率低的問題解決

問題背景 目前市面上的大部分IPC攝像機音訊輸出基本都是G711、G726編碼格式,而在類似於《基於EasyNVR實現RTSP/Onvif監控攝像頭Web無外掛化直播監控》這種業務中,都是在類似於EasyNVR這樣的適配服務中進行音訊的轉碼,也有在類似於《Ea

HI35xx平臺串列埠配置方法

前言 序列介面簡稱串列埠(通常指COM介面),是採用序列通訊方式的擴充套件介面,其特點是通訊線路簡單,只要一對傳輸線就可以實現雙向通訊,從而大大降低了成本,但傳送速度一般,資料傳輸率為115kbps~230kbps。非同步序列是指UART(Universal Asynchr

HI35xx平臺軟體開發快速入門之背景知識

前言:  安防領域最近幾年可謂暗流湧動,作為安防業的雙寡頭,大華股份與海康威視憑藉行業的東風,兩家公司的成長速度異常強勁,在國際市場上已經和應用廠家進行廝殺。 2015年兩家公司雙雙晉升“全球安放50強”,海康排名第二,大華排名第五。以華為海思為代表國產晶片解決方案不斷走強,

Android上HDMI介紹基於高通平臺

Android上HDMI介紹(基於高通平臺) 高清晰度多媒體介面(英文:High Definition Multimedia Interface,HDMI)是一種數字化視訊/音訊介面技術,是適合影像傳輸的專用型數字化介面,其可同時傳送音訊和影音訊號,最高資料傳輸速度為

HI35xx平臺軟體開發快速入門之交叉編譯鏈安裝

前言  海思平臺的軟體開發模式一般是宿主機編譯,目標板除錯的方式,故而我們需要在宿主機上安裝海思平臺的交叉編譯工具進行交叉編譯,最後利用交叉編譯工具編譯出來的可執行程式拷貝到目標板執行。交叉編譯鏈安裝  交叉編譯鏈安裝比較簡單,這裡以arm-hisiv200-linux交叉編

nginx證書制作以及配置https並設置訪問http自動跳https反向代理轉發jboss

app ast mime with cati permanent bsp location admin nginx證書制作以及配置https並設置訪問http自動跳轉https 默認情況下ssl模塊並未被安裝,如果要使用該模塊則需要在編譯時指定–with

遊戲錄屏直播的圖文教程基於雲直播平臺

andro com src 就會 tar 相關 很好 窗口 eight 原創教程 ( 轉載請註明出處 ) 2017-6-26,今天來做一下是電腦遊戲桌面錄屏直播的教程,就是把桌面的遊戲直播出去,加上話筒做講解。最終實現在電腦、手機、微信中都可以觀看到遊戲的直播和講解畫面。

Json.net實現方便的JsonC#dynamic動態類型對象

bar 方便 api lba c# oid tool 可能 情況 以前需要將一段json字符串轉換為C#對象時,一般都是定義一個與之對應的實體類來接收。這樣做有一個很大的缺點,就是當字符串特別長,屬性特別多,又有嵌套時,手敲這個實體類就非常痛苦。 比如之前做的一個接收百度七

GitHub開源:升訊威微信營銷系統第三方微信平臺完整源代碼

粉絲 做事 truct 全部 在家 是我 容易 情況 使用場景 GitHub:https://github.com/iccb1013/Sheng.WeixinConstruction升訊威微信營銷系統開發實踐系列升訊威微信營銷系統開發實踐:(1)功能設計與架構設計升訊威微信

簡單的安卓點擊按鈕跳示例整蠱扣費

ref nat cow userinfo dsv href 盜鏈 ocs 跳轉 v2勘7灸1沒疤9得Lhttp://www.docin.com/qkvl6227 Ei053K衛3GWM強蔥Ihttp://weibo.com/p/1005056373158586 塵拍

hdu 2018母牛問題2019數列有序!2020絕對值排序 2021發工資2022選女主角

amp pre == 數組 sca int 如果 fab main 要發現它的規律,題n年牛的總數等於n-1年的母牛數加上第n年新增的母牛數,第n年只有n-3年的那些母牛才能產母牛,所以第n年的母牛數等於第n-1和n-3年的母牛數的和,即sum(n)=sum(n-1)+su

微信營銷系統第三方微信平臺github 開源

進行 收集 可用 會員卡 數據 例如 關註 body 技術分享 升訊威微信營銷系統(微信第三方平臺) 在線體驗:http://wxcm.eeipo.cn/開源地址:https://github.com/iccb1013/Sheng.WeixinConstruction說明

記一次telnet自定義端口不通阿裏雲平臺

定義 清空 ado 服務器 反饋 cto 咨詢 color sta 防火墻關閉 設置自定義端口6000,netstat -an|grep 6000服務存在 服務器本地:#telnet ip 6000正常 外網:telnet 外網ip 6000無法訪問 排查過程: 阿裏雲平

[LeetCode]13. 羅馬數字整數Roman numeral to integer Java

一、題目: LeetCode地址 羅馬數字包含以下七種字元:I, V, X, L,C,D 和 M。 字元 數值 I 1 V 5 X 10 L

hadoop面試題整理哥每日默寫

2018.11.26 1、HDFS讀寫流程 (1)寫資料流程 1).客戶端發出請求 hdfs dfs -put /etc/profile /qf/data 2).namenode檢視維護的目錄結構,檢查/qf/data是否存在,如不存在直接報錯”no such file or directo

Linux4.9.9核心SD卡移植適配fs4412平臺

本文適配fs4412開發板,使用的核心為linux4.9.9。 1.修改裝置樹 vi arch/arm/boot/dts/exynos4412-liebao.dts 修改: &sdhci_2 { bus-width = <4>;

移植最新的linux4.9.9核心適配fs4412平臺

移植最新的linux4.9核心適配fs4412(samsung exynos4412平臺驗證通過) 1.原始碼下載 官網下載最新的linux4.9.9核心: http://www.kernel.org/pub/linux/kernel/ 第三個數字是修訂版本號 2.解

無限刷話費需接碼平臺

  教程很簡單。但是不要刷的太過分份了神話接碼註冊地址http://115.28.184.182:8000/ (請自行註冊後,充值金額)北京時間APP下載地址:https://app.btime.com (下載到電腦上)首先第一部,自己手機安裝北京時間APP,,,使用手機登入。&

java 檔案gb2315,gbk,utf-8csv,excel

最近做資料處理,需要將爬取的資料入庫,但是演算法提供的資料編碼格式和資料庫總是有出入,導致匯入的資料亂碼,所以寫一個轉碼程式,將檔案編碼轉為和資料庫一致。 package com.bjk.transcode; import java.io.FileInputStream; import j