示例#1
0
/********************************************
* NAME: cc_vbi_show_on
*       set vbi display or not
*
* Returns : none
* Parameter     				Flow    Description
*
* ------------------------------------------------------------------------------
* BOOL bOn					IN	Show CC via VBI. TRUE: Show, False: Not Show
* ------------------------------------------------------------------------------
* Additional information:
******************************************/
void cc_vbi_show_on(BOOL bOn)	
{
	#define CMD_ERASE_DISPLAYED_MEMORY_NONDIS_CH1	0x94
	#define CMD_ERASE_DISPLAYED_MEMORY_NONDIS_CH2	0x1C
	#define CMD_ERASE_DISPLAYED_MEMORY_DIS	0x2C
	UINT16 bdata1,bdata2;
	if(bOn)
	{
		disable_vbioutput(FALSE);
	}
	else	
	{
		disable_vbioutput(TRUE);
		//Erase Channel 1
		bdata1=CMD_ERASE_DISPLAYED_MEMORY_NONDIS_CH1; 
		bdata2=CMD_ERASE_DISPLAYED_MEMORY_DIS;		
		sub_sdhd_write_cc_data(0,(bdata2<<8)|bdata1); // 1:top, 0:bot
		sub_sdhd_write_cc_data(1,(bdata2<<8)|bdata1); // 1:top, 0:bot
		//Erase Channel 2				
		bdata1=CMD_ERASE_DISPLAYED_MEMORY_NONDIS_CH2; 
		bdata2=CMD_ERASE_DISPLAYED_MEMORY_DIS;		
		sub_sdhd_write_cc_data(0,(bdata2<<8)|bdata1); // 1:top, 0:bot
		sub_sdhd_write_cc_data(1,(bdata2<<8)|bdata1); // 1:top, 0:bot		
	}	
}
示例#2
0
/********************************************
* NAME: atsc_user_data_cc
*       callback func to: 1 vbi output, 2 push user data for cc and dtvcc using
*
* Returns : void
*
* Parameter     				Flow    Description
* ------------------------------------------------------------------------------
* UINT8 FieldPolar				IN		no use
* ------------------------------------------------------------------------------
* Additional information:
******************************************/
static void atsc_user_data_cc(UINT8 FieldPolar)
{
	UINT8 i=0,j=0,cc_cnt=0;
	UINT8 byte1,byte2, pariety_check_1=0,pariety_check_2=0;
	UINT8 cc_field=0;
	BOOL push_1=FALSE, push_2=FALSE;
	static BOOL XDS=FALSE;
	//if(FieldPolar == 0) return;// current is Top field linemeet ,return

	UINT8 rd_idx;
	//g_vbi_priv->vbi_line21_push_by_cc((((g_user_data[rd_idx][i*3+8])&0X7F)<<8)|(g_user_data[rd_idx][i*3+9])&0X7F);
	//
	if(g_user_data_array_cnt>0)
	{
		rd_idx = g_user_data_array_rd;
		if(g_user_data[rd_idx][0]==0x47			//'G'
			&&g_user_data[rd_idx][1]==0x41		//'A'
			&&g_user_data[rd_idx][2]==0x39		//'9'
			&&g_user_data[rd_idx][3]==0x34		//'4'
			&&g_user_data[rd_idx][4]==0x03		//cc indicator
			&&(g_user_data[rd_idx][5]&0x40)==0x40		//process_cc_data_flag
		)
		{
			cc_cnt = g_user_data[rd_idx][5]&0x1f;
			/*
			if(*ccg_vbi27_cc_by_osd != 0)
				cc_cnt = (cc_cnt>2)?2:cc_cnt;// xing 20070522 for DTVCC unused
				*/
			//em_data = g_user_data[6];
			//ccvbi_CC=FALSE;
			for(i=0;i<cc_cnt;i++)
			{
				if((g_user_data[rd_idx][i*3+7]&0x04) == 0x04)//cc_valid == 1
				{
					pariety_check_1=0;pariety_check_2=0;
					byte1=(g_user_data[rd_idx][i*3+8])&0x7F;
					byte2=(g_user_data[rd_idx][i*3+9])&0x7F;
			
					if((byte1==0x01 && byte2==0x05) ||(byte1==0x09 && byte2==0x01) || (byte1==0x09 && byte2==0x02) \
						|| (byte1==0x0a && byte2==0x01) || (byte1==0x0a && byte2==0x02) ) //v-chip , puplic service & puplic service cont.
						XDS=TRUE;
					if((byte1>=0x10&&byte1<=0x1f)&&(!(byte2>0x2f&&byte2<0x40)) && byte2>=0x20&&byte2<=0x7f)//control data
						XDS=FALSE;
					//===
					if((byte1>=0x10&&byte1<=0x1f)&&(!(byte2>0x2f&&byte2<0x40)) && byte2>=0x20&&byte2<=0x7f && \
						(!((byte1==0x12 || byte1==0x13|| byte1==0x1A|| byte1==0x1B) && (byte2>0x1f&&byte2<0x40)  )))
					{
						ccvbi_CC=TRUE;
					}
					//===

					push_1 = (*ccg_vbi27_cc_by_osd==0x00 || *ccg_vbi27_cc_by_osd==0x01 || *ccg_vbi27_cc_by_osd==0x02|| *ccg_vbi27_cc_by_osd==0x05|| *ccg_vbi27_cc_by_osd==0x06);
					push_2 = ( XDS ||  *ccg_vbi27_cc_by_osd==0x00 || *ccg_vbi27_cc_by_osd==0x03 || *ccg_vbi27_cc_by_osd==0x04|| *ccg_vbi27_cc_by_osd==0x07|| *ccg_vbi27_cc_by_osd==0x08);
						
					if((g_user_data[rd_idx][i*3+7]&0x03) == 0x00)//NTSC_CC_FIELD_1
					{
						for(j=0;j<8;j++)//pariety check
						{
							if( (((g_user_data[rd_idx][i*3+8])>>j)&0x01) == 0x01) pariety_check_1 += 1;
							if( (((g_user_data[rd_idx][i*3+9])>>j)&0x01) == 0x01) pariety_check_2 += 1;
							//libc_printf("%3x - %3x\n",(g_user_data[rd_idx][i*3+8]),(g_user_data[rd_idx][i*3+9]));
						}
						if( (pariety_check_1 % 2)==0 || (pariety_check_2 % 2)==0 ) continue;

						cc_field=1;
						if(TRUE == ccg_vbi27_pconfig_par->cc_by_vbi && g_disable_vbioutput==FALSE)
							sub_sdhd_write_cc_data(1,(g_user_data[rd_idx][i*3+9]<<8)|g_user_data[rd_idx][i*3+8]); // 1:top, 0:bot
						//ccvbi_CC=TRUE;	
						if(ccg_disable_process_cc==TRUE) 
						{
							//soc_printf("ccrecv_PAC=%d\n",ccrecv_PAC);
							ccrecv_PAC=FALSE;
							//MEMSET(g_user_data[rd_idx],0x00,USER_DATA_LENGTH_MAX);
							//return;
						}	
					
						if(push_1 )//cc1 cc2 tt1 tt2
						{
							if(NULL != g_vbi_priv->vbi_line21_push_by_cc)
							{
								cc_push_field(cc_field);
								g_vbi_priv->vbi_line21_push_by_cc((byte1<<8)|byte2);

						}
					}
//						
						}
					else if((g_user_data[rd_idx][i*3+7]&0x03) == 0x01)//NTSC_CC_FIELD_2
					{
					
						for(j=0;j<8;j++)//pariety check
						{
							if( (((g_user_data[rd_idx][i*3+8])>>j)&0x01) == 0x01) pariety_check_1 += 1;
							if( (((g_user_data[rd_idx][i*3+9])>>j)&0x01) == 0x01) pariety_check_2 += 1;
						}
						if( (pariety_check_1 % 2)==0 || (pariety_check_2 % 2)==0 ) continue;
						
						cc_field=2;
						if(TRUE == ccg_vbi27_pconfig_par->cc_by_vbi && g_disable_vbioutput==FALSE)
							sub_sdhd_write_cc_data(0,(g_user_data[rd_idx][i*3+9]<<8)|g_user_data[rd_idx][i*3+8]); // 1:top, 0:bot
		//ccvbi_CC=TRUE;
						if(ccg_disable_process_cc==TRUE) 
						{
							ccrecv_PAC=FALSE;
							//MEMSET(g_user_data[rd_idx],0x00,USER_DATA_LENGTH_MAX);
							//return;
						}
						
						if(push_2 )//cc3 cc4 tt3 tt4
							if(NULL != g_vbi_priv->vbi_line21_push_by_cc)
							{
								cc_push_field(cc_field);
								g_vbi_priv->vbi_line21_push_by_cc((byte1<<8)|byte2);
					}
						}
					else if((((g_user_data[rd_idx][i*3+7]&0x03) == 0x03) || ((g_user_data[rd_idx][i*3+7]&0x03) == 0x02)) && (g_dtv_cc_service !=0) && (*ccg_vbi27_cc_by_osd==0x00))  //xing 20070522 for DTVCC Packet Start