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

📄 lsr_enc.c

📁 一个用于智能手机的多媒体库适合S60 WinCE的跨平台开发库
💻 C
📖 第 1 页 / 共 5 页
字号:
			GF_LSR_WRITE_INT(lsr, LSR_EVT_mousemove, 6, "event"); break;				case GF_EVENT_MOUSEOUT: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_mouseout, 6, "event"); break;		case GF_EVENT_MOUSEOVER: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_mouseover, 6, "event"); break;		case GF_EVENT_MOUSEUP: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_mouseup, 6, "event"); break;		case GF_EVENT_PAUSE: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_pause, 6, "event"); break;		case GF_EVENT_PAUSED_EVENT: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_pausedEvent, 6, "event"); break;		case GF_EVENT_PLAY: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_play, 6, "event"); break;		case GF_EVENT_REPEAT_EVENT: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_repeatEvent, 6, "event"); break;		case GF_EVENT_REPEAT_KEY: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_repeatKey, 6, "event"); break;		case GF_EVENT_RESIZE: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_resize, 6, "event"); break;		case GF_EVENT_RESUME_EVENT: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_resumedEvent, 6, "event"); break;		case GF_EVENT_SCROLL: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_scroll, 6, "event"); break;		case GF_EVENT_SHORT_ACCESSKEY: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_shortAccessKey, 6, "event"); break;		case GF_EVENT_TEXTINPUT: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_textinput, 6, "event"); break;		case GF_EVENT_UNLOAD: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_unload, 6, "event"); break;		case GF_EVENT_ZOOM: 			GF_LSR_WRITE_INT(lsr, LSR_EVT_zoom, 6, "event"); break;		default:			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] Unsupported LASER event %d\n", evtType) );			GF_LSR_WRITE_INT(lsr, 0, 6, "event"); break;			return;		}		switch (evtType) {		case GF_EVENT_KEYDOWN:			if (!evtParam) break;		case GF_EVENT_LONGKEYPRESS:		case GF_EVENT_REPEAT_KEY:		case GF_EVENT_SHORT_ACCESSKEY:			lsr_write_vluimsbf5(lsr, dom_to_lsr_key(evtParam), "keyCode");			break;		}	}}static void lsr_write_smil_time(GF_LASeRCodec *lsr, SMIL_Time *t){	s32 now;	if (t->type==GF_SMIL_TIME_EVENT) {		GF_LSR_WRITE_INT(lsr, 1, 1, "hasEvent");		if (t->element && gf_node_get_id((GF_Node*)t->element) ) {			XMLRI iri;			GF_LSR_WRITE_INT(lsr, 1, 1, "hasIdentifier");			iri.string = NULL;			iri.type = XMLRI_ELEMENTID;			iri.target =  t->element;			lsr_write_codec_IDREF(lsr, &iri, "idref");		} else {			GF_LSR_WRITE_INT(lsr, 0, 1, "hasIdentifier");		}		lsr_write_event_type(lsr, t->event.type, t->event.parameter);	} else {		GF_LSR_WRITE_INT(lsr, 0, 1, "hasEvent");	}	if (!t->clock) {		GF_LSR_WRITE_INT(lsr, 0, 1, "hasClock");		return;	}	GF_LSR_WRITE_INT(lsr, 1, 1, "hasClock");	now = (s32) (t->clock * lsr->time_resolution);	if (now<0) {		now = -now;		GF_LSR_WRITE_INT(lsr, 1, 1, "sign");	} else {		GF_LSR_WRITE_INT(lsr, 0, 1, "sign");	}	lsr_write_vluimsbf5(lsr, now, "value");}static void lsr_write_smil_times(GF_LASeRCodec *lsr, GF_List **l, const char *name, Bool skipable){	SMIL_Time *v;	u32 r_count, i, count;	Bool indef = 0;	count = l ? gf_list_count(*l) : 0;	r_count = 0;	for (i=0; i<count; i++) {		v = (SMIL_Time*)gf_list_get(*l, i);		if (v->type==GF_SMIL_TIME_INDEFINITE) {			indef = 1;			break;		}		else if (v->type!=GF_SMIL_TIME_EVENT_RESOLVED) r_count++;	}	if (skipable && !r_count && !indef) {		GF_LSR_WRITE_INT(lsr, 0, 1, name);		return;	}	if (skipable) GF_LSR_WRITE_INT(lsr, 1, 1, name);	GF_LSR_WRITE_INT(lsr, indef, 1, "choice");	if (indef) return;	lsr_write_vluimsbf5(lsr, r_count, "count");	for (i=0; i<count; i++) {		v = (SMIL_Time*)gf_list_get(*l, i);		lsr_write_smil_time(lsr, v);	}}static void lsr_write_duration_ex(GF_LASeRCodec *lsr, SMIL_Duration *v, const char *name, Bool skipable){	if (skipable) {		if (!v || !v->type) {			GF_LSR_WRITE_INT(lsr, 0, 1, name);			return;		}		GF_LSR_WRITE_INT(lsr, 1, 1, name);	}	if (v->type==SMIL_DURATION_DEFINED) {		s32 now = (s32) (v->clock_value * lsr->time_resolution);		GF_LSR_WRITE_INT(lsr, 0, 1, "choice");		GF_LSR_WRITE_INT(lsr, (now<0) ? 1 : 0, 1, "sign");		if (now<0) now = -now;		lsr_write_vluimsbf5(lsr, now, "value");	} else {		GF_LSR_WRITE_INT(lsr, 1, 1, "choice");		GF_LSR_WRITE_INT(lsr, v->type, 2, "time");	}}#define lsr_write_duration(a, b, c) lsr_write_duration_ex(a, b, c, 1)static void lsr_write_focus(GF_LASeRCodec *lsr, SVG_Focus *foc, const char *name){	if (foc->type==SVG_FOCUS_IRI) {		GF_LSR_WRITE_INT(lsr, 0, 1, "isEnum");		lsr_write_codec_IDREF(lsr, &foc->target, "id");	} else {		GF_LSR_WRITE_INT(lsr, 1, 1, "isEnum");		GF_LSR_WRITE_INT(lsr, foc->type, 1, "enum");	}}static Bool lsr_elt_has_same_base(GF_LASeRCodec *lsr, SVGAllAttributes *atts, SVG_Element *base, Bool *same_fill, Bool *same_stroke, Bool no_stroke_check){	SVGAllAttributes base_atts;	GF_FieldInfo info, base_info;	if (same_stroke) *same_stroke = 0;	if (same_fill) *same_fill = 0;	if (!base) return 0;	gf_svg_flatten_attributes(base, &base_atts);	if (atts->externalResourcesRequired != base_atts.externalResourcesRequired) return 0;	info.fieldType = base_info.fieldType = SVG_Paint_datatype;	info.far_ptr = atts->stroke;	base_info.far_ptr = base_atts.stroke;	/*check stroke color*/	if (!gf_svg_attributes_equal(&info, &base_info)) {		if (!no_stroke_check) return 0;	} else {		if (same_stroke) *same_stroke = 1;	}	if (same_fill) {		info.fieldType = base_info.fieldType = SVG_Paint_datatype;		info.far_ptr = atts->fill;		base_info.far_ptr = base_atts.fill;		/*check stroke color*/		*same_fill = gf_svg_attributes_equal(&info, &base_info) ? 1 : 0;	}	switch (gf_node_get_tag((GF_Node*) base)) {	/*check path length*/	case TAG_SVG_path:		info.fieldType = base_info.fieldType = SVG_Number_datatype;		info.far_ptr = atts->pathLength;		base_info.far_ptr = base_atts.pathLength;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;		break;	/*check rx and ry for rect*/	case TAG_SVG_rect:		info.fieldType = base_info.fieldType = SVG_Length_datatype;		info.far_ptr = atts->rx;		base_info.far_ptr = base_atts.rx;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;				info.fieldType = base_info.fieldType = SVG_Length_datatype;		info.far_ptr = atts->ry;		base_info.far_ptr = base_atts.ry;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;		break;	/*check x and y for use*/	case TAG_SVG_use:		info.fieldType = base_info.fieldType = SVG_Coordinate_datatype;		info.far_ptr = atts->x;		base_info.far_ptr = base_atts.x;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;				info.fieldType = base_info.fieldType = SVG_Coordinate_datatype;		info.far_ptr = atts->y;		base_info.far_ptr = base_atts.y;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;		break;	/*check editable and rotate for text*/	case TAG_SVG_text:		info.fieldType = base_info.fieldType = SVG_Boolean_datatype;		info.far_ptr = atts->editable;		base_info.far_ptr = base_atts.editable;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;		info.fieldType = base_info.fieldType = SVG_Numbers_datatype;		info.far_ptr = atts->text_rotate;		base_info.far_ptr = base_atts.text_rotate;		if (!gf_svg_attributes_equal(&info, &base_info)) return 0;		break;	}	return gf_lsr_same_rare(atts, &base_atts);}static Bool lsr_float_list_equal(GF_List *l1, GF_List *l2){	u32 i, count = gf_list_count(l1);	if (count != gf_list_count(l2)) return 0;	for (i=0;i<count;i++) {		Fixed *v1 = (Fixed *)gf_list_get(l1, i);		Fixed *v2 = (Fixed *)gf_list_get(l2, i);		if (*v1 != *v2) return 0;	}	return 1;}static void lsr_write_rare(GF_LASeRCodec *lsr, GF_Node *n){	u32 i, nb_rare;	s32 field_rare;	SVGAttribute *att;	nb_rare = 0;	att = ((SVG_Element*)n)->attributes;	while (att) {		field_rare = gf_lsr_rare_type_from_attribute(att->tag);		if (field_rare>=0) nb_rare++;		att = att->next;	}	GF_LSR_WRITE_INT(lsr, nb_rare ? 1 : 0, 1, "has_rare");	if (!nb_rare) return;	GF_LSR_WRITE_INT(lsr, nb_rare, 6, "nbOfAttributes");	att = ((SVG_Element*)n)->attributes;	while (att) {		field_rare = gf_lsr_rare_type_from_attribute(att->tag);		if (field_rare==-1) {			att = att->next;			continue;		}		/*RARE extension*/		if (field_rare==49) {			Bool is_string = 0;			u32 size, cur_bits;			u32 len = 2+3;			switch (att->tag) {			case TAG_SVG_ATT_syncMaster: len +=1; break;			case TAG_SVG_ATT_requiredFonts: 				len += 8*strlen(*(SVG_String*)att->data);				/*get vluimsbf5 field size with one extra word (4 bits, enough to code string alignment)*/				size = lsr_get_vluimsbf5_size(len, 1);				cur_bits = gf_bs_get_bit_position(lsr->bs) + lsr->info->cfg.extensionIDBits + size + 5;				/*count string alignment*/				while (cur_bits%8) {					len++;					cur_bits++;				}				is_string = 1;				break;			default: len +=2; break;			}			GF_LSR_WRITE_INT(lsr, 49, 6, "attributeRARE");			GF_LSR_WRITE_INT(lsr, 2, lsr->info->cfg.extensionIDBits, "extensionID");			if (is_string) {				lsr_write_vluimsbf5_ex(lsr, len, 1, "len");			} else {				lsr_write_vluimsbf5(lsr, len, "len");			}			GF_LSR_WRITE_INT(lsr, 1, 2, "nbOfAttributes");				switch (att->tag) {			case TAG_SVG_ATT_syncMaster: 				GF_LSR_WRITE_INT(lsr, 0, 3, "attributeRARE");				GF_LSR_WRITE_INT(lsr, *(SVG_Boolean *)att->data ? 1 : 0, 1, "syncMaster");				break;			case TAG_SVG_ATT_focusHighlight: 				GF_LSR_WRITE_INT(lsr, 1, 3, "attributeRARE");				GF_LSR_WRITE_INT(lsr, *(SVG_FocusHighlight*)att->data, 2, "focusHighlight");				break;			case TAG_SVG_ATT_initialVisibility: 				GF_LSR_WRITE_INT(lsr, 2, 3, "attributeRARE");				GF_LSR_WRITE_INT(lsr, *(SVG_InitialVisibility*)att->data, 2, "initialVisibility");				break;			case TAG_SVG_ATT_fullscreen: 				GF_LSR_WRITE_INT(lsr, 3, 3, "attributeRARE");				GF_LSR_WRITE_INT(lsr, *(SVG_Boolean *)att->data ? 1 : 0, 2, "fullscreen");				break;			case TAG_SVG_ATT_requiredFonts: 				GF_LSR_WRITE_INT(lsr, 4, 3, "attributeRARE");				lsr_write_byte_align_string(lsr, *(SVG_String*)att->data, "requiredFonts");				break;			}			GF_LSR_WRITE_INT(lsr, 0, 1, "hasNextExtension");			att = att->next;			continue;		}			GF_LSR_WRITE_INT(lsr, (u32)field_rare, 6, "attributeRARE");		switch (att->tag) {		case TAG_SVG_ATT__class: lsr_write_byte_align_string(lsr, *(SVG_String *)att->data, "class"); break;		case TAG_SVG_ATT_audio_level: lsr_write_fixed_clamp(lsr, ((SVG_Number *) att->data)->value, "audio-level"); break;	    case TAG_SVG_ATT_color: lsr_write_paint(lsr, (SVG_Paint*) att->data, "color"); break;		case TAG_SVG_ATT_color_rendering: GF_LSR_WRITE_INT(lsr, *(SVG_RenderingHint*)att->data, 2, "color-rendering"); break;		case TAG_SVG_ATT_display: GF_LSR_WRITE_INT(lsr, *(SVG_Display*)att->data, 5, "display"); break;	    case TAG_SVG_ATT_display_align: GF_LSR_WRITE_INT(lsr, *(SVG_DisplayAlign*)att->data, 3, "display-align"); break;		case TAG_SVG_ATT_fill_opacity: lsr_write_fixed_clamp(lsr, ((SVG_Number *)att->data)->value, "fill-opacity"); break;	    case TAG_SVG_ATT_fill_rule: GF_LSR_WRITE_INT(lsr, *(SVG_FillRule*)att->data, 2, "fill-rule"); break;		case TAG_SVG_ATT_image_rendering: GF_LSR_WRITE_INT(lsr, *(SVG_RenderingHint*)att->data, 2, "image-rendering"); break;		case TAG_SVG_ATT_line_increment: lsr_write_line_increment_type(lsr, (SVG_Number*)att->data, "lineIncrement"); break;	    case TAG_SVG_ATT_pointer_events: GF_LSR_WRITE_INT(lsr, *(SVG_PointerEvents*)att->data, 4, "pointer-events"); break;		case TAG_SVG_ATT_shape_rendering: GF_LSR_WRITE_INT(lsr, *(SVG_RenderingHint*)att->data, 3, "shape-rendering"); break;	    case TAG_SVG_ATT_solid_color: lsr_write_paint(lsr, (SVG_Paint*)att->data, "solid-color"); break;		case TAG_SVG_ATT_solid_opacity: lsr_write_fixed_clamp(lsr, ((SVG_Number *)att->data)->value, "solid-opacity"); break;	    case TAG_SVG_ATT_stop_color: lsr_write_paint(lsr, (SVG_Paint*)att->data, "stop-color"); break;		case TAG_SVG_ATT_stop_opacity: lsr_write_fixed_clamp(lsr, ((SVG_Number *)att->data)->value, "stop-opacity"); break;		case TAG_SVG_ATT_stroke_dasharray:  		{			u32 j;			SVG_StrokeDashArray *da = (SVG_StrokeDashArray*)att->data;			if (da->type==SVG_STROKEDASHARRAY_INHERIT) {				GF_LSR_WRITE_INT(lsr, 1, 1, "dashArray");			} else {				GF_LSR_WRITE_INT(lsr, 0, 1, "dashArray");				lsr_write_vluimsbf5(lsr, da->array.count, "len");		        for (j=0; j<da->array.count; j++) {		            lsr_write_fixed_16_8(lsr, da->array.vals[j], "dash");				}			}		}			break;		case TAG_SVG_ATT_stroke_dashoffset: 			lsr_write_fixed_16_8i(lsr, (SVG_Number*)att->data, "dashOffset"); break;		case TAG_SVG_ATT_stroke_linecap: GF_LSR_WRITE_INT(lsr, *(SVG_StrokeLineCap*)att->data, 2, "stroke-linecap"); break;		case TAG_SVG_ATT_stroke_linejoin: GF_LSR_WRITE_INT(lsr, *(SVG_StrokeLineJoin*)att->data, 2, "stroke-linejoin"); break;		case TAG_SVG_ATT_stroke_miterlimit: lsr_write_fixed_16_8i(lsr, (SVG_Number*)att->data, "miterLimit"); break;		case TAG_SVG_ATT_stroke_opacity: lsr_write_fixed_clamp(lsr, ((SVG_Number *)att->data)->value, "stroke-opacity"); break;		case TAG_SVG_ATT_stroke_width: lsr_write_fixed_16_8i(lsr, (SVG_Number*)att->data, "strokeWidth"); break;		case TAG_SVG_ATT_text_anchor: GF_LSR_WRITE_INT(lsr, *(SVG_TextAnchor*)att->data, 2, "text-achor"); break;		case TAG_SVG_ATT_text_rendering: GF_LSR_WRITE_INT(lsr, *(SVG_RenderingHint*)att->data, 3, "text-rendering"); break;		case TAG_SVG_ATT_viewport_fill: lsr_write_paint(lsr, (SVG_Paint*)att->data, "viewport-fill"); break;		case TAG_SVG_ATT_viewport_fill_opacity: lsr_write_fixed_clamp(lsr, ((SVG_Number *)att->data)->value, "viewport-fill-opacity"); break;		case TAG_SVG_ATT_vector_effect: GF_LSR_WRITE_INT(lsr, *(SVG_VectorEffect*)att->data, 4, "vector-effect"); break;	    case TAG_SVG_ATT_visibility: GF_LSR_WRITE_INT(lsr, *(SVG_PointerEvents*)att->data, 2, "visibility"); break;	    case TAG_SVG_ATT_requiredExtensions: lsr_write_byte_align_string_list(lsr, *(GF_List **)att->data, "requiredExtensions", 1); break;	    case TAG_SVG_ATT_requiredFormats: lsr_write_byte_align_string_list(lsr, *(GF_List **)att->data, "requiredFormats", 0); break;	    case TAG_SVG_ATT_requiredFeatures: 		{			GF_List *l = *(GF_List **)att->data;			u32 j, tot_count, count = gf_list_count(l);			u8 *vals = (u8*)malloc(sizeof(u8)*count);			tot_count = 0;			for (i=0; i<count; i++) {				char *ext;				XMLRI *iri = (XMLRI*)gf_list_get(l, i);				if (iri->type != XMLRI_STRING) continue;				ext = strchr(iri->string, '#');				if (!ext) continue;

⌨️ 快捷键说明

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