/******************************************************************************
* funciton : save H264 stream
******************************************************************************/
HI_S32 SAMPLE_COMM_VENC_SaveH264(FILE* fpH264File, VENC_STREAM_S *pstStream)
{
HI_S32 i; for (i = ; i < pstStream->u32PackCount; i++)
{
//swann add for test 20181115
#if ORTP_ENABLE
rtpSend(pRtpSession,pstStream->pstPack[i].pu8Addr, pstStream->pstPack[i].u32Len);
#else fwrite(pstStream->pstPack[i].pu8Addr+pstStream->pstPack[i].u32Offset,
pstStream->pstPack[i].u32Len-pstStream->pstPack[i].u32Offset, , fpH264File); fflush(fpH264File); #endif
} return HI_SUCCESS;
}

查C语言优先级表得知:-> [] . 处于同一优先级,因此从左到右解析;

1)pstStream->pstPack

typedef struct hiVENC_STREAM_S
{
VENC_PACK_S *pstPack; /*stream pack attribute*/
HI_U32 u32PackCount; /*the pack number of one frame stream*/
HI_U32 u32Seq; /*the list number of stream*/ union
{
VENC_STREAM_INFO_H264_S stH264Info; /*the stream info of h264*/
VENC_STREAM_INFO_JPEG_S stJpegInfo; /*the stream info of jpeg*/
VENC_STREAM_INFO_MPEG4_S stMpeg4Info; /*the stream info of mpeg4*/
VENC_STREAM_INFO_H265_S stH265Info; /*the stream info of h265*/
};
}VENC_STREAM_S;
2)pstStream->pstPack[i]的意义:
注意到前面有
            /*******************************************************
step 2.1 : query how many packs in one-frame stream.
*******************************************************/
memset(&stStream, , sizeof(stStream));
s32Ret = HI_MPI_VENC_Query(i, &stStat);//stStat,为了获取当前帧的编码好的码流包个数。 /*******************************************************
step 2.3 : malloc corresponding number of pack nodes.
*******************************************************/
stStream.pstPack = (VENC_PACK_S*)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks);
/*******************************************************
step 2.4 : call mpi to get one-frame stream
*******************************************************/
stStream.u32PackCount = stStat.u32CurPacks;
s32Ret = HI_MPI_VENC_GetStream(i, &stStream, HI_TRUE);
stStream.pstPack为一个指针,指向malloc申请的sizeof(VENC_PACK_S) * stStat.u32CurPacks大小的内存的首地址;
效果等同于创建了一个VENC_PACK_S结构体数组,数组有stStat.u32CurPacks个元素,每个数组元素为结构体VENC_PACK_S类型
typedef struct hiVENC_PACK_S
{
HI_U32 u32PhyAddr; /*the physics address of stream*/
HI_U8 *pu8Addr; /*the virtual address of stream*/
HI_U32 u32Len; /*the length of stream*/ HI_U64 u64PTS; /*PTS*/
HI_BOOL bFrameEnd; /*frame end*/ VENC_DATA_TYPE_U DataType; /*the type of stream*/
HI_U32 u32Offset; HI_U32 u32DataNum;
VENC_PACK_INFO_S stPackInfo[];
}VENC_PACK_S;
因此pstStream->pstPack[i]表示访问VENC_PACK_S结构体数组中的第i个元素

3)pstStream->pstPack[i].pu8Addr

访问结构体中的    HI_U8 *pu8Addr; /*the virtual address of stream*/

pstStream->pstPack[i].pu8Addr详解的更多相关文章

  1. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  2. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  3. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  4. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  5. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  6. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  7. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  8. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  9. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. StringUtils详细介绍

    StringUtils详细介绍 public static void TestStr(){ #null 和 "" 操作~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  2. poj3080(kmp+枚举)

    Blue Jeans Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20163   Accepted: 8948 Descr ...

  3. 通过调整浏览器UA设置欺骗限制上网

    先上图片, 通过调整浏览器UA,欺骗识别,原来这个WIFI是只能手机端使用的,打开IE   F12,进行如上图所示,进行修改,正常输入手机号,获取验证码,登陆后,即可上网了.虽然显示的是400,但实际 ...

  4. 初识Linux------文件管理

    初识Linux------文件管理 说明 由于本章的命令比较多,先对命令有一个整体的说明 命令的一般格式:命令名[选项][参数1][参数2]…… 命令名由小写的英文字母构成,往往是表示相应功能的英文单 ...

  5. uniGUI HyperServer

    uniGUI HyperServer 是一种新的服务器体系架构, 旨在高度提高 uniGUI 应用程序的可用性.稳定性和特定的可伸缩性. 这一目标是通过应用业界已知和广泛使用的技术 (如负载平衡和过程 ...

  6. 《团队-Python 爬取豆瓣电影top250-成员简介及分工》

    杨继尧,没有什么擅长的,会一点python,一点c#,爬取利用数据库,有些用法不太会,但是会在实现项目中查资料.

  7. memset memcpy

    memset与memcpy的用法: void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 cmemset可以方便的清空一个 ...

  8. JavaBean转化为Map,List<JavaBean>转化为List<Map>

    /** * 将对象转化为map * * @param bean * @param <T> * @return */ private <T> Map<String, Obj ...

  9. Python学习笔记第十五周

    目录: 一.CSS补充 1.position 2.overflow 3.hover 4.background 二.JavaScript 三.DOM 主要内容: 一.CSS补充 1.position 可 ...

  10. zedboard开发板上移植opencv代码(立体匹配)

    前言 公司要做立体匹配相关的项目,已有matlab和c++版本,可是不能做到实时显示立体信息,想要硬件实现实时,无奈本渣也是个硬件的新手,先按照实验室lyq同学的思路在zedboard开发板的纯ARM ...