/*********************************************************************

* By                       :     Lile

* Last Modified   :     2015年3月3日星期二  08:46:13

* Email                 :     roger0212@163.com

* HomePage      :      http://blog.csdn.net/lile777

* CopyRight        :      该文章版权由Lile所有。可在非商业目的下任意传播和复制。

*                                   对于商业目的下对本文的任何行为需经作者同意。

*********************************************************************/

1、  YUV420  YUV422  YUV444

4:2:2乃是指數位影像資料的格式,一般而言數位影像以色差端子來說,

            分成三個component,即Y,Cb,Cr(或叫Y,U,V),但是由於人類視覺系統只對亮度反應較敏銳,為了減少資料頻寬(因為傳輸媒介(如網路或電波)的頻寬是有限的),U,V的部分就會用偷工減料的方式來因應.常見格式有YUV420,YUV422,YUV444三種格式.

            其中YUV444是完全未刪減最逼真的格式,即每4個Y,配4個U,4個V

            YUV422則是在UV上減半之格式,即每4個Y,配2個U,2個V

            YUV420則是在UV上減1/4之格式,即每4個Y,配1個U,1個V

            當然啦YUV420在這三者間顏色的表現較不細緻,不過由於人類不易察覺,這個格式廣為DVD所應用.

出处:http://203.208.39.132/search?q=cache:doj0KBXwSv4J:blog.csdn.net/arau_sh/archive/2008/10/13/3068824.aspx+YUV420+YUV422&cd=1&hl=zh-CN&ct=clnk&gl=cn&st_usg=ALhdy29TkqWKJtUWWRqZcNQy27Ni2XXrog

2、hiH264_DEC_ATTR_S 结构体

/* 解码器属性数据结构 */

typedef struct hiH264_DEC_ATTR_S

{

HI_U32 uPictureFormat; /* 解码器输出图像格式 */

/* 0x00: 目前解码库只支持YUV420图像格式 */

HI_U32 uStreamInType; /* 输入码流格式 */

/* 0x00: 目前解码库只支持以“00 00 01”为 nalu分割符的流式H.264码流 */

HI_U32 uPicWidthInMB; /* 图像宽度(以宏块为单位) */

HI_U32 uPicHeightInMB; /* 图像高度(以宏块为单位) */

HI_U32 uBufNum;            /* 参考帧数目 */

HI_U32 uWorkMode;   /* 解码器工作模式 */

Bit31 ~Bit3

Bit2

Bit1

Bit0

保留

00: 仅解码图像

10: 保留

01: 解码Hi351x数字水印

11: 保留

0: 快速输出模式;

1: 正常输出模式

H264_USERDATA_S *pUserData; /* 用户私有数据 */

HI_U32 uReserved; /* 保留字 */

} H264_DEC_ATTR_S;

3、hiH264_DEC_FRAME_S 解码输出图像结构体

/* 解码器输出图像信息数据结构 */

typedef struct hiH264_DEC_FRAME_S

{

HI_U8 *pY; /* Y分量地址 */

HI_U8 *pU; /* U分量地址 */

HI_U8 *pV; /* V分量地址 */

HI_U32 uWidth; /* 图像宽度(以像素为单位) */

HI_U32 uHeight; /* 图像高度(以像素为单位) */

HI_U32 uYStride; /* 输出Y分量的stride (以像素为单位) */

HI_U32 uUVStride; /* 输出U/V分量stride (以像素为单位) */

HI_U32 uCroppingLeftOffset; /* 图像裁减信息:左边界裁减像素数 */

HI_U32 uCroppingRightOffset; /* 图像裁减信息:右边界裁减像素数 */

HI_U32 uCroppingTopOffset; /* 图像裁减信息:上边界裁减像素数 */

HI_U32 uCroppingBottomOffset; /* 图像裁减信息:下边界裁减像素数 */

HI_U32 uDpbIdx; /* 输出图像在dpb中的序号 */

HI_U32 tPicFlag; /* 图像类型:0:帧; 1:顶场; 2:底场 */

HI_U32 bError; /* 图像是否有错:0:正确;1:图像有错 */

HI_U32 bIntra; /* 图像是否为IDR帧:0:非IDR帧;1:IDR帧 */

HI_U64 ullPTS; /* 时间戳 */

HI_U32 uPictureID; /* 图像序号 */

HI_U32 uReserved; /* 保留字 */

H264_USERDATA_S *pUserData; /* 指向用户私有数据 */

} H264_DEC_FRAME_S;

4、hiH264_LIBINFO_S

/* 解码库版本、版权和能力集信息数据结构 */

typedef struct hiH264_LIBINFO_S

