⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jpg_header.c

📁 凌阳SPCE3200 系统开发板随机自带源程序。共安排了32个子目录
💻 C
📖 第 1 页 / 共 2 页
字号:

	  if(index == 0)
	  {
			cw[index] = 0;
			if(pcount[0] == 1) 
		  		l_codeword = 1;
			else 
				l_codeword=0; 
	  }
	  else if(index <= last_valid)
	  {
		  if(0 == cs[index]) 
		  {
				l_codeword=  0;
		  }
		  l_codeword = l_codeword << 1;
		  cw[index] = l_codeword;
		  l_codeword = l_codeword + pcount[index];
	  }
	  else
	  {
			cw[index] = 0xffff;
	  }
	}  
}
/////////////////////////////////////////////////////////////////////////
void fill_huffman_reg(unsigned char *jpg_ptr)
{
	unsigned int length,counter,i,index;
	unsigned char word;
	unsigned char *pointer;
	unsigned char *temp_pointer;
	unsigned int cw[16];
	unsigned char cs[16];
	unsigned char cv[256];
	
	length=get_jpg_segment_length(jpg_ptr);
	
	if(length == 0x1A2)
	{
		counter=3;
		pointer=jpg_ptr+3;
		
		for(index=0;index<4;index++)
		{	
			for(i=0;i<16;i++)
			{
				cw[i]=0;
				cs[i]=0;
			}
			for(i=0;i<256;i++)
			{	
				cv[i]=0;
			}
		
			Get_Huffman_cs_cw(cs,cw,pointer);
				
			word =*(pointer-1);					// Get Huffman table type
			temp_pointer = pointer + 16;		// Shift to the starting point of DiffDC_length or <R,V_length>
			
			set_Huff_sram_mode(8);				// Set TSramMode =CPU R/W TSRAM Regs and JPEG Decoding
			set_jpg_huffman_cw_reg(word,cw);

			if(word==0x00)
			{	
				length = 0x1c;
				set_jpg_huffman_dcs_reg(0,cs);
		   		for(i=0; i<16; i++)
				{
					word =*temp_pointer;
					cv[i] = word;
					temp_pointer++;
				}   
				set_jpg_huffman_dcv_reg(0,cv); 
			}//YDC
			else if(word==0x01)
			{
				length = 0x1c;
				set_jpg_huffman_dcs_reg(1,cs); 
		  		for(i=0; i<16; i++)
				{
					word =*temp_pointer;
					cv[i] = word;
					temp_pointer++;
				}  
				set_jpg_huffman_dcv_reg(1,cv); 
			}//CDC
			else if(word==0x10)
			{
				length = 0xb2;
				set_jpg_huffman_acs_reg(0,cs); 
		   		for(i=0; i<(0x40*3); i++)
		 		{
					word =*temp_pointer;
					cv[i] = word;
					temp_pointer++;
				}    
				set_jpg_huffman_acv_sram(0,cv);	
			}//YAC
			else if(word==0x11)
			{
				length = 0xb2;
				set_jpg_huffman_acs_reg(1,cs); 
		  		for(i=0; i<(0x40*3); i++)
				{
					word =*temp_pointer;
					cv[i] = word;
					temp_pointer++;
				}  
				set_jpg_huffman_acv_sram(1,cv);	
			}//CAC
			
			pointer=pointer+(length+1);
			counter=counter+(length+1);
		}
	}
	else
	{
		counter=3;
		pointer=jpg_ptr+3;
	
		for(i=0;i<16;i++)
		{
			cw[i]=0;
			cs[i]=0;
		}
		for(i=0;i<256;i++)
		{	
			cv[i]=0;
		}
	
		Get_Huffman_cs_cw(cs,cw,pointer);
			
		word =*(pointer-1);					// Get Huffman table type
		temp_pointer = pointer + 16;		// Shift to the starting point of DiffDC_length or <R,V_length>
		
		set_Huff_sram_mode(8);				// Set TSramMode =CPU R/W TSRAM Regs and JPEG Decoding
		set_jpg_huffman_cw_reg(word,cw);
			
		if(word==0x00)	   
		{
			set_jpg_huffman_dcs_reg(0,cs);
	   		for(i=0; i<16; i++)
			{
				word =*temp_pointer;
				cv[i] = word;
				temp_pointer++;
			}   
			set_jpg_huffman_dcv_reg(0,cv); 
		}//YDC
		else if(word==0x01)
		{ 
			set_jpg_huffman_dcs_reg(1,cs); 
	  		for(i=0; i<16; i++)
			{
				word =*temp_pointer;
				cv[i] = word;
				temp_pointer++;
			}  
			set_jpg_huffman_dcv_reg(1,cv); 
		}//CDC
		else if(word==0x10)
		{ 
			set_jpg_huffman_acs_reg(0,cs); 
	   		for(i=0; i<(0x40*3); i++)
	 		{
				word =*temp_pointer;
				cv[i] = word;
				temp_pointer++;
			}    
			set_jpg_huffman_acv_sram(0,cv);	
		}//YAC
		else if(word==0x11)
		{ 
			set_jpg_huffman_acs_reg(1,cs); 
	  		for(i=0; i<(0x40*3); i++)
			{
				word =*temp_pointer;
				cv[i] = word;
				temp_pointer++;
			}  
			set_jpg_huffman_acv_sram(1,cv);	
		}//CAC
		pointer=pointer+(length-3);
		counter=counter+(length-3);
	}
}
////////////////////////////////////////////////////////////////////////////////////////
void set_jpg_huffman_cw_reg(unsigned char htype,unsigned int *cw)
{

	unsigned int i,temp1;
	unsigned int *pointer;
 
	if(htype==0x00)
		pointer=(unsigned int *)P_MPEG4_HUFFMAN_START;
	else if(htype==0x01)
		pointer=(unsigned int *)P_MPEG4_CHROMDCCODE_START;
	else if(htype==0x10)
		pointer=(unsigned int *)P_MPEG4_LUMACHUFFMANTABLE_START;
	else if(htype==0x11)
		pointer=(unsigned int *)P_MPEG4_CHROMACHUFFMANTABLE_START;

	for(i=0;i<8;i++)
	{
		*pointer=cw[i];
		pointer++;
		#ifdef PRINT_JPG_HEADER_INFO
			if(htype==0x00)
				{print2("ydcw : ",0,cw[i]);} 
			else if(htype==0x01)
				{print2("cdcw : ",0,cw[i]);} 
			else if(htype==0x10)
				{print2("yacw : ",0,cw[i]);} 
			else if(htype==0x11)
				{print2("cacw : ",0,cw[i]);} 
		#endif
	}

	for(i=8;i<16;i++)
	{
		*pointer=cw[i];
		pointer++;
		
		temp1=cw[i]>>8;
		*pointer=temp1;
		pointer++;
		#ifdef PRINT_JPG_HEADER_INFO
			if(htype==0x00){print2("ydcw : ",0,cw[i]);} 
			else if(htype==0x01){print2("cdcw : ",0,cw[i]);} 
			else if(htype==0x10){print2("yacw : ",0,cw[i]);} 
			else if(htype==0x11){print2("cacw : ",0,cw[i]);} 
		#endif
	}

#ifdef PRINT_JPG_HEADER_INFO
print1("---------------------------\n");
#endif
}
/////////////////////////////////////////////////////////////////////
void set_jpg_huffman_acs_reg(int chrominance,unsigned char *cs)
{
	unsigned int i;//,j;
	//unsigned int data[2];
	unsigned int *pointer;
	 
	if(chrominance==0)	
	{
		pointer=(unsigned int *)P_MPEG4_LUMACHUFFMANOFFSET_SA;
	}
	else
	{
		pointer=(unsigned int *)P_MPEG4_CHROMACHUFFMANOFFSET_SA;
	} 
	
	for(i=0;i<16;i++)
	{
		//j=i*2;
		//data[1]=(unsigned int)cs[j+1];
		//data[0]=(unsigned int)cs[j];
		//data[1]=data[1]<<8;
		//*pointer=data[0]+data[1];
		*pointer=(unsigned int)cs[i];
		pointer++;
		#ifdef PRINT_JPG_HEADER_INFO
		if(chrominance==0)
			{print2("yacs : ",0,cs[i]);} 
		else {print2("cacs : ",0,cs[i]);} 
		#endif
	}
	
	#ifdef PRINT_JPG_HEADER_INFO
	print1("---------------------------\n");
	#endif
}
/////////////////////////////////////////////////////////////////////
void set_jpg_huffman_dcs_reg(int chrominance,unsigned char *cs){
unsigned int i,j;
unsigned int data[2];
unsigned int *pointer;
 
	if(chrominance==0)	
		{pointer=(unsigned int *)P_MPEG4_LUMOFFSET_SA;} 
	else
		{pointer=(unsigned int *)P_MPEG4_CHROMOFFSET_SA;} 
		
	for(i=0;i<8;i++)
	{
		j=i*2;
		data[1]=(unsigned int)cs[j+1];
		data[0]=(unsigned int)cs[j];
		data[1]=data[1]&0x0000000f;
		data[1]=data[1]<<4;
		data[0]=data[0]&0x0000000f;
		*pointer=data[0]+data[1];
		
		pointer++;
		#ifdef PRINT_JPG_HEADER_INFO
		if(chrominance==0)
		{ 
			print2("ydcs low byte: ",0,data[0]);
			print2("ydcs high byte: ",0,data[1]);
		}
		else 
		{
			print2("cdcs low byte: ",0,data[0]);
			print2("cdcs high byte: ",0,data[1]);
		} 
		#endif
	
}
#ifdef PRINT_JPG_HEADER_INFO
print1("---------------------------\n");
#endif
}

