https://en.wikipedia.org/wiki/X264

x264 is able to use Periodic Intra Refresh instead of keyframes, which enables each frame to be capped to the same size enabling each slice to be immediately transmitted in a single UDP or TCP packet and on arrival immediately decoded.[15] Periodic Intra Refresh can replace keyframes by using a column of intra blocks that move across the video from one side to the other, thereby "refreshing" the image. In effect, instead of a big keyframe, the keyframe is "spread" over many frames. The video is still seekable: a special header, called the SEI Recovery Point, tells the decoder to "start here, decode X frames, and then start displaying the video." This hides the refresh effect from the user while the frame loads. Motion vectors are restricted so that blocks on one side of the refresh column don't reference blocks on the other side, effectively creating a demarcation line in each frame.

https://community.freescale.com/thread/311299

ASK:

I am interested in using the i.MX6Q VPU to encode H.264 streams with intra-refresh enabled.  For this I looked up in the i.MX 6Dual/6Quad VPU Application Programming Interface Linux Reference Manual, Rev L3.0.35_4.0.0, 05/2013, page 24 where it states that setting the intraRefresh field to a non-zero value in EncOpenParam structure and passing to the vpu_EncOpen() API will enable intra-refresh:

intraRefresh where 0 = Intra MB refresh is not used. Otherwise = At least N MB's in every P-frame are encoded as intra MB's. This value is ignored in for STD_MJPG.

So, following the above directions, I set intraRefresh to different non-zero values (800, 2400, etc) and encoded 1080 H.264 streams from the camera.  Upon examination of the streams, it looks likes there are still I-frames in the video.  I am under the impression that when intra-refresh parameter is enabled then there would be no I frames in the video, just P frames with the Intra MBs embedded within.

I am modifying vpu_wrapper.c from the 4.0.0 LTIB release.  In VPU_EncOpen(), I set sEncOpenParam.intraRefresh = 2400.  Also tried other values.

My question is why the VPU is still generating I-frames despite the intra-refresh option set?

Also whether there are other options I need to enable/modify to get this to encode properly?

ANSWER:

The parameter intraRefresh only affect the P frame, it isn't related with I frame.

If you want to encode clip with rare I frame, you can enlarge the I frame interval through assign one big GOP size.

gopSize is the GOP size, where 0 means only first picture is I; 1 means all I pictures, 2 = IPIP, 3 = IPPIPP, and so on. The maximum value is 32,767, but in practice, a smaller value should be chosen by the application for proper error concealment. This value is ignored for STD_MJPG.

https://community.freescale.com/thread/321537

what is right configuration of iMX53 vpu of freescale that can generate h264 vedio stream with constant bitrate?

