当前位置: 首页 > 工具软件 > AFD > 使用案例 >

Active Format Description (AFD)简介

终睿
2023-12-01

AFD主要用在视频处理领域,基本的概念这里不介绍,这里主要介绍的是AFD编码代表的意思,以及和bar data的关系,关于这部分的标准可以参考ETSI TS 101 154文档。

1.AFD编码代表的意思:

0000:AFD未定义或不可用;
0001:保留未用;
0010:16:9的制作图像(image),源码帧(coded frame)为4:3时,top对齐,bottom填充,源码帧为16:9时全屏;
0011:14:9的制作图像,源码帧为4:3时,bottom对齐,top填充,源码帧为16:9时为pillar-box;
0100:制作图像>16:9,  源码帧为4:3和16:9时,都为letterbox;
0101 to 0111:保留未用;
1000: 制作图像和源码帧相同;
1001:4:3的制作图像,源码帧为4:3时全屏,源码帧为16:9时pillar-box;
1010: 16:9的制作图像;源码帧为4:3时letterbox,源码帧为16:9时全屏;
1011: 14:9的制作图像,源码帧为4:3时letterbox,源码帧为16:9时pillar-box;
1100:保留未用;
1101:4:3的制作图像(with shoot and protect 14:9 centre),源码帧为4:3时全屏,源码帧为16:9时pillar-box,当输出设备设置为16:9时,先AFD cut 14:9,然后进行宽高比矫正进行显示;
1110:16:9的制作图像(with shoot and protect 14:9 centre),源码帧为4:3时letterbox,源码为16:9时全屏;
1111:16:9的制作图像(with shoot and protect 4:3 centre),源码帧为4:3时letterbox,源码为16:9时全屏;

这里的image是节目制作时摄像到的素材宽高比,源码帧就是编码后TS流中视频帧的宽高比。

2.bar data的作用

因为AFD只支持4:3 14:9和16:9 三种宽高比,实际中远不止这些宽高比,于是bar data就出现了,作为AFD的一个补充。
bar data是成对出现的,top和bottom一对,left和right一对,任何时候不能两队同时出现。虽然是成对出现的,但其中一个可以为0 。

3.AFD和bar data的关系

当AFD和bar data同时出现在流中时,进行AFD cut操作,bar data被忽略,但有一种情况例外,就是当AFD 为"0000" 和 "0100"时, bar data 应该被使用。

4.一个实际的例子

在每个vsync时,产生中断,注册这个中断的处理函数的过程为:
1.NEXUS_VideoInput_P_ConnectVideoDecoder()
调用:
decoderConnect.callbackContext = link;
decoderConnect.dataReadyCallback_isr = NEXUS_VideoInput_P_DecoderDataReady_isr;
rc = NEXUS_VideoDecoder_SetDisplayConnection_priv(link->input->source, &decoderConnect);


2.NEXUS_VideoDecoder_SetDisplayConnection_priv()
调用:
NEXUS_VideoDecoder_SetDisplayConnection_priv_Avd()


3. NEXUS_VideoDecoder_SetDisplayConnection_priv_Avd()
调用:
NEXUS_VideoDecoder_P_SetXvdDisplayInterrupt()


4.NEXUS_VideoDecoder_P_SetXvdDisplayInterrupt()
调用:
VDCDevIntrSettings.hAppXdmDih = connection->dataReadyCallback_isr?videoDecoder->device->hXdmDih[interrupt]:NULL;
BXVD_RegisterVdcDeviceInterrupt()


所以当有vsync中断产生时,实际的中断处理函数为:
NEXUS_VideoInput_P_DecoderDataReady_isr(void *input_, const BAVC_MFD_Picture *pPicture)
这里*pPicture为下一帧要显示的图片


1.下面分析一下NEXUS_VideoInput_P_DecoderDataReady_isr()这个函数的执行过程,
调用:BVDC_Source_MpegDataReady_isr()


2.BVDC_Source_MpegDataReady_isr()
调用:
BVDC_P_Window_AdjustRectangles_isr()函数调整窗口大小
然后重构RULlist,更新RULlist
 类似资料: