/******************************************************************************
* 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. WinPcap是用于网络封包抓取的一套工具

    WinPcap是用于网络封包抓取的一套工具,可适用于32位的操作平台上解析网络封包,包含了核心的封包过滤,一个底层动态链接库,和一个高层系统函数库,及可用来直接存取封包的应用程序界面. Winpcap ...

  2. 201621123001 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 关于泛型 <T extends Comparable <T ...

  3. spring 配置 applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  4. jmeter中添加压力机

    在压测的时候,可能并发比较大,一台机子已经启动不了那么多并发了,这个时候就是有多台机子一起来并发,就要添加压力机 如何添加压力机呢: 1.其他电脑上也安装了jmeter,和其他电脑都能ping通当前电 ...

  5. Debugging memory usage with kbmMW

    kbmMW的更高版本包含越来越多的功能,可用于通常的日志记录,审计,运行期发生异常时的堆栈跟踪以及现在的内存使用调试.这些功能实际上可用于任何应用程序,不仅限于基于kbmMW开发的多层应用系统.我已经 ...

  6. h5 手机端适配问题汇总

    1.uc手机浏览器竟然没有 sessionstorage 醉了 2.opera 浏览器  能识别 a标签中href的  javascript:; 为网址  ,  55555 3.safari 的弹框如 ...

  7. 【Python】基础练习题-1

    #练习1:从键盘输入两个数,并比较其大小,直到输入e/E退出程序 while 1: input_number=raw_inut("please input two numbers,enter ...

  8. linux 命令使用方法(随时更新)

    1.hexdump 命令简介:hexdump是Linux下的一个二进制文件查看工具,它可以将二进制文件转换为ASCII.八进制.十进制.十六进制格式进行查看. 命令语法:hexdump: [-bcCd ...

  9. Selenium之ActionChains (二)

    今天,为大家介绍的是标题中的三个新方法,以及一个老方法 以下方法都需要操作一个名为Keys的包,先来简单认识下 Keys key_down(value,element),key_up(value,el ...

  10. Samsung_tiny4412(驱动笔记03)----字符设备驱动基本操作及调用流程

    /*********************************************************************************** * * 字符设备驱动基本操作及 ...