I'm using the mx53 vpu(and will use imx6Q) to encode VGA pictures(yuv420) to h264 vedio stream.  After vpu encodes one frame,  we send related h264 datas using wirless network to another dev. Because the wireless bandwidth is limited to an constant value , we hope the h264 bitrate can be or most nearly  a constant value "400Kb".  My configurations of the vpu are as follows. Howerver ,we mornitored the network's bitrate, the vpu's bitrate isn't an constant, it changes from 100kb to 800kb,  also the video quality is much more worse than vedio from TI's dm365 which generates h264 vedio stream with the same bitrate .
Can anyone help me to check which parameter is not right or how to config the vpu to get constant bitrate with high vedio quality ?
Thanks !! encConfig.stdMode = STD_AVC;
encConfig.picWidth=;
encConfig.picHeight=;
encConfig.encWidth=;
encConfig.encHeight=;
encConfig.offsetX=;
encConfig.offsetY=;
encConfig.bitRate =; //bitrate set here ,but not working
encConfig.rotatedAngle=; //rotate
encConfig.initialDelay=; // no use for h264
encConfig.vbvBufferSize=; //initial delay==0 , delay this param
encConfig.frameRate=; //
encConfig.gopsize =; // 0 is 仅第一帧为I; 1 is IIIIII; 2 is IPIPIP; 3 is IPPIPPIPP; 4 is IPPPIPPPIPPP,...
encConfig.enableAutoSkip= ; //skipe encode
encConfig.intraRefresh =; // 0 - Intra MB refresh is not used.
encConfig.rcIntraQp=(); //26, default, Quantization parameter for I frame.
encConfig.annexJ =;
encConfig.annexK =;
encConfig.annexT =;
encConfig.quantparam =; //vbr 0-51for 264, 1 ~ 31 for MPEG-4 // Fill parameters for encoding.
encOP.bitstreamBuffer = g_BitstreamPhy;
encOP.bitstreamBufferSize = 0x100000;
encOP.bitstreamFormat = encConfig.stdMode;
encOP.frameRateInfo = encConfig.frameRate;
encOP.bitRate = encConfig.bitRate;
encOP.initialDelay = encConfig.initialDelay;
encOP.vbvBufferSize = encConfig.vbvBufferSize; // 0 = ignore
encOP.gopSize = encConfig.gopsize; // only first picture is I
encOP.slicemode.sliceMode = ; // 0:1 slice per picture, 1: multi slice
encOP.slicemode.sliceSizeMode = ;
encOP.slicemode.sliceSize = ;//
encOP.intraRefresh = encConfig.intraRefresh;
encOP.rcIntraQp = encConfig.rcIntraQp;
encOP.userQpMax = ; //default 1 szj change
encOP.userQpMin = ;
encOP.userQpMinEnable = ;
encOP.userQpMaxEnable = ;
encOP.userGamma = ;
encOP.RcIntervalMode = ;
encOP.MbInterval = ;
encOP.interleavedCbCr = ;
encOP.avcIntra16x16OnlyModeEnable = ;
encOP.picWidth = encConfig.picWidth;
encOP.picHeight = encConfig.picHeight;
encOP.encWidth = encConfig.encWidth;
encOP.encHeight = encConfig.encHeight;
encOP.offsetX = encConfig.offsetX;
encOP.offsetY = encConfig.offsetY;
encOP.rotationAngle = encConfig.rotatedAngle; if (encConfig.stdMode == STD_MPEG4)
{
encOP.EncStdParam.mp4Param.mp4_dataPartitionEnable = ;
encOP.EncStdParam.mp4Param.mp4_reversibleVlcEnable = ;
encOP.EncStdParam.mp4Param.mp4_intraDcVlcThr = ;
encOP.EncStdParam.mp4Param.mp4_hecEnable = ;
encOP.EncStdParam.mp4Param.mp4_verid = ;
} if (encConfig.stdMode == STD_AVC)
{
encOP.EncStdParam.avcParam.avc_constrainedIntraPredFlag = ;
encOP.EncStdParam.avcParam.avc_disableDeblk = ;
encOP.EncStdParam.avcParam.avc_deblkFilterOffsetAlpha = ;
encOP.EncStdParam.avcParam.avc_deblkFilterOffsetBeta = ;
encOP.EncStdParam.avcParam.avc_chromaQpOffset = ;
encOP.EncStdParam.avcParam.avc_audEnable = ;
encOP.EncStdParam.avcParam.avc_fmoEnable = ;
encOP.EncStdParam.avcParam.avc_fmoType = ;
encOP.EncStdParam.avcParam.avc_fmoSliceNum = ;
encOP.EncStdParam.avcParam.avc_fmoSliceSaveBufSize = MAX_FMO_SLICE_SAVE_BUF_SIZE;
}
encOP.ringBufferEnable = ;
encOP.dynamicAllocEnable = ;
encOP.picWidth = (encOP.picWidth + ) & ~;
encOP.picHeight = (encOP.picHeight + ) & ~;
YFrameSize = encOP.picWidth * encOP.picHeight;
srcFrameIdx = initialInfo.minFrameBufferCount; exit_t = ;
frameIdx = ;
encParam.sourceFrame = &frameBuf[srcFrameIdx];
encParam.quantParam = encConfig.quantparam;
encParam.forceIPicture = ; //default 0
encParam.skipPicture = ;
encParam.enableAutoSkip = encConfig.enableAutoSkip;