/////////////////////////////////////////////////////////////////////

void set_jpg_huffman_dcv_reg(int chrominance ,unsigned char *cv)
{
	unsigned int *pointer;
	unsigned int i,j;
	unsigned int data[2];
	unsigned int *port;
	port = 0x88220940;
	
	if(chrominance==0)	
		{pointer=(unsigned int *)P_MPEG4_LUMHUFFMANTABLE_START ;}
	else 				
		{pointer=(unsigned int *)port;}     ////////////////////////////

	for(i=0;i<8;i++)
	{
		j=i*2;
		data[1]=(unsigned int)(cv[j+1]&0x000f);
		data[0]=(unsigned int)(cv[j]&0x000f);
		data[1]=data[1]<<4;
		*pointer=data[0]+data[1];
		pointer++;
		#ifdef PRINT_JPG_HEADER_INFO
		if(chrominance==0)
		{ 
			print2("ydcv low byte: ",0,data[0]);
			print2("ydcv high byte: ",0,data[1]);
		}
		else 
		{	print2("cdcv low byte: ",0,data[0]);
			print2("cdcv high byte: ",0,data[1]);
		} 
		#endif
	}
#ifdef PRINT_JPG_HEADER_INFO
print1("---------------------------\n");
#endif
}
/////////////////////////////////////////////////////////////////////
void set_jpg_huffman_acv_sram(int chrominance,unsigned char *cv)
{
	unsigned int Huffman_SRAM_Page;
	unsigned int *pointer;
	unsigned int j,i,k;
	if(chrominance==0) 
		{Huffman_SRAM_Page=0;}
	else
		{Huffman_SRAM_Page=4;}
	
	for(j=0;j<4;j++)
	{
		set_Huff_sram_mode(Huffman_SRAM_Page);
		#ifdef PRINT_JPG_HEADER_INFO
			print2("Huffman SRAM Page = ",0,Huffman_SRAM_Page);
		#endif
		pointer=(unsigned int *)P_MPEG4_LUMDCCODE_START;
		k=j*64;
		for(i=0;i<64;i++)
		{
			*pointer=(unsigned int)cv[k];
			pointer++;
			#ifdef PRINT_JPG_HEADER_INFO
				print2("YACV/CACV = ",0,cv[k]);
			#endif
			k++;
		}
	 	Huffman_SRAM_Page++;
	 	#ifdef PRINT_JPG_HEADER_INFO
print1("---------------------------\n");
#endif
	}
	
	set_Huff_sram_mode(8);
}
/////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -