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

📄 mosaic_parse.c

📁 c语言编的
💻 C
📖 第 1 页 / 共 4 页
字号:
	        	}
	        	/*tag_multi_mask1->next = app_mem_allocate(sizeof(multilingual_text_t));*/
	        	tag_multi_mask1->next = tag_multi_mask;
	        	tag_multi_mask1->next->next = NULL;
	        }
	    }/*end of the while-loop*/
	    
		/* 
	  	 *the 3 is the byte number of the long descriptor tag(1) and it's length(2)
	     */
	  	iNoOfBytesParsed = desc_length + 3;
		
	break;	
	 	   
	case Mosaic_DES:
		desc_length = mosaic_des_data[ 1 ];
	 
	 	mosaic_node_data->x = mosaic_des_data[ 2 ]<<8 | mosaic_des_data[ 3 ];
	 	mosaic_node_data->y = mosaic_des_data[ 4 ]<<8 | mosaic_des_data[ 5 ];
	 	mosaic_node_data->w = mosaic_des_data[ 6 ]<<8 | mosaic_des_data[ 7 ];
	 	mosaic_node_data->h = mosaic_des_data[ 8 ]<<8 | mosaic_des_data[ 9 ];
	 	mosaic_node_data->default_page_id = mosaic_des_data[ 10 ];
	 	mosaic_node_data->default_cell_id = mosaic_des_data[ 11 ];
	 	mosaic_node_data->validate_key_code = mosaic_des_data[ 12 ]<<8 | mosaic_des_data[ 13 ];
	 	mosaic_node_data->mosaic_flag = mosaic_des_data[14];
	 	
	 	
	 	APP_TRACE("\n\n[%d]*****[%d]\n\n", mosaic_node_data->validate_key_code, mosaic_node_data->mosaic_flag);
	 	
	 	if((mosaic_node_data->mosaic_flag & 0x80) == 0)
	 	{
	 	   mosaic_node_data->delay_before_cut = mosaic_des_data[15];
	           mosaic_node_data->total_page_number = mosaic_des_data[ 16 ];
	        }
	 	else
	 	   mosaic_node_data->total_page_number = mosaic_des_data[ 15 ];
	 	
	 	/*
	  	 *the 2 is the byte number of the descriptor tag(1) and it's length(1)
	     */
	  
	 	iNoOfBytesParsed = desc_length + 2;	 
	break;
	    
	case Focus_DES: 
		desc_length = mosaic_des_data[ 1 ];
	 
	 	mosaic_node_data->focus_data.focus_type = mosaic_des_data[ 2 ];
	 	mosaic_node_data->focus_data.corner_type = mosaic_des_data[ 3 ];
	 	mosaic_node_data->focus_data.focus_thickness = mosaic_des_data[ 4 ];
	 	mosaic_node_data->focus_data.focus_color_index = mosaic_des_data[ 5 ];
	 
		iNoOfBytesParsed = desc_length + 2;
	break;  
	    
	case Multilingual_default_font_attributes_DES:
	    desc_length = mosaic_des_data[ 1 ];
	 
	 	/*
	  	 *parse the Multilingual_default_font_attributes_descriptor "not complete"
	  	 */
	 
		iNoOfBytesParsed = desc_length + 2;
    break;   
	    
    /*
	 * the following is the descriptor in page layer 
	 */		   
	case Multilingual_texts_list_DES:          /*long*/
	 	desc_length = mosaic_des_data[ 1 ]<<8 | mosaic_des_data[ 2 ];
	    
	    if(data_source_identifier == PAGE_LAYER_DATA)
	  	{	  		
	  		/*page_node_data->page_texts_list->text_num = 0;
	  		page_node_data->page_texts_list->texts_list = NULL;*/	  		
	  		
	  		mosaic_str_data = mosaic_des_data + 3;
	  		
	  		/*follow is the multilingual_text_lists structure*/	  		
	  		des_data_loop_length = mosaic_str_data[2]<<8 | mosaic_str_data[3];	  		
	  		mosaic_str_data += 4;
	  		
	  		num = 0;
	  		while(des_data_loop_length > 0)
	  		{
	  			tag_texts_list = app_mem_allocate(sizeof(multilingual_texts_list_t));
	  			tag_texts_list->text_num = num;
	  			tag_texts_list->texts_list = NULL;
	  			tag_texts_list->next = NULL;
	  			
	  			/*follow is the multilingual_text structure*/
	  			languages_loop_length = mosaic_str_data[2]<<8 | mosaic_str_data[3];
	  			mosaic_str_data += 4;
	  			
	  			des_data_loop_length = des_data_loop_length - languages_loop_length - 4;
	  			
	  			while(languages_loop_length>0)
				{        	
		        	tag_multi_page = app_mem_allocate(sizeof(multilingual_text_t));
		        	tag_multi_page -> next = NULL;
			        /*
			  		 *parse the multilingual_text structure in the mask descriptor 
			  		 */   		     	
			       	memcpy( (char *)(tag_multi_page->iso_639_language) , (char *)mosaic_str_data , 3);
			       	APP_TRACE("\n the page text language is [%c%c%c]", 
			       	          (char)tag_multi_page->iso_639_language[0], (char)tag_multi_page->iso_639_language[1], (char)tag_multi_page->iso_639_language[2]);
			        
			        text_content_length = mosaic_str_data[ 3 ]<<8 | mosaic_str_data[ 4 ];	        
			        mosaic_str_data += 5;	        
			        tag_multi_page->text_content = NULL;
			        tag_multi_page->text_content = app_mem_allocate(text_content_length + 1);
			        memset ( (char *)(tag_multi_page->text_content) , 0 ,text_content_length + 1);
					memcpy ( (char *)(tag_multi_page->text_content) , (char *)mosaic_str_data , text_content_length);
					APP_TRACE("\n***page text=%s. length=%d\n",tag_multi_page->text_content, text_content_length);
					
					mosaic_str_data += text_content_length;
											
					/* check the default_text_frame and the default_font */
					tag_multi_page->default_mask = mosaic_str_data[0];
					
					i_count = 6;
					block_length = 0;
					if((tag_multi_page->default_mask & 0x80) == 0)/*this bit indicate the default_text_frame*/
					{
						i_count++;
						block_length = mosaic_str_data[1];
						text_frame_data.x = mosaic_str_data[2]<<8 | mosaic_str_data[3];
						text_frame_data.y = mosaic_str_data[4]<<8 | mosaic_str_data[5];
						text_frame_data.w = mosaic_str_data[6]<<8 | mosaic_str_data[7];
						text_frame_data.h = mosaic_str_data[8]<<8 | mosaic_str_data[9];
						text_frame_data.h_alignment = (mosaic_str_data[10] & 0xF0)>>4;
		        		text_frame_data.v_alignment = (mosaic_str_data[10] & 0x0F);
		        		text_frame_data.background_color = mosaic_str_data[11];
		        		text_frame_data.foreground_color = mosaic_str_data[12];
		        		
		        		mosaic_str_data += (block_length + 2);
		        		
						tag_multi_page->text_frame = text_frame_data;
					}			
					if((tag_multi_page->default_mask & 0x40) == 0)/*this bit indicate the default_font*/
					{
						i_count++;
						block_length += mosaic_str_data[0];
						
						/*not complete*/
						
						mosaic_str_data += (mosaic_str_data[0] + 1);
					}
					/*i is the 3(639), 2(text content), 1(default and reserved), other is in the structure*/
			        languages_loop_length = languages_loop_length - text_content_length - block_length - i_count;
			        
			        /*put the data to the multilingual_texts_list node*/
			        if(tag_texts_list->texts_list == NULL)
		        	{
		        		tag_texts_list->texts_list = tag_multi_page;	        
		        		tag_texts_list->texts_list->next = NULL;
		        	}
			        else
			        {
			        	tag_multi_page1 = tag_texts_list->texts_list;
				        while(1)
			        	{
			        		if(tag_multi_page1->next == NULL)
			        			break;
			        		else
			        			tag_multi_page1 = tag_multi_page1->next;
			        	}
			        	/*tag_multi_page1->next = app_mem_allocate(sizeof(multilingual_text_t));*/
			        	tag_multi_page1->next = tag_multi_page;
			        	tag_multi_page1->next->next = NULL;
			        }
			       	
			    }/*end of the while-loop parse multilingual_text*/	  				  			
	  			
	  			/*put the data to the page node*/
		        if(page_node_data->page_texts_list == NULL)
	        	{
	        		page_node_data->page_texts_list = tag_texts_list;
	        		page_node_data->page_texts_list->next = NULL;
	        		/*page_node_data->page_texts_list->texts_list = NULL;*/
	        	}
		        else
		        {
		        	tag_texts_list1 = page_node_data->page_texts_list;
			        while(1)
		        	{
		        		if(tag_texts_list1->next == NULL)
		        			break;
		        		else
		        			tag_texts_list1 = tag_texts_list1->next;
		        	}
		        	/*tag_texts_list1->next = app_mem_allocate(sizeof(multilingual_texts_list_t));*/
		        	tag_texts_list1->next = tag_texts_list;
		        	tag_texts_list1->next->next = NULL;
		        }
		        
		        /*page_node_data->page_texts_list->text_num++;*/
		        num++;
		        
	  		}/*end of the while-loop parse multilingual_texts_list*/
	  		
	  		/*error = ms_add_multilingual_texts_list(page_node_data,
	  		                                       tag_texts_list);	  		
	  		APP_TRACE("\n****************this page have text lists***************** \n");
	  		*/
	  	}
	  	
	    iNoOfBytesParsed = desc_length + 3;
    break;
    
	case Multilingual_background_picture_DES:
		
		picture_tag.next = NULL;
		
		desc_length = mosaic_des_data[ 1 ];
	    page_node_data->background_type = 0x01;
	    
	    languages_loop_length = mosaic_des_data[3];
	    
	    memcpy( (char *)(picture_tag.iso_639_language) , (char *)(mosaic_str_data + 4) , 3);
       	APP_TRACE("\n the language of this background is [%c%c%c]", 
       	          (char)picture_tag.iso_639_language[0], (char)picture_tag.iso_639_language[1], (char)picture_tag.iso_639_language[2]);
	    
	    picture_tag.background_color = mosaic_des_data[ 7 ];
	    picture_tag.x = mosaic_des_data[ 8 ]<<8 | mosaic_des_data[ 9 ];
	    picture_tag.y = mosaic_des_data[ 10 ]<<8 | mosaic_des_data[ 11 ];
	    picture_tag.w = mosaic_des_data[ 12 ]<<8 | mosaic_des_data[ 13 ];
	    picture_tag.h = mosaic_des_data[ 14 ]<<8 | mosaic_des_data[ 15 ];
	    picture_tag.protocol_type = mosaic_des_data[ 16 ];
	    
	    page_node_data->possible_background_type.picture_tag = picture_tag;  
	    
	    mosaic_str_data = mosaic_des_data + 17;
	    if( picture_tag.protocol_type == 0x01)
	    {
	    	block_length = mosaic_str_data[ 0 ];
	        private_data.remote_flag = ( mosaic_str_data[ 1 ] & 0xC0 )>>6;
	    	
	    	if( private_data.remote_flag == 0x00 )
	      	{
	      		private_data.picture_table_id = mosaic_str_data[ 3 ];
            	private_data.picture_id = mosaic_str_data[ 4 ]<<8 | mosaic_str_data[ 5 ];
	      	}
	    	else if( private_data.remote_flag == 0x01 )
            {
            	private_data.on_id = mosaic_str_data[ 2 ]<<8 | mosaic_str_data[ 3 ];
            	private_data.ts_id = mosaic_str_data[ 4 ]<<8 | mosaic_str_data[ 5 ];
            	private_data.service_id = mosaic_str_data[ 6 ]<<8 | mosaic_str_data[ 7 ];
            	private_data.picture_table_id = mosaic_str_data[ 9 ];
            	private_data.picture_id = mosaic_str_data[ 10 ]<<8 | mosaic_str_data[ 11 ];
            }
            else if( private_data.remote_flag == 0x02 )
            {
            	private_data.service_id = mosaic_str_data[ 2 ]<<8 | mosaic_str_data[ 3 ];
            	private_data.picture_table_id = mosaic_str_data[ 5 ];
            	private_data.picture_id = mosaic_str_data[ 6 ]<<8 | mosaic_str_data[ 7 ]; 
            }
            page_node_data->possible_background_type.picture_tag.possible_protocol_type.private_data = private_data;
	     }
	    if( picture_tag.protocol_type == 0x02)
	    {
		    /*Not used*/
	    }
