@ -8,6 +8,9 @@
# include "CheckUtil.hpp"
# include "CheckUtil.hpp"
# include "CheckConfigDefine.h"
# include "CheckConfigDefine.h"
// Analysis_AD_Bind 返回码: 主通道为空(配置为空或本次无匹配通道), 调用方回退执行 Analysis_AD
static const int AD_BIND_RE_MAIN_EMPTY = 2 ;
QX_Merge_Analysis : : QX_Merge_Analysis ( )
QX_Merge_Analysis : : QX_Merge_Analysis ( )
{
{
m_bExit = false ;
m_bExit = false ;
@ -1025,7 +1028,35 @@ int QX_Merge_Analysis::Analysis_QXtype(ALL_Qx_DataList *pALLTypeqxList, int qx_i
{
{
if ( m_pbaseCheckFunction - > ad_check . analysis_bind . bUse )
if ( m_pbaseCheckFunction - > ad_check . analysis_bind . bUse )
{
{
Analysis_AD_Bind ( pALLTypeqxList , qx_idx ) ;
// 主通道为空: Analysis_AD_Bind 返回回退码, 用次通道列表里的通道走 Analysis_AD 老逻辑
if ( Analysis_AD_Bind ( pALLTypeqxList , qx_idx ) = = AD_BIND_RE_MAIN_EMPTY )
{
// 回退过滤: 仅次通道列表(2s_second_channel + 3s_second_channel, 去重)中的通道参与
std : : vector < std : : string > fallback_channels ;
const std : : vector < std : : string > & fallback_sec2 = m_pbaseCheckFunction - > ad_check . analysis_bind . second_channel_2s ;
const std : : vector < std : : string > & fallback_sec3 = m_pbaseCheckFunction - > ad_check . analysis_bind . second_channel_3s ;
fallback_channels . insert ( fallback_channels . end ( ) , fallback_sec2 . begin ( ) , fallback_sec2 . end ( ) ) ;
for ( size_t k = 0 ; k < fallback_sec3 . size ( ) ; k + + )
{
if ( std : : find ( fallback_channels . begin ( ) , fallback_channels . end ( ) , fallback_sec3 [ k ] ) = = fallback_channels . end ( ) )
{
fallback_channels . push_back ( fallback_sec3 [ k ] ) ;
}
}
std : : string strFallbackChannels ;
for ( size_t k = 0 ; k < fallback_channels . size ( ) ; k + + )
{
strFallbackChannels + = fallback_channels [ k ] ;
if ( k + 1 < fallback_channels . size ( ) )
{
strFallbackChannels + = " , " ;
}
}
m_pMergedetlog - > AddCheckstr ( PrintLevel_1 , 3 , " Analysis_AD_Bind " ,
" main channel empty --> fallback Analysis_AD (only second channels: %s) " ,
fallback_channels . empty ( ) ? " <empty> " : strFallbackChannels . c_str ( ) ) ;
Analysis_AD ( pALLTypeqxList , qx_idx , & fallback_channels ) ;
}
}
}
else
else
{
{
@ -1073,7 +1104,7 @@ int QX_Merge_Analysis::Judge_NG_Config()
return 0 ;
return 0 ;
}
}
int QX_Merge_Analysis : : Analysis_AD ( ALL_Qx_DataList * pALLTypeqxList , int qx_idx )
int QX_Merge_Analysis : : Analysis_AD ( ALL_Qx_DataList * pALLTypeqxList , int qx_idx , const std : : vector < std : : string > * pAllowChannels )
{
{
AD_list . clear ( ) ;
AD_list . clear ( ) ;
if ( ! m_pbaseCheckFunction )
if ( ! m_pbaseCheckFunction )
@ -1092,6 +1123,14 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
{
{
QX_channel_List * pQXChannelList = & pALLTypeqxList - > channelqxList [ i ] ;
QX_channel_List * pQXChannelList = & pALLTypeqxList - > channelqxList [ i ] ;
// 回退过滤: pAllowChannels 非空时仅允许列表内(次通道列表)的通道参与
if ( pAllowChannels & &
std : : find ( pAllowChannels - > begin ( ) , pAllowChannels - > end ( ) , pQXChannelList - > channel_name ) = = pAllowChannels - > end ( ) )
{
pQXChannelList - > pChannelDetlog - > AddCheckstr ( PrintLevel_1 , 3 , " Analysis_AD " ,
" channel %s not in allow list(fallback) --> skip " , pQXChannelList - > channel_name . c_str ( ) ) ;
continue ;
}
if ( ! pAd_checkParma )
if ( ! pAd_checkParma )
{
{
continue ;
continue ;
@ -1336,6 +1375,14 @@ int QX_Merge_Analysis::Analysis_AD(ALL_Qx_DataList *pALLTypeqxList, int qx_idx)
{
{
QX_channel_List * pQXChannelList = & pALLTypeqxList - > channelqxList [ i ] ;
QX_channel_List * pQXChannelList = & pALLTypeqxList - > channelqxList [ i ] ;
// 回退过滤: pAllowChannels 非空时仅允许列表内(次通道列表)的通道被判定NG
if ( pAllowChannels & &
std : : find ( pAllowChannels - > begin ( ) , pAllowChannels - > end ( ) , pQXChannelList - > channel_name ) = = pAllowChannels - > end ( ) )
{
pQXChannelList - > pChannelDetlog - > AddCheckstr ( PrintLevel_1 , 3 , " Analysis_AD " ,
" channel %s not in allow list(fallback) --> skip NG mark " , pQXChannelList - > channel_name . c_str ( ) ) ;
continue ;
}
if ( ! pAd_checkParma - > bOpen )
if ( ! pAd_checkParma - > bOpen )
{
{
@ -1546,6 +1593,12 @@ int QX_Merge_Analysis::Analysis_AD_Bind(ALL_Qx_DataList *pALLTypeqxList, int qx_
m_pMergedetlog - > AddCheckstr ( PrintLevel_2 , 3 , " Analysis_AD_Bind " , " main_channel %d second_channel %d " ,
m_pMergedetlog - > AddCheckstr ( PrintLevel_2 , 3 , " Analysis_AD_Bind " , " main_channel %d second_channel %d " ,
( int ) main_channel_s_qxList . size ( ) , ( int ) second_channel_s_qxList . size ( ) ) ;
( int ) main_channel_s_qxList . size ( ) , ( int ) second_channel_s_qxList . size ( ) ) ;
/* 主通道为空(配置为空或本次无匹配通道): 返回回退码, 由调用方改用 Analysis_AD 老逻辑 */
if ( main_channel_s_qxList . empty ( ) )
{
return AD_BIND_RE_MAIN_EMPTY ;
}
/* 画面分析 */
/* 画面分析 */
AD_list_bind . clear ( ) ;
AD_list_bind . clear ( ) ;
for ( int i_main = 0 ; i_main < main_channel_s_qxList . size ( ) ; i_main + + )
for ( int i_main = 0 ; i_main < main_channel_s_qxList . size ( ) ; i_main + + )