HEVC编码调用compressGOP()来实现一个GOPSize 图像序列的编码。在reference code里,真正做compressGOP编码之前,需要存GOPSize帧YUV在m_cListPic中。

if (pPicYuvOrg)

{

// get original YUV
TComPic* pcPicCurr = NULL;
m_cTEncTop.xGetNewPicBuffer( pcPicCurr );
pPicYuvOrg->copyToPic( pcPicCurr->getPicYuvOrg() );

// compute image characteristics
if ( m_cTEncTop.getUseAdaptiveQP() )
{
m_cTEncTop.m_cPreanalyzer.xPreanalyze( dynamic_cast<TEncPic*>( pcPicCurr ) );
}
}

这种调用方式会造成delay, 不适合在实时环境中应用。故需要调整compressGOP函数,实现一帧入一帧出。修改起来也比较简单,如下:

Void TEncGOP::compressGOP( Int nGOPId, Int iPOCLast, Int iNumPicRcvd, TComList<TComPic*>& rcListPic, TComList<TComPicYuv*>& rcListPicYuvRecOut, std::list<AccessUnit>& accessUnitsInGOP)
{
TComPic* pcPic;
TComPicYuv* pcPicYuvRecOut;
TComSlice* pcSlice;
TComOutputBitstream *pcBitstreamRedirect;
pcBitstreamRedirect = new TComOutputBitstream;
AccessUnit::iterator itLocationToPushSliceHeaderNALU; // used to store location where NALU containing slice header is to be inserted
UInt uiOneBitstreamPerSliceLength = 0;
TEncSbac* pcSbacCoders = NULL;
TComOutputBitstream* pcSubstreamsOut = NULL;

if(nGOPId == 0)----->每个GOP的第一帧做xInitGOP 即可
xInitGOP( iPOCLast, iNumPicRcvd, rcListPic, rcListPicYuvRecOut );

m_iNumPicCoded = 0;
SEIPictureTiming pictureTimingSEI;
#if L0044_DU_DPB_OUTPUT_DELAY_HRD
Int picSptDpbOutputDuDelay = 0;
#endif
UInt *accumBitsDU = NULL;
UInt *accumNalsDU = NULL;
SEIDecodingUnitInfo decodingUnitInfoSEI;
//for ( Int iGOPid=0; iGOPid < m_iGopSize; iGOPid++ ) 
for ( Int iGOPid= nGOPId ; iGOPid <= nGOPId; iGOPid++ ) -----每次encode一帧YUV

。。。。

}

nGOPId 是指示一个GOP的第几帧, iNumPicRcvd 表示 当前GOP已接收到几帧数据。在Void TAppEncTop::encode()调用如下:

m_cTEncTop.m_cGOPEncoder.compressGOP(nGOPid, m_cTEncTop.m_iPOCLast, nGOPid+1,
      m_cTEncTop.m_cListPic, m_cListPicYuvRec, outputAccessUnits);

HEVC compressGOP 接口的更多相关文章

  1. iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):2 H264数据写入文件

    本文档为iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述续篇,主要描述: CMSampleBufferRef读取实际数据 序列参数集(Sequence Para ...

  2. FFmpeg的HEVC解码器源代码简单分析:概述

    ===================================================== HEVC源代码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpe ...

  3. HEVC(H.265)标准的编码器(x265,DivX265)试用

    基于HEVC(H.265)的的应用级别的编码器发展的速度很快.所说的应用级别,就是指速度比较快的,有实际应用价值的编码器.目前可以直接使用的有两个:x265,DivX265. DivX265 DivX ...

  4. FFmpeg的HEVC解码器源码简单分析:概述

    ===================================================== HEVC源码分析文章列表: [解码 -libavcodec HEVC 解码器] FFmpeg ...

  5. RTSP H264/HEVC 流 Wasm 播放

    本文将介绍 RTSP H264/HEVC 裸流如何于网页前端播放.涉及 WebSocket 代理发送流数据, Wasm 前端解码等. 代码: https://github.com/ikuokuo/rt ...

  6. Android平台摄像头/屏幕/外部数据采集及RTMP推送接口设计描述

    好多开发者提到,为什么大牛直播SDK的Android平台RTMP推送接口怎么这么多?不像一些开源或者商业RTMP推送一样,就几个接口,简单明了. 不解释,以Android平台RTMP推送模块常用接口, ...

  7. App开发:模拟服务器数据接口 - MockApi

    为了方便app开发过程中,不受服务器接口的限制,便于客户端功能的快速测试,可以在客户端实现一个模拟服务器数据接口的MockApi模块.本篇文章就尝试为使用gradle的android项目设计实现Moc ...

  8. 干货来袭-整套完整安全的API接口解决方案

    在各种手机APP泛滥的现在,背后都有同样泛滥的API接口在支撑,其中鱼龙混杂,直接裸奔的WEB API大量存在,安全性令人堪优 在以前WEB API概念没有很普及的时候,都采用自已定义的接口和结构,对 ...

  9. 12306官方火车票Api接口

    2017,现在已进入春运期间,真的是一票难求,深有体会.各种购票抢票软件应运而生,也有购买加速包提高抢票几率,可以理解为变相的黄牛.对于技术人员,虽然写一个抢票软件还是比较难的,但是还是简单看看123 ...

随机推荐

  1. ny27 水池数目

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地图上 ...

  2. Exception时信息的记录

    系统总有出现异常的时候,那么出现异常时应该如何处理? 一直以来,我都以为这么处理就足够的: 在日志中打印Exception的堆栈信息,以便排查原因 反馈给用户系统xxx出现问题 package com ...

  3. SQL Server,MySQL,Oracle三者的区别

    SQL Server,MySQL,Oracle三者的区别 2016-10-14 转自:SQL Server,MySQL,Oracle三者的区别 目录 1 Oracle.Sql Server.MySql ...

  4. VC++编程之道读书笔记

    第二篇 缪误21:位图数据是按照红绿蓝顺序存储的 大家都知道位图的颜色是由红.绿.蓝三个分量构成的,但是位图颜色数据存储的方式则不是按照这个顺序存储的,而是按照蓝.绿.红的顺序存储的.并且对于真彩色位 ...

  5. Rokid开发者社区skill之【历史上的今天】

    技能名称:历史上的今天 入口词:打开历史上的今天 语音交互:(有些是先写上) { "intents": [ { "intent": "PAUSE_HI ...

  6. maven项目install时候一直报错,检查Maven-javadoc-plugin声明错误(Java 8 配置Maven-javadoc-plugin)或者是:警告: @throws 没有说明

    在升级JDK至1.8之后,使用Maven-javadoc-plugin插件打包报错,[ERROR] Failed to execute goal org.apache.maven.plugins:ma ...

  7. Python3 Scrapy 安装方法

    Python3 Scrapy 安装方法 (一脸辛酸泪) 写在前面 最近在学习爬虫,在熟悉了Python语言和BeautifulSoup4后打算下个爬虫框架试试. 没想到啊,这坑太深了... 看了看相关 ...

  8. ios UITextField文本框基本使用,以及所有代理方法的作用

    /* UITextField文本输入框 */ UITextField * textField = [[UITextField alloc]initWithFrame:CGRectMake(50, 50 ...

  9. git工作流教程

    简介:在用git进行开发时,需要规范化,这时用git工作流来规范化,软件开发过程 https://github.com/oldratlee/translations/blob/master/git-w ...

  10. tmpx75 I2C 温度传感器驱动程序添加

    在kernel 内 make menuconfig 加入相关选项 Device Drivers ---> <*> Hardware Monitoring support ---> ...