#if 0
	    mosaic_des_data = mosaic_des_data + block_length + 1;
	    languages_loop_length = languages_loop_length - block_length - 1 - 13;
	    while(languages_loop_length > 0)
	    {
	    	pic = app_mem_allocate(sizeof(picture_t));
	    	pic->next = NULL;
	    	
    		memcpy( (char *)(pic->iso_639_language) , (char *)mosaic_str_data , 3);
	       	APP_TRACE("\n the language of this background is [%c%c%c]", 
	       	          (char)pic->iso_639_language[0], (char)pic->iso_639_language[1], (char)pic->iso_639_language[2]);
	    
		    pic->background_color = mosaic_des_data[3];
		    pic->x = mosaic_des_data[4]<<8 | mosaic_des_data[5];
		    pic->y = mosaic_des_data[6]<<8 | mosaic_des_data[7];
		    pic->w = mosaic_des_data[7]<<8 | mosaic_des_data[9];
		    pic->h = mosaic_des_data[10]<<8 | mosaic_des_data[11];
		    pic->protocol_type = mosaic_des_data[12];
		    
		    mosaic_str_data = mosaic_des_data + 13;
		    if(pic->protocol_type == 0x01)
		    {
		    	block_length = mosaic_str_data[ 0 ];
		        private_data.remote_flag = ( mosaic_str_data[ 1 ] & 0xC0 )>>6;
		    	
		    	if(private_data.remote_flag == 0x00)
		      	{
		      		private_data.picture_table_id = mosaic_str_data[ 3 ];
	            	private_data.picture_id = mosaic_str_data[ 4 ]<<8 | mosaic_str_data[ 5 ];
		      	}
		    	else if(private_data.remote_flag == 0x01)
	            {
	            	private_data.on_id = mosaic_str_data[ 2 ]<<8 | mosaic_str_data[ 3 ];
	            	private_data.ts_id = mosaic_str_data[ 4 ]<<8 | mosaic_str_data[ 5 ];
	            	private_data.service_id = mosaic_str_data[ 6 ]<<8 | mosaic_str_data[ 7 ];
	            	private_data.picture_table_id = mosaic_str_data[ 9 ];
	            	private_data.picture_id = mosaic_str_data[ 10 ]<<8 | mosaic_str_data[ 11 ];
	            }
	            else if(private_data.remote_flag == 0x02)
	            {
	            	private_data.service_id = mosaic_str_data[ 2 ]<<8 | mosaic_str_data[ 3 ];
	            	private_data.picture_table_id = mosaic_str_data[ 5 ];
	            	private_data.picture_id = mosaic_str_data[ 6 ]<<8 | mosaic_str_data[ 7 ]; 
	            }
	            pic->possible_protocol_type.private_data = private_data;
		     }
		    if( pic->protocol_type == 0x02)
		    {
				/*Not used*/
		    }
	       	
	       	mosaic_des_data = mosaic_des_data + block_length + 1;
	        languages_loop_length = languages_loop_length - block_length - 1 - 13;
	       	
	       	/*put the data to the picture list*/
	        if(picture_tag.next == NULL)
        	{
        		picture_tag.next = pic;
        	}
	        else
	        {
	        	pic1 = picture_tag.next;
		        while(1)
	        	{
	        		if(pic1->next == NULL)
	        			break;
	        		else
	        			pic1 = pic1->next;
	        	}
	        	pic1->next = pic;
	        	pic1->next->next = NULL;
	        }
	        
	    }/*end of the while-loop*/
