您好!
疑问:我们现在想让视频编码周期性的产生IDR帧,以支持接收端在任何时候能够搜索到发送端发送出来的一个IDR帧,以实现收端与发端的同步。
从TI网站上找到两个相关方法:
1.使用
-
idrFrameInterval 参数来支持编码器自动周期编码IDR帧,该成员定义在IH264VENC_DynamicParams中定义,
-
问题:但是没有在代码中找到例子。请问可帮忙提供一个实例?
How to force Intra frames in H.264 encoder? It can be done using forceFrame parameter of dynamicParams. Set the following: 1.SET dynamicParams.forceFrame = IVIDEO_IDR_FRAME; 2.Call VIDENC1_control() for XDM_SETPARAMS. This will set Force IDR Frame parameter 3.call VIDENC1_process(). This will generate an IDR frame 4.SET dynamicParams.forceFrame = IVIDEO_NA_FRAME; 5.Call VIDENC1_control() for XDM_SETPARAMS. This will set the original parameters for encoding and remove force IDR frame. 6.call VIDENC1_process(). This will resume normal encoding
谢谢支持
: )
feller shi:
补充一下:
结构体定义:
typedef struct IH264VENC_DynamicParams {/*!* Mandatory fields of the DynamicParams structure - Base class*/IVIDENC1_DynamicParams videncDynamicParams;/*!* Additional elements specific to H.264 Encoder - Extensions to base class*/XDAS_Int32 sliceSize;/*!< No. of MB rows per Slice */XDAS_Int32 airRate;/*!< Adaptive Intra Refresh MB Period */XDAS_Int32 intraFrameQP;/*!< Quant. param for I Slices (0-51) */XDAS_Int32 interPFrameQP;/*!< Quant. Param for non - I Slices*/XDAS_Int32 initQ;/*!< Initial QP for RC */XDAS_Int32 rcQMax;/*!< Maximum QP to be usedRange[0,51] */XDAS_Int32 rcQMin;/*!< Minimum QP to be usedRange[0,51] */XDAS_Int32 rcQMaxI;/*!< Maximum QP to be usedRange[0,51] */XDAS_Int32 rcQMinI;/*!< Minimum QP to be usedRange[0,51] */XDAS_Int32 rcAlgo;/*!< Algorithm to be used by Rate Ctrl Scheme*//*!< => CBR, 1 => VBR, 2 => Fixed QP, 3=> CVBR,*//*!< 4=> FIXED_RC 5=> CBR custom1 6=> VBR custom1*/XDAS_Int32 maxDelay;/*!< max delay for rate control interms of ms,*//*!< set it to 1000 for 1 second delay*/XDAS_Int32 aspectRatioX;/*!< X scale for Aspect Ratio */XDAS_Int32 aspectRatioY;/*!< Y scale for Aspect Ratio */XDAS_Int32 lfDisableIdc;/*!< Loop Filter enable/disable control */XDAS_Int32 enableBufSEI;/*!< Enable Buffering period SEI */XDAS_Int32 enablePicTimSEI;/*!< Enable Picture Timing SEI */XDAS_Int32 perceptualRC;/*!< Flag for enabling/disabling PRC */XDAS_Int32 idrFrameInterval;/* IDR Frame Interval */XDAS_Int32 mvSADoutFlag;/* Flag for enable/disable MVSAD out to the app*/XDAS_Int32 resetHDVICPeveryFrame; /* Flag for resetting hdvicp *//* after every frame encode */XDAS_Int32 enableROI;/*!< 0 -> do not enable ROI, 1 -> enable ROI */XDAS_Int32 metaDataGenerateConsume; /* Flag to indicate Generate or Consume metaData*/XDAS_Int32 maxBitrateCVBR;/* Specifies the max Bitrate for CVBR RC algortihm*/XDAS_UInt8 interlaceRefMode;/*!<Mode to choose between ARF/SPF/MRCF*//*!< 0 = ARF (default mode), 1 = SPF, 2 = MRCF */XDAS_Int32 enableGDR;/* Flag to enable Gradual Decoder Refresh */XDAS_Int32 GDRduration;/* GDR refresh duration*/XDAS_Int32 GDRinterval;/* Interval between GDR refresh*/XDAS_Int32 LongTermRefreshInterval;/* Refresh period for long term reference frame */XDAS_Int32 UseLongTermFrame;/* Use longterm frame as reference*/XDAS_Int32 SetLongTermFrame;/* Set a frame as longterm frame for reference */VUIParamBuffer *VUI_Buffer;/* Pointer to VUI buffer*/CustomScalingMatrix *CustomScaleMatrix_Buffer; /* CUSTOMSCALINGMATRIX*/XDAS_Int32CVBRsensitivity;/* Specifies the target bitrate used by rate control*//* in high complexity state */XDAS_Int32CVBRminbitrate ;/* Reserved */XDAS_Int32LBRmaxpicsize;/* parameter controls the maximum number of bits consumed per frame*/XDAS_Int32LBRminpicsize;/* parameter controls the minimum number of bits consumed per frame */XDAS_Int32LBRskipcontrol;/* parameter configures the minimum number of frames *//*to be encoded in a set of N frames */XDAS_Int32 maxHighCmpxIntCVBR;/* Specifies the maximum duration of increased complexity */XDAS_Int32 disableMVDCostFactor;/* Reserved */IH264VENC_TI_DataSyncPutGetFxn putDataGetSpaceFxn;/* Pointer to callback module */IH264VENC_TI_DataSyncHandledataSyncHandle;/* Handle to datSyncDesc */ } IH264VENC_DynamicParams;iocontro接口
Chris Meng:
Feller ,
第一种方法根据参数含义配置就可以了。
idrFrameIntervalXDAS_Int32InputInterval between two consecutive IDR frames 0: first frame will be IDR coded 1: No inter frames, all IDR frames 2: Consecutive IDR P IDR P 3: IDR P P IDR P P IDR .. or IDR P B IDR P B IDR P B ….and so onDefault value = 0.
feller shi:
回复 Chris Meng:
孟工,你好!
有没有代码实例?我在dvsdk里没有搜索到比较符合的实例。
谢谢:)
Chris Meng:
回复 feller shi:
Feller,
抱歉,我对DVSDK代码不是很熟悉。IPNC代码里面没有使用DMAI。你需要看看如何在DMAI里面配置该参数。
yang ran:
回复 Chris Meng:
把此项设置为1自然只有第一帧是IDR.请问码率控制设置为Low delay对周期生成IDR有影响吗?
Chris Meng:
回复 yang ran:
Yang Ran,
DM36x使用的h264enc和IVAHD h264enc是不同的。问题没有可比性。
TI中文支持网