Intra Refresh of H264 encoder的更多相关文章

  1. Intel Media SDK H264 encoder GOP setting

    1 I帧,P帧,B帧,IDR帧,NAL单元 I frame:帧内编码帧,又称intra picture,I 帧通常是每个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随 ...

  2. Using Live555 to Stream Live Video from an IP camera connected to an H264 encoder

    http://stackoverflow.com/questions/27279161/using-live555-to-stream-live-video-from-an-ip-camera-con ...

  3. (转)x264代码详细阅读之x264.c,common.c,encoder.c

    转自:http://alphamailpost.blog.163.com/blog/static/201118081201281103931932/ x264代码详细阅读第一之x264.chttp:/ ...

  4. H.264视频的RTP荷载格式

    Status of This Memo This document specifies an Internet standards track protocol for the   Internet ...

  5. ffmpeg最全的命令参数

    Hyper fast Audio and Video encoderusage: ffmpeg [options] [[infile options] -i infile]... {[outfile ...

  6. x264源代码简单分析:x264命令行工具(x264.exe)

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

  7. ffmpeg中的x264编码选项,对应关系

    )’ Disabled. ‘variance (1)’ Variance AQ (complexity mask). ‘autovariance (2)’ Auto-variance AQ (expe ...

  8. 18、x264编码在zedboard上的实现(软编码)

    一.x264开源包获取 x264-snapshot提供了开源x264源代码,已经在X86和ARM架构下均已实现.linux下可以使用git获得最新的代码包 git clone git://git.vi ...

  9. x264源代码简单分析:编码器主干部分-2

    ===================================================== H.264源代码分析文章列表: [编码 - x264] x264源代码简单分析:概述 x26 ...

随机推荐

  1. hdu 3853 LOOPS 概率DP

    简单的概率DP入门题 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> #include ...

  2. 【BZOJ 2453|bzoj 2120】 2453: 维护队列 (分块+二分)

    2453: 维护队列 Description 你小时候玩过弹珠吗? 小朋友A有一些弹珠,A喜欢把它们排成队列,从左到右编号为1到N.为了整个队列鲜艳美观,小朋友想知道某一段连续弹珠中,不同颜色的弹珠有 ...

  3. Mac OS X 启用 Web 服务器

    转载: http://note.rpsh.net/posts/2013/11/26/osx-apache-server-php-mysql/

  4. 雷军北大演讲:除了聪明和勤奋我们还需要什么(关键是有了梦想以后,你能不能把这个东西付诸实践)good

    雷军北大演讲:除了聪明和勤奋我们还需要什么 昨天我在乌镇参加了全球互联网峰会,在这个会议上有马云,也有苹果公司的高级副总裁,主持人抛出了一个问题,说雷军你说你有一个目标,要用5到10年的时间做智能手机 ...

  5. RedMine项目管理系统安装问题(Windows版一键安装包)

    安装准备: 操作环境:VMware10 下安装的windows10 系统 使用软件:<bitnami-redmine---windows-installer.exe> 问题描述: 安装过程 ...

  6. org.apache.http.ProtocolException: Target host is not specified

    对于httpClient4.3访问指定页面,可以从下面的demo抽取方法使用. 注意:对于URL必须使用 http://开始,否则会有如下报错信息: Caused by: org.apache.htt ...

  7. linux进程模型总结

    Linux进程通过一个task_struct结构体描述,在linux/sched.h中定义,通过理解该结构,可更清楚的理解linux进程模型.       包含进程所有信息的task_struct数据 ...

  8. 隐马尔科夫模型,第三种问题解法,维比特算法(biterbi) algorithm python代码

    上篇介绍了隐马尔科夫模型 本文给出关于问题3解决方法,并给出一个例子的python代码 回顾上文,问题3是什么, 下面给出,维比特算法(biterbi) algorithm 下面通过一个具体例子,来说 ...

  9. 【Codeforces】#345 Div1

    1. Watchmen1.1 题目描述给$n$个点,求曼哈顿距离等于欧式距离的点对数. 1.2 基本思路由$|x_i-x_j|+|y_i-yj| = \sqrt{(x_i-x_j)^2+(y_i-yj ...

  10. 将OutLook.exe注册为服务,让其一直保持开启状态

    类似于TaobaoProtect.exe是由TBSecSvc服务启动的 http://stackoverflow.com/questions/3582108/create-windows-servic ...