#endif
	    iNoOfBytesParsed = desc_length + 2;
	break;
	    
    case Video_stream_locator_DES:
		desc_length = mosaic_des_data[ 1 ];
	  
	    block_length = parse_mosaic_structure( Stream_locator_STR,
	                                           &mosaic_des_data[ 2 ],
	                                           data_source_identifier,
	                                           1 );
	   
	    iNoOfBytesParsed = desc_length + 2;
	break;   
	 	
    case Multilingual_display_area_DES:
    	desc_length = mosaic_des_data[ 1 ];
    	
    	APP_TRACE("\n************the type is =[%x]*************\n",mosaic_des_data[ 2 ]);
    	
    	page_node_data->info_position[page_node_data->info_dis_area_num].dis_type = mosaic_des_data[ 2 ];
	    languages_loop_length = mosaic_des_data[ 3 ];
	    
	    mosaic_str_data = mosaic_des_data + 4;
	    
	    page_node_data->info_position[page_node_data->info_dis_area_num].data_list = NULL;
		
		while(languages_loop_length>0)
		{        	
        	tag_info_data = app_mem_allocate(sizeof(info_dis_area_data_t));
        	tag_info_data -> next = NULL;
	        /*
	  		 *parse the multilingual_text structure in the mask descriptor 
	  		 */   		     	
	       	memcpy( (char *)(tag_info_data->iso_639_language) , (char *)mosaic_str_data , 3);
	       	APP_TRACE("\n the page info area language is [%c%c%c]", 
	       	          (char)tag_info_data->iso_639_language[0], (char)tag_info_data->iso_639_language[1], (char)tag_info_data->iso_639_language[2]);
	        	        	        
	        mosaic_str_data += 3;
	        
			/* check the default_text_frame and the default_font */
			tag_info_data->default_mask = mosaic_str_data[0];
			
			i_count = 4;
			block_length = 0;
			if((tag_info_data->default_mask & 0x80) == 0)/*this bit indicate the default_text_frame*/
			{

⌨️ 快捷键说明

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