📄 mosaic_parse.c
字号:
}
/*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 + -