{

HI_U32 uMajor; /* 主编号 */

HI_U32 uMinor; /* 次编号 */

HI_U32 uRelease; /* 发布编号 */

HI_U32 uBuild; /* 建构编号 */

const HI_CHAR*sVersion; /* 版本信息 */

const HI_CHAR*sCopyRight; /* 版权信息 */

HI_U32 uFunctionSet;/* 解码库能力集 */

HI_U32uPictureFormat;/* 支持的输出图像格式*/

/* 0x00:当前仅支持YUV420图像格式 */

HI_U32uStreamInType; /* 输入码流格式*/

/* 0x00:当前仅支持以“00 00 01”为nalu分割符的流式H.264码流 */

HI_U32 uPicWidth; /*最大图像宽度(以像素为单位) */

HI_U32 uPicHeight;/* 最大图像高度(以像素为单位) */

HI_U32 uBufNum; /* 最大参考帧数目 */

HI_U32 uReserved; /*保留字 */

} H264_LIBINFO_S;

5、HI_HDL HI_DLLEXPORT Hi264DecCreate( H264_DEC_ATTR_S *pDecAttr );

/*

创建解码器句柄。在解码开始时,分配解码空间和初始化解码器相关的变量及状态,

设置解码器输入码流类型、输出图像格式、解码器支持的最大图像的宽高、解码器支

持的最大参考帧数目等解码器属性。

上层应用可以使用多线程创建多个解码器,实现多路解码。

创建成功后, 返回值为  创建解码器的句柄

*/

/*create a decoder*/

    handle = Hi264DecCreate(&dec_attrbute);

6、 QueryPerformanceFrequency()

类型:Win32API

原型:BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

作用:返回硬件支持的高精度计数器的频率。

返回值:非零,硬件支持高精度计数器;

零,硬件不支持,读取失败。

QueryPerformanceFrequency()  

供WIN9X使用的高精度定时器:QueryPerformanceFrequency()和QueryPerformanceCounter(),要求计算机从硬件上支持高精度定时器。

函数的原形是:

  BOOL QueryPerformanceFrequency(LARGE_INTEGER *lpFrequency);

  BOOL QueryPerformanceCounter (LARGE_INTEGER *lpCount);

数据类型LARGEINTEGER既可以是一个作为8字节长的整数,也可以是作为两个4字节长的整数的联合结构,其具体用法根据编译器是否支持64位而定。该类型的定义如下:

  typeef union _ LARGE_INTEGER

  {

   struct

   {

   DWORD LowPart;

   LONG HighPart;

   };

   LONGLONG QuadPart;

  } LARGE_INTEGER;

在定时前应该

先调用QueryPerformanceFrequency()函数获得机器内部计时器的时钟频率。

接着在需要严格计时的事件发生前和发生之后分别调用QueryPerformanceCounter(),利用两次获得的计数之差和时钟频率,就可以计算出事件经历的精确时间。

测试函数SLEEP(100)的精确持续时间方法:

  LARGE_INTEGER litmp;

  LONGLONG qt1,qt2;

  double dft,dff,dfm;

  QueryPerformanceFrequency(&litmp);//获得时钟频率

  dff=(double)litmp.QuadPart;

  QueryPerformanceCounter(&litmp);//获得初始值

  qt1=litmp.QuadPart;Sleep(100);

  QueryPerformanceCounter(&litmp);//获得终止值

  qt2=litmp.QuadPart;

  dfm=(double)(qt2-qt1);

  dft=dfm/dff;//获得对应的时间值

需要注意的是DFT计算的结果单位是秒。

7、Hi264DecFrame(handle, buf,  len, 0, &dec_frame,  flags); 

/// 对输入的一段码流进行解码并按帧输出图像;

/// 本函数仅支持流式解码,对于以“00 00 01”为nalu 分隔符的连续、线性H.264 码流,

/// 用户可从任意起始地址、任意长度配置给解码器解码。

HI_S32 HI_DLLEXPORT Hi264DecFrame(

    HI_HDL  hDec,

    HI_U8*  pStream,

    HI_U32  iStreamLen,

    HI_U64  ullPTS,

    H264_DEC_FRAME_S *pDecFrame,   // 输出图片 格式

    HI_U32  uFlags );

返回值

宏定义

含义

0

HI_H264DEC_OK

函数执行成功,有一帧图像输出。

-1

HI_H264DEC_NEED_MORE_BITS

剩余码流不够解码一帧的数据,需要重新配置更多的码流。uFlags为0时才会返回此值。

-2

HI_H264DEC_NO_PICTURE

解码器内部残留的图像已经全部输出完毕。uFlags为1时才会返回此值。

-3

HI_H264DEC_ERR_HANDLE

解码器句柄为空或输出图像结构体为空。

【注意】

在调用本函数过程中需要注意以下两点:

在解码过程中,用户应该将码流分段,并依次配置给解码器。当用户调用此函数,将一段码流配置给解码器之后,应对函数的参数做如下配置:

pStream=NULL;

iStreamLen=0;

uFlags=0;

然后循环调用此函数,直到函数返回HI_H264DEC_NEED_MORE_BITS 时才能再次配置一段新的码流。

在上述循环调用的过程中,如果函数返回 HI_H264DEC_OK 则表明有一帧图像输出,用户必须在循环调用内部及时处理存储在pDecFrame 中的图像。





在解码结束时,为了输出解码器内部可能的残留图像,用户可对函数的参数做如下配置:

uFlags=1;

pStream=NULL;

然后循环调用此函数,直到函数返回HI_H264DEC_NO_PICTURE 时才能停止解码。

在上述循环调用的过程中,如果函数返回 HI_H264DEC_OK 则表明有一帧图像输出,用户必须在循环调用内部及时处理存储在pDecFrame 中的图像。

解码函数提供时间戳透传功能,输入的时间戳将保存在当前码流解码后的图像结构体H264_DEC_FRAME_S 中,并随解码图像一起输出。

【待续】海思Hi3520A学习笔记的更多相关文章

  1. 第2季:从官方例程深度学习海思SDK及API

    2.1.官方mppsample的总体分析2.1.sample的整体架构(1)sample其实是很多个例程,所以有很多个main(2)每一个例程面向一个典型应用,common是通用性主体函数,我们只分析 ...

  2. 海思hi35xx 开发学习(3):视频输入

    视频输入(VI)模块实现的功能:通过 MIPI Rx(含 MIPI 接口.LVDS 接口和 HISPI 接口),SLVS-EC,BT.1120,BT.656,BT.601,DC 等接口接收视频数据.V ...

  3. Hi3516开发笔记(一):海思HI3516DV300芯片介绍,入手开发板以及Demo测试

    前言   目前主流国产芯片为RV11XX.RK33XX.Hi35XX系列,本系列开启Hi3516系列的开发教程.   Hi3516DV300芯片介绍   Hi3516DV300为专业行Smart IP ...

  4. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  5. libx264开发笔记(一):libx264介绍、海思平台移植编译

    前言   在编译ffmpeg时,使用到h264编码时是需要依赖libx264的,本文章是将将libx264作为静态库移植到海思上.   相关博客 <Qt开发笔记之编码x264码流并封装mp4(一 ...

  6. OpenCV开发笔记(七十四):OpenCV3.4.1+ffmpeg3.4.8交叉编译移植到海思平台Hi35xx平台

    前言   移植opencv到海思平台,opencv支持对视频进行解码,需要对应的ffmpeg支持.   Ffmpeg的移植   Ffmpeg的移植请参考之前的文章:<FFmpeg开发笔记(十): ...

  7. linux学习笔记---未完待续,缓慢更新

    做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...

  8. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

  9. SQLServer学习笔记系列6

    一.写在前面的话 时间是我们每个人都特别熟悉的,但是到底它是什么,用什么来衡量,可能很多人会愣在那里.时间可以见证一切,也可以消磨一切,那些过往的点点滴滴可思可忆.回想往年清明节过后,在家乡的晚上总能 ...

随机推荐

  1. LN : leetcode 3 Longest Substring Without Repeating Characters

    lc 3 Longest Substring Without Repeating Characters 3 Longest Substring Without Repeating Characters ...

  2. 2014中秋节,用java为QQ游戏美女找茬写辅助

    引子        今年中秋闲在家,总要找点事做.        前几天开始学python,很早之前就有计划拿下这门语言了,可惜一直拖到现在……不可否认,我也是个拖沓症患者.在学习python的过程中 ...

  3. 面试中的一些小问题之html5和html4的区别?

    HTML5建立的一些新规则: 新特性应该基于HTML.CSS.DOM.JavaScript: 减少对外部插件的需求,如flash将会用video标签和audio标签代替: 更加优秀的错误处理: 更多取 ...

  4. spark web ui

    spark UI 界面:http://www.cnblogs.com/xing901022/p/6445254.html 几个概念的解释:http://blog.csdn.net/jiangwlee/ ...

  5. java 物理分页和逻辑分页

    A.逻辑分页利用游标分页,好处是所有数据库都统一,坏处就是效率低.1.逻辑分页的第一种方式,利用ResultSet的滚动分页.这种分页方式依靠的是对结果集的算法来分页,因此通常被称为“逻辑分页”.步骤 ...

  6. HDU_1556_线段树区间更新

    Color the ball Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  7. CLISTCTRL 获取点击列

    CListCtrl中的HitTest.SubItemHitTest的用法 2HitTest:得到当前鼠标位置的Item 其实关键是要有ScreenToClient这个函数的使用,我先前没有用这个函数, ...

  8. JSON字符串的生成

    public class Corporation { public string remark { get; set; } public string version { get; set; } pu ...

  9. 08Java Server Pages 语法

    Java Server Pages 语法 基础语法 注释 <!--   -->可以在客户端通过源代码看到:<%--   --%>在客户端通过查看源代码看不到. <!--浏 ...

  10. ORACLE 查看当前用户信息(用户,表视图,索引,表空间,同义词,存储过程,约束条件)

    1.用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select ...