gf_bifs_decoder_new:
   91|      4|{
   92|      4|	GF_BifsDecoder *tmp;
   93|      4|	GF_SAFEALLOC(tmp, GF_BifsDecoder);
  ------------------
  |  |  242|      4|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      4|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      4|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 4, False: 0]
  |  |  ------------------
  |  |  245|      4|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      4|		}\
  |  |  247|      4|	}
  ------------------
   94|      4|	if (!tmp) return NULL;
  ------------------
  |  Branch (94:6): [True: 0, False: 4]
  ------------------
   95|       |
   96|      4|	tmp->QPs = gf_list_new();
   97|      4|	tmp->streamInfo = gf_list_new();
   98|      4|	tmp->info = NULL;
   99|       |
  100|      4|	tmp->pCurrentProto = NULL;
  101|      4|	tmp->scenegraph = scenegraph;
  102|      4|	tmp->command_buffers = gf_list_new();
  103|      4|	if (command_dec) {
  ------------------
  |  Branch (103:6): [True: 0, False: 4]
  ------------------
  104|      0|		tmp->dec_memory_mode = GF_TRUE;
  105|      0|		tmp->force_keep_qp = GF_TRUE;
  106|      0|	}
  107|       |	tmp->current_graph = NULL;
  108|      4|	return tmp;
  109|      4|}
gf_bifs_dec_get_stream:
  113|      7|{
  114|      7|	u32 i;
  115|      7|	BIFSStreamInfo *ptr;
  116|       |
  117|      7|	i=0;
  118|      7|	if (!codec || !codec->streamInfo)
  ------------------
  |  Branch (118:6): [True: 0, False: 7]
  |  Branch (118:16): [True: 0, False: 7]
  ------------------
  119|      0|		return NULL;
  120|      7|	while ((ptr = (BIFSStreamInfo *) gf_list_enum(codec->streamInfo, &i))) {
  ------------------
  |  Branch (120:9): [True: 3, False: 4]
  ------------------
  121|      3|		if(ptr->ESID==ESID) return ptr;
  ------------------
  |  Branch (121:6): [True: 3, False: 0]
  ------------------
  122|      3|	}
  123|      4|	return NULL;
  124|      7|}
gf_bifs_decoder_configure_stream:
  128|      3|{
  129|      3|	GF_BitStream *bs;
  130|      3|	BIFSStreamInfo *pInfo;
  131|      3|	Bool new_cfg = GF_FALSE;
  132|      3|	GF_Err e;
  133|       |
  134|      3|	if (!codec) return GF_BAD_PARAM;
  ------------------
  |  Branch (134:6): [True: 0, False: 3]
  ------------------
  135|      3|	if (!DecoderSpecificInfo) {
  ------------------
  |  Branch (135:6): [True: 0, False: 3]
  ------------------
  136|      0|		if (!codec->streamInfo) return GF_BAD_PARAM;
  ------------------
  |  Branch (136:7): [True: 0, False: 0]
  ------------------
  137|       |		/* Hack for T-DMB non compliant streams */
  138|      0|		GF_SAFEALLOC(pInfo, BIFSStreamInfo);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
  139|      0|		if (!pInfo) return GF_OUT_OF_MEM;
  ------------------
  |  Branch (139:7): [True: 0, False: 0]
  ------------------
  140|      0|		pInfo->ESID = ESID;
  141|      0|		pInfo->config.PixelMetrics = GF_TRUE;
  142|      0|		pInfo->config.version = (objectTypeIndication==2) ? 1 : 2;
  ------------------
  |  Branch (142:27): [True: 0, False: 0]
  ------------------
  143|      0|		return gf_list_add(codec->streamInfo, pInfo);
  144|      0|	}
  145|       |
  146|      3|	pInfo = gf_bifs_dec_get_stream(codec, ESID);
  147|       |	//we allow reconfigure of the BIFS stream
  148|      3|	if (pInfo == NULL) {
  ------------------
  |  Branch (148:6): [True: 3, False: 0]
  ------------------
  149|      3|		GF_SAFEALLOC(pInfo, BIFSStreamInfo);
  ------------------
  |  |  242|      3|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      3|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      3|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 3, False: 0]
  |  |  ------------------
  |  |  245|      3|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      3|		}\
  |  |  247|      3|	}
  ------------------
  150|      3|		if (!pInfo) return GF_OUT_OF_MEM;
  ------------------
  |  Branch (150:7): [True: 0, False: 3]
  ------------------
  151|      3|		new_cfg = GF_TRUE;
  152|      3|	}
  153|      3|	bs = gf_bs_new(DecoderSpecificInfo, DecoderSpecificInfoLength, GF_BITSTREAM_READ);
  154|      3|	pInfo->ESID = ESID;
  155|       |
  156|      3|	pInfo->config.version = objectTypeIndication;
  157|       |	/*parse config with indicated oti*/
  158|      3|	e = ParseConfig(bs, pInfo, (u32) objectTypeIndication);
  159|      3|	if (e) {
  ------------------
  |  Branch (159:6): [True: 2, False: 1]
  ------------------
  160|      2|		pInfo->ESID = ESID;
  161|       |		/*some content indicates a wrong OTI, so try to parse with v1 or v2*/
  162|      2|		gf_bs_seek(bs, 0);
  163|       |		/*try with reverse config*/
  164|      2|		e = ParseConfig(bs, pInfo, (objectTypeIndication==2) ? 1 : 2);
  ------------------
  |  Branch (164:30): [True: 0, False: 2]
  ------------------
  165|      2|		pInfo->config.version = (objectTypeIndication==2) ? 1 : 2;
  ------------------
  |  Branch (165:27): [True: 0, False: 2]
  ------------------
  166|      2|	}
  167|       |
  168|      3|	if (e && (e != GF_ODF_INVALID_DESCRIPTOR)) {
  ------------------
  |  Branch (168:6): [True: 0, False: 3]
  |  Branch (168:11): [True: 0, False: 0]
  ------------------
  169|      0|		bifs_info_del(pInfo);
  170|      0|		gf_bs_del(bs);
  171|      0|		return GF_BIFS_UNKNOWN_VERSION;
  172|      0|	}
  173|      3|	gf_bs_del(bs);
  174|       |
  175|      3|	gf_assert( codec->streamInfo );
  176|       |	//first stream, configure size
  177|      3|	if (!codec->ignore_size && !gf_list_count(codec->streamInfo)) {
  ------------------
  |  Branch (177:6): [True: 3, False: 0]
  |  Branch (177:29): [True: 3, False: 0]
  ------------------
  178|      3|		gf_sg_set_scene_size_info(codec->scenegraph, pInfo->config.Width, pInfo->config.Height, pInfo->config.PixelMetrics);
  179|      3|	}
  180|       |
  181|      3|	if (new_cfg)
  ------------------
  |  Branch (181:6): [True: 3, False: 0]
  ------------------
  182|      3|		gf_list_add(codec->streamInfo, pInfo);
  183|      3|	return GF_OK;
  184|      3|}
command_buffers_del:
  215|      4|{
  216|      4|	while (gf_list_count(command_buffers)) {
  ------------------
  |  Branch (216:9): [True: 0, False: 4]
  ------------------
  217|      0|		CommandBufferItem *cbi = (CommandBufferItem *)gf_list_get(command_buffers, 0);
  218|       |		gf_node_unregister(cbi->node, NULL);
  219|      0|		gf_free(cbi);
  220|      0|		gf_list_rem(command_buffers, 0);
  221|      0|	}
  222|      4|	gf_list_del(command_buffers);
  223|      4|}
gf_bifs_decoder_del:
  227|      4|{
  228|      4|	gf_assert(gf_list_count(codec->QPs)==0);
  229|      4|	gf_list_del(codec->QPs);
  230|       |
  231|       |	/*destroy all config*/
  232|      7|	while (gf_list_count(codec->streamInfo)) {
  ------------------
  |  Branch (232:9): [True: 3, False: 4]
  ------------------
  233|      3|		BIFSStreamInfo *p = (BIFSStreamInfo*)gf_list_get(codec->streamInfo, 0);
  234|      3|		bifs_info_del(p);
  235|      3|		gf_list_rem(codec->streamInfo, 0);
  236|      3|	}
  237|      4|	gf_list_del(codec->streamInfo);
  238|       |
  239|      4|	command_buffers_del(codec->command_buffers);
  240|       |
  241|      4|	gf_free(codec);
  242|      4|}
gf_bifs_decode_au:
  260|      4|{
  261|      4|	GF_BitStream *bs;
  262|      4|	GF_Err e;
  263|       |
  264|      4|	if (!codec || !data || codec->dec_memory_mode) return GF_BAD_PARAM;
  ------------------
  |  Branch (264:6): [True: 0, False: 4]
  |  Branch (264:16): [True: 0, False: 4]
  |  Branch (264:25): [True: 0, False: 4]
  ------------------
  265|      4|	if (!data_length) return GF_OK;
  ------------------
  |  Branch (265:6): [True: 0, False: 4]
  ------------------
  266|       |
  267|      4|	codec->info = gf_bifs_dec_get_stream(codec, ESID);
  268|      4|	if (!codec->info) {
  ------------------
  |  Branch (268:6): [True: 1, False: 3]
  ------------------
  269|      1|		return GF_BAD_PARAM;
  270|      1|	}
  271|       |	/*setup current scene graph*/
  272|      3|	codec->current_graph = codec->scenegraph;
  273|      3|	codec->cts_offset = ts_offset;
  274|       |
  275|      3|	bs = gf_bs_new((u8 *)data, data_length, GF_BITSTREAM_READ);
  276|      3|	if (!bs) return GF_OUT_OF_MEM;
  ------------------
  |  Branch (276:6): [True: 0, False: 3]
  ------------------
  277|      3|	gf_bs_set_eos_callback(bs, BD_EndOfStream, codec);
  278|       |
  279|      3|	if (codec->info->config.elementaryMasks) {
  ------------------
  |  Branch (279:6): [True: 3, False: 0]
  ------------------
  280|      3|		e = GF_NOT_SUPPORTED;
  281|      3|	} else {
  282|      0|		e = gf_bifs_dec_command(codec, bs);
  283|      0|	}
  284|      3|	gf_bs_del(bs);
  285|       |	/*reset current config*/
  286|      3|	codec->info = NULL;
  287|       |	codec->current_graph = NULL;
  288|      3|	return e;
  289|      3|}
bifs_codec.c:ParseConfig:
   35|      5|{
   36|      5|	Bool hasSize, cmd_stream;
   37|       |
   38|      5|	if (info->config.elementaryMasks) gf_list_del(info->config.elementaryMasks);
  ------------------
  |  Branch (38:6): [True: 2, False: 3]
  ------------------
   39|      5|	info->config.elementaryMasks = NULL	;
   40|       |
   41|      5|	if (version==2) {
  ------------------
  |  Branch (41:6): [True: 2, False: 3]
  ------------------
   42|      2|		info->config.Use3DMeshCoding = (Bool)gf_bs_read_int(bs, 1);
   43|      2|		info->config.UsePredictiveMFField = (Bool)gf_bs_read_int(bs, 1);
   44|      2|	}
   45|      5|	info->config.NodeIDBits = gf_bs_read_int(bs, 5);
   46|      5|	info->config.RouteIDBits = gf_bs_read_int(bs, 5);
   47|      5|	if (version==2) {
  ------------------
  |  Branch (47:6): [True: 2, False: 3]
  ------------------
   48|      2|		info->config.ProtoIDBits = gf_bs_read_int(bs, 5);
   49|      2|	}
   50|      5|	cmd_stream = (Bool)gf_bs_read_int(bs, 1);
   51|       |
   52|      5|	if (cmd_stream) {
  ------------------
  |  Branch (52:6): [True: 0, False: 5]
  ------------------
   53|      0|		info->config.PixelMetrics = (Bool)gf_bs_read_int(bs, 1);
   54|      0|		hasSize = (Bool)gf_bs_read_int(bs, 1);
   55|      0|		if (hasSize) {
  ------------------
  |  Branch (55:7): [True: 0, False: 0]
  ------------------
   56|      0|			info->config.Width = gf_bs_read_int(bs, 16);
   57|      0|			info->config.Height = gf_bs_read_int(bs, 16);
   58|      0|		}
   59|      0|		gf_bs_align(bs);
   60|       |
   61|      0|		if (gf_bs_get_size(bs) != gf_bs_get_position(bs)) return GF_ODF_INVALID_DESCRIPTOR;
  ------------------
  |  Branch (61:7): [True: 0, False: 0]
  ------------------
   62|      0|		return GF_OK;
   63|      5|	} else {
   64|      5|		info->config.BAnimRAP = (Bool)gf_bs_read_int(bs, 1);
   65|      5|		info->config.elementaryMasks = gf_list_new();
   66|      5|		while (1) {
  ------------------
  |  Branch (66:10): [True: 5, Folded]
  ------------------
   67|      5|			/*u32 node_id = */gf_bs_read_int(bs, info->config.NodeIDBits);
   68|       |			/*this assumes only FDP, BDP and IFS2D (no elem mask)*/
   69|      5|			if (gf_bs_read_int(bs, 1) == 0) break;
  ------------------
  |  Branch (69:8): [True: 5, False: 0]
  ------------------
   70|      5|		}
   71|      5|		gf_bs_align(bs);
   72|      5|		if (gf_bs_get_size(bs) != gf_bs_get_position(bs))  return GF_NOT_SUPPORTED;
  ------------------
  |  Branch (72:7): [True: 2, False: 3]
  ------------------
   73|      3|		return GF_OK;
   74|      5|	}
   75|      5|}
bifs_codec.c:bifs_info_del:
   78|      3|{
   79|      3|	while (1) {
  ------------------
  |  Branch (79:9): [True: 3, Folded]
  ------------------
   80|      3|		BIFSElementaryMask *em = (BIFSElementaryMask *)gf_list_last(info->config.elementaryMasks);
   81|      3|		if (!em) break;
  ------------------
  |  Branch (81:7): [True: 3, False: 0]
  ------------------
   82|      0|		gf_list_rem_last(info->config.elementaryMasks);
   83|      0|		gf_free(em);
   84|      0|	}
   85|      3|	gf_list_del(info->config.elementaryMasks);
   86|      3|	gf_free(info);
   87|      3|}

gf_laser_decoder_new:
   55|     25|{
   56|     25|	GF_LASeRCodec *tmp;
   57|     25|	GF_SAFEALLOC(tmp, GF_LASeRCodec);
  ------------------
  |  |  242|     25|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     25|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     25|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 25, False: 0]
  |  |  ------------------
  |  |  245|     25|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     25|		}\
  |  |  247|     25|	}
  ------------------
   58|     25|	if (!tmp) return NULL;
  ------------------
  |  Branch (58:6): [True: 0, False: 25]
  ------------------
   59|     25|	tmp->streamInfo = gf_list_new();
   60|     25|	tmp->font_table = gf_list_new();
   61|     25|	tmp->deferred_hrefs = gf_list_new();
   62|     25|	tmp->deferred_listeners = gf_list_new();
   63|     25|	tmp->deferred_anims = gf_list_new();
   64|     25|	tmp->unresolved_commands = gf_list_new();
   65|     25|	tmp->sg = graph;
   66|     25|	return tmp;
   67|     25|}
gf_laser_decoder_del:
   71|     25|{
   72|       |	/*destroy all config*/
   73|     49|	while (gf_list_count(codec->streamInfo)) {
  ------------------
  |  Branch (73:9): [True: 24, False: 25]
  ------------------
   74|     24|		LASeRStreamInfo *p = (LASeRStreamInfo *)gf_list_last(codec->streamInfo);
   75|     24|		gf_free(p);
   76|     24|		gf_list_rem_last(codec->streamInfo);
   77|     24|	}
   78|     25|	gf_list_del(codec->streamInfo);
   79|     25|	if (codec->col_table) gf_free(codec->col_table);
  ------------------
  |  Branch (79:6): [True: 13, False: 12]
  ------------------
   80|    344|	while (gf_list_count(codec->font_table)) {
  ------------------
  |  Branch (80:9): [True: 319, False: 25]
  ------------------
   81|    319|		char *ft = (char *)gf_list_last(codec->font_table);
   82|    319|		gf_free(ft);
   83|    319|		gf_list_rem_last(codec->font_table);
   84|    319|	}
   85|     25|	gf_list_del(codec->font_table);
   86|       |
   87|     25|	gf_list_del(codec->deferred_hrefs);
   88|     25|	gf_list_del(codec->deferred_anims);
   89|     25|	gf_list_del(codec->deferred_listeners);
   90|     25|	gf_list_del(codec->unresolved_commands);
   91|     25|	gf_free(codec);
   92|     25|}
gf_laser_decoder_configure_stream:
  107|     24|{
  108|     24|	LASeRStreamInfo *info;
  109|     24|	GF_BitStream *bs;
  110|     24|	if (lsr_get_stream(codec, ESID) != NULL) return GF_BAD_PARAM;
  ------------------
  |  Branch (110:6): [True: 0, False: 24]
  ------------------
  111|     24|	GF_SAFEALLOC(info, LASeRStreamInfo);
  ------------------
  |  |  242|     24|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     24|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     24|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 24, False: 0]
  |  |  ------------------
  |  |  245|     24|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     24|		}\
  |  |  247|     24|	}
  ------------------
  112|     24|	if (!info) return GF_OUT_OF_MEM;
  ------------------
  |  Branch (112:6): [True: 0, False: 24]
  ------------------
  113|     24|	info->ESID = ESID;
  114|     24|	bs = gf_bs_new(dsi, dsi_len, GF_BITSTREAM_READ);
  115|       |
  116|     24|	info->cfg.profile = gf_bs_read_int(bs, 8);
  117|     24|	info->cfg.level = gf_bs_read_int(bs, 8);
  118|     24|	/*info->cfg.reserved = */ gf_bs_read_int(bs, 3);
  119|     24|	info->cfg.pointsCodec = gf_bs_read_int(bs, 2);
  120|     24|	info->cfg.pathComponents = gf_bs_read_int(bs, 4);
  121|     24|	info->cfg.fullRequestHost = gf_bs_read_int(bs, 1);
  122|     24|	if (gf_bs_read_int(bs, 1)) {
  ------------------
  |  Branch (122:6): [True: 6, False: 18]
  ------------------
  123|      6|		info->cfg.time_resolution = gf_bs_read_int(bs, 16);
  124|     18|	} else {
  125|     18|		info->cfg.time_resolution = 1000;
  126|     18|	}
  127|     24|	info->cfg.colorComponentBits = gf_bs_read_int(bs, 4);
  128|     24|	info->cfg.colorComponentBits += 1;
  129|     24|	info->cfg.resolution = gf_bs_read_int(bs, 4);
  130|     24|	if (info->cfg.resolution>7) info->cfg.resolution -= 16;
  ------------------
  |  Branch (130:6): [True: 6, False: 18]
  ------------------
  131|     24|	info->cfg.coord_bits = gf_bs_read_int(bs, 5);
  132|     24|	info->cfg.scale_bits_minus_coord_bits = gf_bs_read_int(bs, 4);
  133|     24|	info->cfg.newSceneIndicator = gf_bs_read_int(bs, 1);
  134|     24|	/*reserved*/ gf_bs_read_int(bs, 3);
  135|     24|	info->cfg.extensionIDBits = gf_bs_read_int(bs, 4);
  136|       |	/*we ignore the rest*/
  137|     24|	gf_list_add(codec->streamInfo, info);
  138|     24|	gf_bs_del(bs);
  139|     24|	return GF_OK;
  140|     24|}
lsr_end_of_stream:
  162|      7|{
  163|      7|	GF_LASeRCodec *codec = (GF_LASeRCodec *)co;
  164|      7|	if (codec->last_error != GF_NON_COMPLIANT_BITSTREAM) {
  ------------------
  |  Branch (164:6): [True: 1, False: 6]
  ------------------
  165|      1|		GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[LASeR] memory overread - corrupted decoding\n"));
  ------------------
  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  ------------------
  ------------------
  166|      1|		((GF_LASeRCodec *) co)->last_error = GF_NON_COMPLIANT_BITSTREAM;
  167|      1|	}
  168|      7|}
gf_laser_decode_au:
  178|     25|{
  179|     25|	GF_Err e;
  180|     25|	if (!codec || !data || !data_len) return GF_BAD_PARAM;
  ------------------
  |  Branch (180:6): [True: 0, False: 25]
  |  Branch (180:16): [True: 0, False: 25]
  |  Branch (180:25): [True: 0, False: 25]
  ------------------
  181|       |
  182|     25|	codec->info = lsr_get_stream(codec, ESID);
  183|     25|	if (!codec->info) return GF_BAD_PARAM;
  ------------------
  |  Branch (183:6): [True: 1, False: 24]
  ------------------
  184|     24|	codec->coord_bits = codec->info->cfg.coord_bits;
  185|     24|	codec->scale_bits = codec->info->cfg.scale_bits_minus_coord_bits;
  186|     24|	codec->time_resolution = codec->info->cfg.time_resolution;
  187|     24|	codec->color_scale = (1<<codec->info->cfg.colorComponentBits) - 1;
  188|     24|	if (codec->info->cfg.resolution >= 0)
  ------------------
  |  Branch (188:6): [True: 18, False: 6]
  ------------------
  189|     18|		codec->res_factor = INT2FIX(1<<codec->info->cfg.resolution);
  ------------------
  |  |  119|     18|#define INT2FIX(v)		((Float) (v))
  ------------------
  190|      6|	else
  191|      6|		codec->res_factor = gf_divfix(FIX_ONE, INT2FIX(1 << (-codec->info->cfg.resolution)) );
  ------------------
  |  |  137|      6|#define gf_divfix(_a, _b)		(((_b != 0)) ? (_a)/(_b) : GF_MAX_FLOAT)
  |  |  ------------------
  |  |  |  |  431|      6|#define GF_MAX_FLOAT		FLT_MAX
  |  |  ------------------
  |  |  |  Branch (137:29): [True: 6, False: 0]
  |  |  ------------------
  ------------------
  192|       |
  193|     24|	codec->bs = gf_bs_new(data, data_len, GF_BITSTREAM_READ);
  194|     24|	gf_bs_set_eos_callback(codec->bs, lsr_end_of_stream, codec);
  195|     24|	codec->memory_dec = GF_FALSE;
  196|     24|	e = lsr_decode_laser_unit(codec, NULL);
  197|     24|	gf_bs_del(codec->bs);
  198|       |	codec->bs = NULL;
  199|     24|	return e;
  200|     25|}
lsr_dec.c:lsr_get_stream:
   95|     49|{
   96|     49|	u32 i=0;
   97|     49|	LASeRStreamInfo *ptr;
   98|     49|	while ((ptr = (LASeRStreamInfo *)gf_list_enum(codec->streamInfo, &i))) {
  ------------------
  |  Branch (98:9): [True: 24, False: 25]
  ------------------
   99|     24|		if (!ESID || (ptr->ESID==ESID)) return ptr;
  ------------------
  |  Branch (99:7): [True: 0, False: 24]
  |  Branch (99:16): [True: 24, False: 0]
  ------------------
  100|     24|	}
  101|     25|	return NULL;
  102|     49|}
lsr_dec.c:lsr_read_command_list:
 5945|     19|{
 5946|     19|	GF_Node *n;
 5947|     19|	GF_Command *com;
 5948|     19|	u32 i, type, count;
 5949|       |
 5950|     19|	if (cond) {
  ------------------
  |  Branch (5950:6): [True: 0, False: 19]
  ------------------
 5951|      0|		u32 s_len;
 5952|      0|		GF_DOMUpdates *up = gf_dom_add_updates_node((GF_Node*)cond);
 5953|      0|		gf_node_set_callback_function((GF_Node*)up, lsr_exec_command_list);
 5954|      0|		gf_node_set_private((GF_Node *) up, lsr);
 5955|       |
 5956|      0|		s_len = lsr_read_vluimsbf5(lsr, NULL/*"encoding-length" - don't log to avoid corrupting the log order!!*/);
 5957|      0|		gf_bs_align(lsr->bs);
 5958|       |		/*not in memory mode, direct decode*/
 5959|      0|		if (!lsr->memory_dec) {
  ------------------
  |  Branch (5959:7): [True: 0, False: 0]
  ------------------
 5960|      0|			com_list = NULL;
 5961|      0|			up->data_size = s_len;
 5962|      0|			up->data = (char*)gf_malloc(sizeof(char)*s_len);
 5963|      0|			if (!up->data) {
  ------------------
  |  Branch (5963:8): [True: 0, False: 0]
  ------------------
 5964|      0|				lsr->last_error = GF_OUT_OF_MEM;
 5965|      0|			} else {
 5966|      0|				gf_bs_read_data(lsr->bs, up->data, s_len);
 5967|      0|			}
 5968|      0|			goto exit;
 5969|      0|		}
 5970|       |		/*memory mode, decode commands*/
 5971|      0|		else {
 5972|      0|			com_list = up->updates;
 5973|      0|		}
 5974|      0|	}
 5975|     19|	count = lsr_read_vluimsbf5(lsr, "occ0");
 5976|     19|	if (first_imp) count++;
  ------------------
  |  Branch (5976:6): [True: 19, False: 0]
  ------------------
 5977|       |
 5978|     64|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (5978:12): [True: 58, False: 6]
  ------------------
 5979|     58|		GF_LSR_READ_INT(lsr, type, 4, "ch4");
  ------------------
  |  |   34|     58|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     58|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 58]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     58|	} else {\
  |  |   39|     58|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     58|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     58|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 58]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     58|	}\
  |  |   42|     58|}
  ------------------
 5980|     58|		switch (type) {
 5981|     24|		case LSR_UPDATE_ADD:
  ------------------
  |  Branch (5981:3): [True: 24, False: 34]
  ------------------
 5982|     29|		case LSR_UPDATE_INSERT:
  ------------------
  |  Branch (5982:3): [True: 5, False: 53]
  ------------------
 5983|     30|		case LSR_UPDATE_REPLACE:
  ------------------
  |  Branch (5983:3): [True: 1, False: 57]
  ------------------
 5984|     30|			lsr_read_add_replace_insert(lsr, com_list, type);
 5985|     30|			break;
 5986|      3|		case LSR_UPDATE_DELETE:
  ------------------
  |  Branch (5986:3): [True: 3, False: 55]
  ------------------
 5987|      3|			lsr_read_delete(lsr, com_list);
 5988|      3|			break;
 5989|     10|		case LSR_UPDATE_NEW_SCENE:
  ------------------
  |  Branch (5989:3): [True: 10, False: 48]
  ------------------
 5990|     14|		case LSR_UPDATE_REFRESH_SCENE: /*TODO FIXME, depends on decoder state*/
  ------------------
  |  Branch (5990:3): [True: 4, False: 54]
  ------------------
 5991|     14|			if (type==5) lsr_read_vluimsbf5(lsr, "time");
  ------------------
  |  Branch (5991:8): [True: 4, False: 10]
  ------------------
 5992|     14|			lsr_read_any_attribute(lsr, NULL, 1);
 5993|     14|			if (com_list) {
  ------------------
  |  Branch (5993:8): [True: 0, False: 14]
  ------------------
 5994|      0|				n = lsr_read_svg(lsr, 0);
 5995|      0|				if (!n)
  ------------------
  |  Branch (5995:9): [True: 0, False: 0]
  ------------------
 5996|      0|					return (lsr->last_error = GF_NON_COMPLIANT_BITSTREAM);
 5997|      0|				gf_node_register(n, NULL);
 5998|      0|				com = gf_sg_command_new(lsr->sg, (type==5) ? GF_SG_LSR_REFRESH_SCENE : GF_SG_LSR_NEW_SCENE);
  ------------------
  |  Branch (5998:38): [True: 0, False: 0]
  ------------------
 5999|      0|				com->node = n;
 6000|      0|				gf_list_add(com_list, com);
 6001|     14|			} else {
 6002|     14|				while (gf_list_count(lsr->deferred_hrefs)) {
  ------------------
  |  Branch (6002:12): [True: 0, False: 14]
  ------------------
 6003|      0|					gf_list_rem_last(lsr->deferred_hrefs);
 6004|      0|				}
 6005|     14|				while (gf_list_count(lsr->deferred_anims)) {
  ------------------
  |  Branch (6005:12): [True: 0, False: 14]
  ------------------
 6006|      0|					gf_list_rem_last(lsr->deferred_anims);
 6007|      0|				}
 6008|     14|				gf_sg_reset(lsr->sg);
 6009|     14|				gf_sg_set_scene_size_info(lsr->sg, 0, 0, 1);
 6010|     14|				n = lsr_read_svg(lsr, 1);
 6011|     14|				if (!n)
  ------------------
  |  Branch (6011:9): [True: 0, False: 14]
  ------------------
 6012|      0|					return (lsr->last_error = GF_NON_COMPLIANT_BITSTREAM);
 6013|     14|			}
 6014|     14|			break;
 6015|     14|		case LSR_UPDATE_TEXT_CONTENT:
  ------------------
  |  Branch (6015:3): [True: 0, False: 58]
  ------------------
 6016|      0|			lsr_read_byte_align_string(lsr, NULL, "textContent");
 6017|      0|			break;
 6018|      1|		case LSR_UPDATE_SEND_EVENT:
  ------------------
  |  Branch (6018:3): [True: 1, False: 57]
  ------------------
 6019|      1|			lsr_read_send_event(lsr, com_list);
 6020|      1|			break;
 6021|      0|		case LSR_UPDATE_RESTORE:
  ------------------
  |  Branch (6021:3): [True: 0, False: 58]
  ------------------
 6022|      0|			lsr_read_restore(lsr, com_list);
 6023|      0|			break;
 6024|      5|		case LSR_UPDATE_SAVE:
  ------------------
  |  Branch (6024:3): [True: 5, False: 53]
  ------------------
 6025|      5|			lsr_read_save(lsr, com_list);
 6026|      5|			break;
 6027|      0|		case LSR_UPDATE_EXTEND:
  ------------------
  |  Branch (6027:3): [True: 0, False: 58]
  ------------------
 6028|      0|		{
 6029|      0|			u32 extID;
 6030|      0|			GF_LSR_READ_INT(lsr, extID, lsr->info->cfg.extensionIDBits, "extensionID");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 6031|      0|			/*len = */lsr_read_vluimsbf5(lsr, "len");
 6032|      0|			if (extID==2) {
  ------------------
  |  Branch (6032:8): [True: 0, False: 0]
  ------------------
 6033|      0|				u32 j, sub_count;
 6034|      0|				lsr_read_vluimsbf5(lsr, "reserved");
 6035|      0|				sub_count = lsr_read_vluimsbf5(lsr, "occ2");
 6036|      0|				for (j=0; j<sub_count; j++) {
  ------------------
  |  Branch (6036:15): [True: 0, False: 0]
  ------------------
 6037|      0|					u32 k, occ3;
 6038|      0|					GF_LSR_READ_INT(lsr, k, 2, "reserved");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 6039|      0|					occ3 = lsr_read_vluimsbf5(lsr, "occ3");
 6040|      0|					for (k=0; k<occ3; k++) {
  ------------------
  |  Branch (6040:16): [True: 0, False: 0]
  ------------------
 6041|      0|						u32 sub_type, idref;
 6042|      0|						GF_LSR_READ_INT(lsr, sub_type, 2, "ch5");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 6043|      0|						switch (sub_type) {
 6044|      0|						case 1:
  ------------------
  |  Branch (6044:7): [True: 0, False: 0]
  ------------------
 6045|      0|						case 2:
  ------------------
  |  Branch (6045:7): [True: 0, False: 0]
  ------------------
 6046|      0|							idref = lsr_read_codec_IDREF_command(lsr, "ref");
 6047|       |
 6048|      0|							n = gf_sg_find_node(lsr->sg, idref);
 6049|      0|							if (com_list) {
  ------------------
  |  Branch (6049:12): [True: 0, False: 0]
  ------------------
 6050|      0|								com = gf_sg_command_new(lsr->sg, (sub_type==1) ? GF_SG_LSR_ACTIVATE : GF_SG_LSR_DEACTIVATE);
  ------------------
  |  Branch (6050:42): [True: 0, False: 0]
  ------------------
 6051|      0|								if (n) {
  ------------------
  |  Branch (6051:13): [True: 0, False: 0]
  ------------------
 6052|      0|									com->node = n;
 6053|      0|									gf_node_register(n, NULL);
 6054|      0|								} else {
 6055|      0|									com->RouteID = idref;
 6056|      0|								}
 6057|      0|								gf_list_add(com_list, com);
 6058|      0|							} else if (sub_type==1) {
  ------------------
  |  Branch (6058:19): [True: 0, False: 0]
  ------------------
 6059|      0|								if (!n) return GF_NON_COMPLIANT_BITSTREAM;
  ------------------
  |  Branch (6059:13): [True: 0, False: 0]
  ------------------
 6060|      0|								gf_node_activate(n);
 6061|      0|							} else {
 6062|      0|								if (!n) return GF_NON_COMPLIANT_BITSTREAM;
  ------------------
  |  Branch (6062:13): [True: 0, False: 0]
  ------------------
 6063|      0|								gf_node_deactivate(n);
 6064|      0|							}
 6065|      0|							break;
 6066|      0|						default:
  ------------------
  |  Branch (6066:7): [True: 0, False: 0]
  ------------------
 6067|      0|							lsr_read_private_element_container(lsr);
 6068|      0|							break;
 6069|      0|						}
 6070|      0|						if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6070:11): [True: 0, False: 0]
  ------------------
 6071|      0|					}
 6072|      0|				}
 6073|      0|			}
 6074|      0|		}
 6075|      0|		break;
 6076|      5|		default:
  ------------------
  |  Branch (6076:3): [True: 5, False: 53]
  ------------------
 6077|      5|			return (lsr->last_error = GF_NON_COMPLIANT_BITSTREAM);
 6078|     58|		}
 6079|       |		/*same-coding scope is command-based (to check in the spec)*/
 6080|     53|		if (cond) {
  ------------------
  |  Branch (6080:7): [True: 0, False: 53]
  ------------------
 6081|      0|			lsr->prev_g = NULL;
 6082|      0|			lsr->prev_line = NULL;
 6083|      0|			lsr->prev_path = NULL;
 6084|      0|			lsr->prev_polygon = NULL;
 6085|      0|			lsr->prev_rect = NULL;
 6086|      0|			lsr->prev_text = NULL;
 6087|      0|			lsr->prev_use = NULL;
 6088|      0|		}
 6089|       |
 6090|     53|		if (lsr->last_error)
  ------------------
  |  Branch (6090:7): [True: 8, False: 45]
  ------------------
 6091|      8|			return lsr->last_error;
 6092|     53|	}
 6093|      6|exit:
 6094|       |	/*script is align*/
 6095|      6|	if (cond) {
  ------------------
  |  Branch (6095:6): [True: 0, False: 6]
  ------------------
 6096|      0|		gf_bs_align(lsr->bs);
 6097|      0|		lsr_read_object_content(lsr, (SVG_Element*)cond);
 6098|      0|		lsr->prev_g = NULL;
 6099|      0|		lsr->prev_line = NULL;
 6100|      0|		lsr->prev_path = NULL;
 6101|      0|		lsr->prev_polygon = NULL;
 6102|      0|		lsr->prev_rect = NULL;
 6103|      0|		lsr->prev_text = NULL;
 6104|       |		lsr->prev_use = NULL;
 6105|      0|	}
 6106|      6|	return GF_OK;
 6107|     19|}
lsr_dec.c:lsr_read_vluimsbf5:
  250|   647k|{
  251|   647k|	u32 nb_words = 0;
  252|   647k|	u32 nb_tot, nb_bits, val;
  253|       |
  254|  1.24M|	while (gf_bs_read_int(lsr->bs, 1)) nb_words++;
  ------------------
  |  Branch (254:9): [True: 593k, False: 647k]
  ------------------
  255|   647k|	nb_words++;
  256|   647k|	nb_tot = nb_words;
  257|   647k|	nb_bits = nb_words*4;
  258|   647k|	nb_tot += nb_bits;
  259|   647k|	val = gf_bs_read_int(lsr->bs, nb_bits);
  260|   647k|	if (name) GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", name, nb_tot, val));
  ------------------
  |  | 1086|   647k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 647k]
  |  |  ------------------
  ------------------
  |  Branch (260:6): [True: 647k, False: 0]
  ------------------
  261|   647k|	return val;
  262|   647k|}
lsr_dec.c:lsr_read_add_replace_insert:
 5312|     30|{
 5313|     30|	GF_FieldInfo info;
 5314|     30|	GF_Node *n, *operandNode;
 5315|     30|	GF_Command *com;
 5316|     30|	GF_CommandField *field;
 5317|     30|	s32 idx, att_type, op_att_type;
 5318|     30|	u32 type, idref, op_idref = 0;
 5319|       |
 5320|     30|	operandNode = NULL;
 5321|     30|	op_att_type = -1;
 5322|       |
 5323|     30|	att_type = lsr_get_attribute_name(lsr);
 5324|       |
 5325|     30|	idx = -1;
 5326|     30|	if (com_type) {
  ------------------
  |  Branch (5326:6): [True: 6, False: 24]
  ------------------
 5327|      6|		GF_LSR_READ_INT(lsr, type, 1, "has_index");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 5328|      6|		if (type) idx = lsr_read_vluimsbf5(lsr, "index");
  ------------------
  |  Branch (5328:7): [True: 0, False: 6]
  ------------------
 5329|      6|	}
 5330|     30|	if (com_type!=3) {
  ------------------
  |  Branch (5330:6): [True: 25, False: 5]
  ------------------
 5331|     25|		GF_LSR_READ_INT(lsr, type, 1, "has_operandAttribute");
  ------------------
  |  |   34|     25|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     25|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 25]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     25|	} else {\
  |  |   39|     25|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     25|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     25|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     25|	}\
  |  |   42|     25|}
  ------------------
 5332|     25|		if (type) GF_LSR_READ_INT(lsr, op_att_type, 8, "attributeName");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
  |  Branch (5332:7): [True: 1, False: 24]
  ------------------
 5333|     25|		GF_LSR_READ_INT(lsr, type, 1, "has_operandElementId");
  ------------------
  |  |   34|     25|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     25|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 25]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     25|	} else {\
  |  |   39|     25|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     25|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     25|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     25|	}\
  |  |   42|     25|}
  ------------------
 5334|     25|		if (type) {
  ------------------
  |  Branch (5334:7): [True: 1, False: 24]
  ------------------
 5335|      1|			op_idref = lsr_read_codec_IDREF_command(lsr, "operandElementId");
 5336|      1|			operandNode = gf_sg_find_node(lsr->sg, op_idref);
 5337|      1|			if (!operandNode)
  ------------------
  |  Branch (5337:8): [True: 1, False: 0]
  ------------------
 5338|      1|				return GF_NON_COMPLIANT_BITSTREAM;
 5339|      1|		}
 5340|     25|	}
 5341|     29|	idref = lsr_read_codec_IDREF_command(lsr, "ref");
 5342|       |
 5343|     29|	n = gf_sg_find_node(lsr->sg, idref);
 5344|     29|	if (!n) {
  ------------------
  |  Branch (5344:6): [True: 29, False: 0]
  ------------------
 5345|     29|		if (!com_list) {
  ------------------
  |  Branch (5345:7): [True: 29, False: 0]
  ------------------
 5346|     29|			return GF_NON_COMPLIANT_BITSTREAM;
 5347|     29|		}
 5348|     29|	}
 5349|       |
 5350|      0|	GF_LSR_READ_INT(lsr, type, 1, "has_value");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 5351|      0|	if (type) {
  ------------------
  |  Branch (5351:6): [True: 0, False: 0]
  ------------------
 5352|       |		/*node or node-list replacement*/
 5353|      0|		if (att_type==-2) {
  ------------------
  |  Branch (5353:7): [True: 0, False: 0]
  ------------------
 5354|      0|			lsr_read_byte_align_string(lsr, NULL, "anyXML");
 5355|      0|		}
 5356|      0|		else if (att_type<0) {
  ------------------
  |  Branch (5356:12): [True: 0, False: 0]
  ------------------
 5357|      0|			GF_Node *new_node;
 5358|      0|			if (!com_type)
  ------------------
  |  Branch (5358:8): [True: 0, False: 0]
  ------------------
 5359|      0|				return GF_NON_COMPLIANT_BITSTREAM;
 5360|      0|			GF_LSR_READ_INT(lsr, type, 1, "isInherit");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 5361|      0|			if (type)
  ------------------
  |  Branch (5361:8): [True: 0, False: 0]
  ------------------
 5362|      0|				return GF_NON_COMPLIANT_BITSTREAM;
 5363|      0|			if (idx==-1) {
  ------------------
  |  Branch (5363:8): [True: 0, False: 0]
  ------------------
 5364|      0|				GF_LSR_READ_INT(lsr, type, 1, "escapeFlag");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 5365|      0|				if (type)
  ------------------
  |  Branch (5365:9): [True: 0, False: 0]
  ------------------
 5366|      0|					return GF_NON_COMPLIANT_BITSTREAM;
 5367|      0|			}
 5368|       |
 5369|      0|			new_node = lsr_read_update_content_model(lsr, (idx==-1) ? NULL : (SVG_Element *)n);
  ------------------
  |  Branch (5369:50): [True: 0, False: 0]
  ------------------
 5370|      0|			if (com_list) {
  ------------------
  |  Branch (5370:8): [True: 0, False: 0]
  ------------------
 5371|      0|				com = gf_sg_command_new(lsr->sg, (com_type==3) ? GF_SG_LSR_INSERT : GF_SG_LSR_REPLACE);
  ------------------
  |  Branch (5371:38): [True: 0, False: 0]
  ------------------
 5372|      0|				gf_list_add(com_list, com);
 5373|      0|				if (n) {
  ------------------
  |  Branch (5373:9): [True: 0, False: 0]
  ------------------
 5374|      0|					com->node = n;
 5375|      0|					gf_node_register(com->node, NULL);
 5376|      0|				} else {
 5377|      0|					com->RouteID = idref;
 5378|      0|					gf_list_add(lsr->unresolved_commands, com);
 5379|      0|				}
 5380|      0|				field = gf_sg_command_field_new(com);
 5381|      0|				field->pos = idx;
 5382|      0|				field->new_node = new_node;
 5383|      0|				if (new_node) gf_node_register(new_node, NULL);
  ------------------
  |  Branch (5383:9): [True: 0, False: 0]
  ------------------
 5384|      0|			} else if (com_type==3) {
  ------------------
  |  Branch (5384:15): [True: 0, False: 0]
  ------------------
 5385|      0|				gf_node_list_insert_child(& ((SVG_Element *)n)->children, new_node, idx);
 5386|      0|				if (new_node) gf_node_register(new_node, n);
  ------------------
  |  Branch (5386:9): [True: 0, False: 0]
  ------------------
 5387|      0|			} else {
 5388|       |				/*child replacement*/
 5389|      0|				if (idx!=-1) {
  ------------------
  |  Branch (5389:9): [True: 0, False: 0]
  ------------------
 5390|      0|					GF_Node *old = gf_node_list_get_child( ((SVG_Element *)n)->children, idx);
 5391|      0|					if (old)
  ------------------
  |  Branch (5391:10): [True: 0, False: 0]
  ------------------
 5392|      0|						gf_node_replace(old, new_node, 0);
 5393|      0|					else {
 5394|      0|						gf_node_list_add_child( & ((SVG_Element *)n)->children, new_node);
 5395|      0|						if (new_node) gf_node_register(new_node, n);
  ------------------
  |  Branch (5395:11): [True: 0, False: 0]
  ------------------
 5396|      0|					}
 5397|      0|				} else {
 5398|       |					/*node replacement*/
 5399|      0|					gf_node_replace(n, new_node, 0);
 5400|      0|				}
 5401|      0|			}
 5402|      0|		}
 5403|       |		/*value replace/add*/
 5404|      0|		else if (com_list) {
  ------------------
  |  Branch (5404:12): [True: 0, False: 0]
  ------------------
 5405|      0|			u32 field_type;
 5406|      0|			Bool text_content = 0;
 5407|      0|			com = gf_sg_command_new(lsr->sg, (com_type==0) ? GF_SG_LSR_ADD : (com_type==3) ? GF_SG_LSR_INSERT : GF_SG_LSR_REPLACE);
  ------------------
  |  Branch (5407:37): [True: 0, False: 0]
  |  Branch (5407:69): [True: 0, False: 0]
  ------------------
 5408|      0|			field = gf_sg_command_field_new(com);
 5409|      0|			field->pos = idx;
 5410|      0|			field_type = 0;
 5411|      0|			switch (att_type) {
 5412|       |			/*text*/
 5413|      0|			case LSR_UPDATE_TYPE_TEXT_CONTENT:
  ------------------
  |  |  157|      0|#define LSR_UPDATE_TYPE_TEXT_CONTENT	107
  ------------------
  |  Branch (5413:4): [True: 0, False: 0]
  ------------------
 5414|      0|				text_content = 1;
 5415|      0|				break;
 5416|       |			/*matrix.translation, scale or rotate*/
 5417|      0|			case LSR_UPDATE_TYPE_SCALE:
  ------------------
  |  |  154|      0|#define LSR_UPDATE_TYPE_SCALE			79
  ------------------
  |  Branch (5417:4): [True: 0, False: 0]
  ------------------
 5418|      0|				field->fieldType = field_type = SVG_Transform_Scale_datatype;
 5419|      0|				field->fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5420|      0|				break;
 5421|      0|			case LSR_UPDATE_TYPE_ROTATE:
  ------------------
  |  |  153|      0|#define LSR_UPDATE_TYPE_ROTATE			76
  ------------------
  |  Branch (5421:4): [True: 0, False: 0]
  ------------------
 5422|      0|				field->fieldType = field_type = SVG_Transform_Rotate_datatype;
 5423|      0|				field->fieldIndex = TAG_SVG_ATT_transform;
 5424|      0|				break;
 5425|      0|			case LSR_UPDATE_TYPE_TRANSLATION:
  ------------------
  |  |  159|      0|#define LSR_UPDATE_TYPE_TRANSLATION		110
  ------------------
  |  Branch (5425:4): [True: 0, False: 0]
  ------------------
 5426|      0|				field->fieldType = field_type = SVG_Transform_Translate_datatype;
 5427|      0|				field->fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5428|      0|				break;
 5429|      0|			case LSR_UPDATE_TYPE_SVG_HEIGHT:
  ------------------
  |  |  155|      0|#define LSR_UPDATE_TYPE_SVG_HEIGHT		94
  ------------------
  |  Branch (5429:4): [True: 0, False: 0]
  ------------------
 5430|      0|				field->fieldIndex = TAG_SVG_ATT_height;
 5431|      0|				field_type = field->fieldType = SVG_Length_datatype;
 5432|      0|				break;
 5433|      0|			case LSR_UPDATE_TYPE_SVG_WIDTH:
  ------------------
  |  |  156|      0|#define LSR_UPDATE_TYPE_SVG_WIDTH		95
  ------------------
  |  Branch (5433:4): [True: 0, False: 0]
  ------------------
 5434|      0|				field->fieldIndex = TAG_SVG_ATT_width;
 5435|      0|				field_type = field->fieldType = SVG_Length_datatype;
 5436|      0|				break;
 5437|      0|			default:
  ------------------
  |  Branch (5437:4): [True: 0, False: 0]
  ------------------
 5438|      0|				field->fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5439|      0|				if (field->fieldIndex == (u32)-1) {
  ------------------
  |  Branch (5439:9): [True: 0, False: 0]
  ------------------
 5440|      0|					lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
 5441|      0|					gf_sg_command_del(com);
 5442|      0|					return lsr->last_error;
 5443|      0|				}
 5444|      0|				field_type = field->fieldType = gf_xml_get_attribute_type(field->fieldIndex);
 5445|      0|				break;
 5446|      0|			}
 5447|      0|			gf_list_add(com_list, com);
 5448|      0|			if (n) {
  ------------------
  |  Branch (5448:8): [True: 0, False: 0]
  ------------------
 5449|      0|				com->node = n;
 5450|      0|				gf_node_register(com->node, NULL);
 5451|      0|			} else {
 5452|      0|				com->RouteID = idref;
 5453|      0|				gf_list_add(lsr->unresolved_commands, com);
 5454|      0|			}
 5455|      0|			if (idx==-1) {
  ------------------
  |  Branch (5455:8): [True: 0, False: 0]
  ------------------
 5456|      0|				if (text_content) {
  ------------------
  |  Branch (5456:9): [True: 0, False: 0]
  ------------------
 5457|      0|					GF_DOMText *text = gf_dom_new_text_node(lsr->sg);
 5458|      0|					gf_node_register((GF_Node *)text, NULL);
 5459|      0|					lsr_read_byte_align_string(lsr, &text->textContent, "val");
 5460|      0|					field->new_node = (GF_Node*)text;
 5461|      0|				} else {
 5462|      0|					field->field_ptr = gf_svg_create_attribute_value(field_type);
 5463|      0|					lsr_read_update_value(lsr, NULL, field->fieldIndex, field->fieldType, field->field_ptr, n ? n->sgprivate->tag : 0);
  ------------------
  |  Branch (5463:94): [True: 0, False: 0]
  ------------------
 5464|      0|				}
 5465|      0|			} else {
 5466|      0|				field->field_ptr = lsr_read_update_value_indexed(lsr, (GF_Node*)n, field_type, NULL, idx, com_type==LSR_UPDATE_INSERT, 1, &field->fieldType);
 5467|      0|			}
 5468|      0|		} else {
 5469|      0|			GF_Point2D matrix_tmp;
 5470|      0|			SVG_Point_Angle matrix_tmp_rot;
 5471|      0|			u32 fieldIndex = 0;
 5472|      0|			u32 field_type = 0;
 5473|      0|			Bool text_content = 0;
 5474|      0|			Bool is_lsr_transform = 0;
 5475|      0|			switch (att_type) {
 5476|       |			/*text*/
 5477|      0|			case LSR_UPDATE_TYPE_TEXT_CONTENT:
  ------------------
  |  |  157|      0|#define LSR_UPDATE_TYPE_TEXT_CONTENT	107
  ------------------
  |  Branch (5477:4): [True: 0, False: 0]
  ------------------
 5478|      0|				text_content = 1;
 5479|      0|				break;
 5480|       |			/*matrix.translation, scale or rotate*/
 5481|      0|			case LSR_UPDATE_TYPE_SCALE:
  ------------------
  |  |  154|      0|#define LSR_UPDATE_TYPE_SCALE			79
  ------------------
  |  Branch (5481:4): [True: 0, False: 0]
  ------------------
 5482|      0|				info.far_ptr = (void *)&matrix_tmp;
 5483|      0|				field_type = SVG_Transform_Scale_datatype;
 5484|      0|				is_lsr_transform = 1;
 5485|      0|				break;
 5486|      0|			case LSR_UPDATE_TYPE_ROTATE:
  ------------------
  |  |  153|      0|#define LSR_UPDATE_TYPE_ROTATE			76
  ------------------
  |  Branch (5486:4): [True: 0, False: 0]
  ------------------
 5487|      0|				info.far_ptr = (void *)&matrix_tmp_rot;
 5488|      0|				field_type = SVG_Transform_Rotate_datatype;
 5489|      0|				is_lsr_transform = 1;
 5490|      0|				break;
 5491|      0|			case LSR_UPDATE_TYPE_TRANSLATION:
  ------------------
  |  |  159|      0|#define LSR_UPDATE_TYPE_TRANSLATION		110
  ------------------
  |  Branch (5491:4): [True: 0, False: 0]
  ------------------
 5492|      0|				info.far_ptr = (void *)&matrix_tmp;
 5493|      0|				field_type = SVG_Transform_Translate_datatype;
 5494|      0|				is_lsr_transform = 1;
 5495|      0|				break;
 5496|      0|			default:
  ------------------
  |  Branch (5496:4): [True: 0, False: 0]
  ------------------
 5497|      0|				fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5498|      0|				gf_node_get_attribute_by_tag(n, fieldIndex, 1, 0, &info);
 5499|      0|				field_type = info.fieldType;
 5500|      0|				break;
 5501|      0|			}
 5502|      0|			info.fieldType = field_type;
 5503|      0|			if (is_lsr_transform) {
  ------------------
  |  Branch (5503:8): [True: 0, False: 0]
  ------------------
 5504|      0|				SVG_Transform *dest;
 5505|      0|				if (idx==-1) {
  ------------------
  |  Branch (5505:9): [True: 0, False: 0]
  ------------------
 5506|      0|					lsr_read_update_value(lsr, NULL, fieldIndex, field_type, info.far_ptr, 0);
 5507|      0|				} else {
 5508|      0|					gf_assert(0);
 5509|      0|					return GF_NON_COMPLIANT_BITSTREAM;
 5510|      0|				}
 5511|       |
 5512|       |
 5513|       |//				fieldIndex = gf_node_get_attribute_by_tag((GF_Node*)n, TAG_SVG_ATT_transform, 1, 1, &info);
 5514|      0|				dest = (SVG_Transform *)info.far_ptr;
 5515|      0|				if (com_type) {
  ------------------
  |  Branch (5515:9): [True: 0, False: 0]
  ------------------
 5516|      0|					GF_Point2D scale, translate;
 5517|      0|					SVG_Point_Angle rotate;
 5518|      0|					if (gf_mx2d_decompose(&dest->mat, &scale, &rotate.angle, &translate)) {
  ------------------
  |  Branch (5518:10): [True: 0, False: 0]
  ------------------
 5519|      0|						gf_mx2d_init(dest->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 5520|      0|						if (att_type==LSR_UPDATE_TYPE_SCALE) scale = matrix_tmp;
  ------------------
  |  |  154|      0|#define LSR_UPDATE_TYPE_SCALE			79
  ------------------
  |  Branch (5520:11): [True: 0, False: 0]
  ------------------
 5521|      0|						else if (att_type==LSR_UPDATE_TYPE_TRANSLATION) translate = matrix_tmp;
  ------------------
  |  |  159|      0|#define LSR_UPDATE_TYPE_TRANSLATION		110
  ------------------
  |  Branch (5521:16): [True: 0, False: 0]
  ------------------
 5522|      0|						else if (att_type==LSR_UPDATE_TYPE_ROTATE) rotate = matrix_tmp_rot;
  ------------------
  |  |  153|      0|#define LSR_UPDATE_TYPE_ROTATE			76
  ------------------
  |  Branch (5522:16): [True: 0, False: 0]
  ------------------
 5523|       |
 5524|      0|						gf_mx2d_add_scale(&dest->mat, scale.x, scale.y);
 5525|      0|						gf_mx2d_add_rotation(&dest->mat, 0, 0, rotate.angle);
 5526|      0|						gf_mx2d_add_translation(&dest->mat, translate.x, translate.y);
 5527|      0|					}
 5528|      0|				}
 5529|      0|				else if (att_type==LSR_UPDATE_TYPE_SCALE) gf_mx2d_add_scale(&dest->mat, matrix_tmp.x, matrix_tmp.y);
  ------------------
  |  |  154|      0|#define LSR_UPDATE_TYPE_SCALE			79
  ------------------
  |  Branch (5529:14): [True: 0, False: 0]
  ------------------
 5530|      0|				else if (att_type==LSR_UPDATE_TYPE_TRANSLATION) gf_mx2d_add_translation(&dest->mat, matrix_tmp.x, matrix_tmp.y);
  ------------------
  |  |  159|      0|#define LSR_UPDATE_TYPE_TRANSLATION		110
  ------------------
  |  Branch (5530:14): [True: 0, False: 0]
  ------------------
 5531|      0|				else if (att_type==LSR_UPDATE_TYPE_ROTATE) gf_mx2d_add_rotation(&dest->mat, 0, 0, matrix_tmp_rot.angle);
  ------------------
  |  |  153|      0|#define LSR_UPDATE_TYPE_ROTATE			76
  ------------------
  |  Branch (5531:14): [True: 0, False: 0]
  ------------------
 5532|       |
 5533|      0|				gf_node_changed((GF_Node*)n, &info);
 5534|      0|			}
 5535|      0|			else if (com_type) {
  ------------------
  |  Branch (5535:13): [True: 0, False: 0]
  ------------------
 5536|      0|				if (text_content) {
  ------------------
  |  Branch (5536:9): [True: 0, False: 0]
  ------------------
 5537|      0|					GF_DOMText *t = NULL;
 5538|      0|					if (idx>=0) {
  ------------------
  |  Branch (5538:10): [True: 0, False: 0]
  ------------------
 5539|      0|						if (com_type==LSR_UPDATE_INSERT) {
  ------------------
  |  Branch (5539:11): [True: 0, False: 0]
  ------------------
 5540|      0|							t = gf_dom_new_text_node(n->sgprivate->scenegraph);
 5541|      0|							gf_node_register((GF_Node *)t, n);
 5542|      0|							gf_node_list_insert_child(&((GF_ParentNode *)n)->children, (GF_Node*)t, idx);
 5543|      0|						} else {
 5544|      0|							t = (GF_DOMText *) gf_node_list_get_child(((SVG_Element*)n)->children, idx);
 5545|      0|							if (t->sgprivate->tag!=TAG_DOMText) t = NULL;
  ------------------
  |  Branch (5545:12): [True: 0, False: 0]
  ------------------
 5546|      0|						}
 5547|      0|					} else {
 5548|       |						/*this is a replace, reset ALL node content*/
 5549|      0|						gf_sg_parent_reset(n);
 5550|      0|						t = gf_dom_add_text_node(n, NULL);
 5551|      0|					}
 5552|      0|					lsr_read_byte_align_string(lsr, t ? &t->textContent : NULL, "textContent");
  ------------------
  |  Branch (5552:38): [True: 0, False: 0]
  ------------------
 5553|      0|					gf_node_changed(n, NULL);
 5554|      0|				} else if (idx==-1) {
  ------------------
  |  Branch (5554:16): [True: 0, False: 0]
  ------------------
 5555|      0|					lsr_read_update_value(lsr, (GF_Node*)n, fieldIndex, field_type, info.far_ptr, n->sgprivate->tag);
 5556|      0|				} else {
 5557|      0|					Fixed *v1, *v2;
 5558|       |					//SMIL_Time *t;
 5559|      0|					void *prev, *new_item;
 5560|      0|					void *tmp = lsr_read_update_value_indexed(lsr, (GF_Node*)n, field_type, info.far_ptr, idx, com_type==LSR_UPDATE_INSERT, 0, NULL);
 5561|      0|					switch (field_type) {
 5562|       |					/*generic GF_List containers, no type translation needed*/
 5563|      0|					case SMIL_KeyTimes_datatype/*ITYPE_keyTime*/:
  ------------------
  |  Branch (5563:6): [True: 0, False: 0]
  ------------------
 5564|      0|					case SMIL_KeySplines_datatype/*ITYPE_float*/:
  ------------------
  |  Branch (5564:6): [True: 0, False: 0]
  ------------------
 5565|      0|					case SVG_Points_datatype/*ITYPE_point*/:
  ------------------
  |  Branch (5565:6): [True: 0, False: 0]
  ------------------
 5566|      0|					case SMIL_Times_datatype/*ITYPE_smil_time*/:
  ------------------
  |  Branch (5566:6): [True: 0, False: 0]
  ------------------
 5567|      0|						new_item = gf_list_pop_front(*(GF_List **)tmp);
 5568|      0|						if (com_type==LSR_UPDATE_INSERT) {
  ------------------
  |  Branch (5568:11): [True: 0, False: 0]
  ------------------
 5569|      0|							gf_list_insert(*(SVG_Coordinates*)info.far_ptr, new_item, idx);
 5570|      0|						} else {
 5571|      0|							prev = gf_list_get(*(SVG_Coordinates*)info.far_ptr, idx);
 5572|      0|							gf_free(prev);
 5573|      0|							gf_list_rem(*(SVG_Coordinates*)info.far_ptr, idx);
 5574|      0|							gf_list_insert(*(SVG_Coordinates*)info.far_ptr, new_item, idx);
 5575|      0|						}
 5576|      0|						gf_node_changed((GF_Node*)n, NULL);
 5577|      0|						gf_list_del(*(GF_List **)tmp);
 5578|      0|						gf_free(tmp);
 5579|      0|						break;
 5580|       |					/*list of floats - to check when implementing it...*/
 5581|      0|					case SMIL_KeyPoints_datatype/*ITYPE_0to1 - keyPoints*/:
  ------------------
  |  Branch (5581:6): [True: 0, False: 0]
  ------------------
 5582|      0|						v1 = (Fixed *) gf_list_pop_front(*(GF_List **)tmp);
 5583|      0|						v2 = (Fixed *) gf_list_pop_front(*(GF_List **)tmp);
 5584|      0|						gf_list_del(*(GF_List **)tmp);
 5585|      0|						gf_free(tmp);
 5586|       |
 5587|      0|						if (com_type==LSR_UPDATE_INSERT) {
  ------------------
  |  Branch (5587:11): [True: 0, False: 0]
  ------------------
 5588|      0|							gf_list_insert(*(SVG_Coordinates*)info.far_ptr, v1, idx);
 5589|      0|							gf_list_insert(*(SVG_Coordinates*)info.far_ptr, v2, idx+1);
 5590|      0|						} else {
 5591|      0|							prev = gf_list_get(*(SVG_Coordinates*)info.far_ptr, idx);
 5592|      0|							gf_free(prev);
 5593|      0|							gf_list_rem(*(SVG_Coordinates*)info.far_ptr, idx);
 5594|      0|							prev = gf_list_get(*(SVG_Coordinates*)info.far_ptr, idx);
 5595|      0|							gf_free(prev);
 5596|      0|							gf_list_rem(*(SVG_Coordinates*)info.far_ptr, idx);
 5597|      0|							gf_list_insert(*(SVG_Coordinates*)info.far_ptr, v1, idx);
 5598|      0|							gf_list_insert(*(SVG_Coordinates*)info.far_ptr, v2, idx);
 5599|      0|						}
 5600|      0|						gf_node_changed((GF_Node*)n, NULL);
 5601|      0|						break;
 5602|      0|					case SVG_ViewBox_datatype:
  ------------------
  |  Branch (5602:6): [True: 0, False: 0]
  ------------------
 5603|      0|						v1 = (Fixed*)tmp;
 5604|      0|						switch (idx) {
  ------------------
  |  Branch (5604:15): [True: 0, False: 0]
  ------------------
 5605|      0|						case 0:
  ------------------
  |  Branch (5605:7): [True: 0, False: 0]
  ------------------
 5606|      0|							((SVG_ViewBox*)info.far_ptr)->x = *v1;
 5607|      0|							break;
 5608|      0|						case 1:
  ------------------
  |  Branch (5608:7): [True: 0, False: 0]
  ------------------
 5609|      0|							((SVG_ViewBox*)info.far_ptr)->y = *v1;
 5610|      0|							break;
 5611|      0|						case 2:
  ------------------
  |  Branch (5611:7): [True: 0, False: 0]
  ------------------
 5612|      0|							((SVG_ViewBox*)info.far_ptr)->width = *v1;
 5613|      0|							break;
 5614|      0|						case 3:
  ------------------
  |  Branch (5614:7): [True: 0, False: 0]
  ------------------
 5615|      0|							((SVG_ViewBox*)info.far_ptr)->height = *v1;
 5616|      0|							break;
 5617|      0|						}
 5618|      0|						gf_free(tmp);
 5619|      0|						gf_node_changed((GF_Node*)n, NULL);
 5620|      0|						break;
 5621|      0|					case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (5621:6): [True: 0, False: 0]
  ------------------
 5622|      0|						v1 = (Fixed*)tmp;
 5623|      0|						if (com_type==LSR_UPDATE_INSERT) {
  ------------------
  |  Branch (5623:11): [True: 0, False: 0]
  ------------------
 5624|      0|							SVG_StrokeDashArray*da = (SVG_StrokeDashArray*)info.far_ptr;
 5625|       |							/*use MFFloat for insert*/
 5626|      0|							if (gf_sg_vrml_mf_insert(&da->array, GF_SG_VRML_MFFLOAT, (void*) &v2, idx)==GF_OK)
  ------------------
  |  Branch (5626:12): [True: 0, False: 0]
  ------------------
 5627|      0|								*v2 = *v1;
 5628|      0|						} else {
 5629|      0|							SVG_StrokeDashArray*da = (SVG_StrokeDashArray*)info.far_ptr;
 5630|      0|							if (idx<(s32)da->array.count) da->array.vals[idx] = *v1;
  ------------------
  |  Branch (5630:12): [True: 0, False: 0]
  ------------------
 5631|      0|						}
 5632|      0|						gf_free(tmp);
 5633|      0|						gf_node_changed((GF_Node*)n, NULL);
 5634|      0|						break;
 5635|      0|					default:
  ------------------
  |  Branch (5635:6): [True: 0, False: 0]
  ------------------
 5636|      0|						gf_free(tmp);
 5637|      0|						break;
 5638|      0|					}
 5639|      0|				}
 5640|      0|			} else {
 5641|      0|				GF_FieldInfo tmp;
 5642|      0|				tmp = info;
 5643|      0|				if (idx==-1) {
  ------------------
  |  Branch (5643:9): [True: 0, False: 0]
  ------------------
 5644|      0|					tmp.far_ptr = gf_svg_create_attribute_value(info.fieldType);
 5645|      0|					lsr_read_update_value(lsr, n, fieldIndex, field_type, tmp.far_ptr, n->sgprivate->tag);
 5646|      0|				} else {
 5647|      0|					tmp.far_ptr = lsr_read_update_value_indexed(lsr, n, field_type, NULL, idx, 0, 1, NULL);
 5648|      0|				}
 5649|      0|				gf_svg_attributes_add(&info, &tmp, &info, 0);
 5650|      0|				gf_svg_delete_attribute_value(info.fieldType, tmp.far_ptr, gf_node_get_graph(n));
 5651|      0|			}
 5652|      0|		}
 5653|      0|	}
 5654|       |	/*copy from node*/
 5655|      0|	else if (operandNode && (op_att_type>=0)) {
  ------------------
  |  Branch (5655:11): [True: 0, False: 0]
  |  Branch (5655:26): [True: 0, False: 0]
  ------------------
 5656|      0|		u32 opFieldIndex = gf_lsr_anim_type_to_attribute(op_att_type);
 5657|      0|		if (com_list) {
  ------------------
  |  Branch (5657:7): [True: 0, False: 0]
  ------------------
 5658|      0|			com = gf_sg_command_new(lsr->sg, com_type ? GF_SG_LSR_REPLACE : GF_SG_LSR_ADD);
  ------------------
  |  Branch (5658:37): [True: 0, False: 0]
  ------------------
 5659|      0|			gf_list_add(com_list, com);
 5660|      0|			com->node = n;
 5661|      0|			gf_node_register(com->node, NULL);
 5662|      0|			com->fromNodeID = op_idref;
 5663|      0|			com->fromFieldIndex = opFieldIndex;
 5664|      0|			field = gf_sg_command_field_new(com);
 5665|      0|			field->pos = idx;
 5666|      0|			field->fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5667|      0|		} else {
 5668|      0|			u32 fieldIndex;
 5669|      0|			GF_FieldInfo op_info;
 5670|      0|			fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5671|      0|			gf_node_get_field(n, fieldIndex, &info);
 5672|      0|			gf_node_get_field(operandNode, opFieldIndex, &op_info);
 5673|      0|			if (com_type) {
  ------------------
  |  Branch (5673:8): [True: 0, False: 0]
  ------------------
 5674|      0|				gf_svg_attributes_copy(&info, &op_info, 0);
 5675|      0|			} else {
 5676|      0|				gf_svg_attributes_add(&info, &op_info, &info, 0);
 5677|      0|			}
 5678|      0|		}
 5679|      0|	}
 5680|       |
 5681|      0|	lsr_read_any_attribute(lsr, NULL, 1);
 5682|       |
 5683|       |	/*if not add*/
 5684|      0|	if (!com_type) return GF_OK;
  ------------------
  |  Branch (5684:6): [True: 0, False: 0]
  ------------------
 5685|       |
 5686|       |	/*list replacement*/
 5687|      0|	GF_LSR_READ_INT(lsr, type, 1, "opt_group");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 5688|      0|	if (type) {
  ------------------
  |  Branch (5688:6): [True: 0, False: 0]
  ------------------
 5689|       |
 5690|      0|		if (com_list) {
  ------------------
  |  Branch (5690:7): [True: 0, False: 0]
  ------------------
 5691|      0|			u32 count;
 5692|      0|			GF_ChildNodeItem *last = NULL;
 5693|       |
 5694|      0|			if (com_type==LSR_UPDATE_INSERT) count = 1;
  ------------------
  |  Branch (5694:8): [True: 0, False: 0]
  ------------------
 5695|      0|			else count = lsr_read_vluimsbf5(lsr, "count");
 5696|       |
 5697|      0|			com = gf_sg_command_new(lsr->sg, (com_type==LSR_UPDATE_REPLACE) ? GF_SG_LSR_REPLACE : GF_SG_LSR_INSERT);
  ------------------
  |  Branch (5697:37): [True: 0, False: 0]
  ------------------
 5698|      0|			gf_list_add(com_list, com);
 5699|      0|			com->node = n;
 5700|      0|			gf_node_register(com->node, NULL);
 5701|      0|			field = gf_sg_command_field_new(com);
 5702|      0|			field->pos = idx;
 5703|       |
 5704|      0|			if (!count && (att_type==LSR_UPDATE_TYPE_TEXT_CONTENT)) {
  ------------------
  |  |  157|      0|#define LSR_UPDATE_TYPE_TEXT_CONTENT	107
  ------------------
  |  Branch (5704:8): [True: 0, False: 0]
  |  Branch (5704:18): [True: 0, False: 0]
  ------------------
 5705|      0|				field->fieldIndex = -1;
 5706|      0|			} else if (count==1) {
  ------------------
  |  Branch (5706:15): [True: 0, False: 0]
  ------------------
 5707|      0|				field->new_node = lsr_read_update_content_model(lsr, (SVG_Element *) n);
 5708|      0|				gf_node_register(field->new_node, NULL);
 5709|      0|				if (att_type>=0) field->fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
  ------------------
  |  Branch (5709:9): [True: 0, False: 0]
  ------------------
 5710|      0|			} else {
 5711|      0|				field->fieldType = SVG_NodeList_datatype;
 5712|      0|				field->field_ptr = &field->node_list;
 5713|      0|				while (count) {
  ------------------
  |  Branch (5713:12): [True: 0, False: 0]
  ------------------
 5714|      0|					GF_Node *new_node = lsr_read_update_content_model(lsr, (SVG_Element *) n);
 5715|      0|					gf_node_register(new_node, NULL);
 5716|      0|					gf_node_list_add_child_last(& field->node_list, new_node, &last);
 5717|      0|					count--;
 5718|      0|					if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (5718:10): [True: 0, False: 0]
  ------------------
 5719|      0|				}
 5720|      0|			}
 5721|      0|		} else {
 5722|      0|			SVG_Element*elt = (SVG_Element*)n;
 5723|      0|			GF_ChildNodeItem *last = NULL;
 5724|      0|			u32 count;
 5725|      0|			if (com_type==LSR_UPDATE_INSERT) count = 1;
  ------------------
  |  Branch (5725:8): [True: 0, False: 0]
  ------------------
 5726|      0|			else count = lsr_read_vluimsbf5(lsr, "count");
 5727|       |
 5728|      0|			if (com_type==LSR_UPDATE_REPLACE) {
  ------------------
  |  Branch (5728:8): [True: 0, False: 0]
  ------------------
 5729|      0|				if (idx>=0) {
  ------------------
  |  Branch (5729:9): [True: 0, False: 0]
  ------------------
 5730|      0|					GF_Node *new_node = gf_node_list_del_child_idx(&elt->children, idx);
 5731|      0|					if (new_node) gf_node_unregister(new_node, n);
  ------------------
  |  Branch (5731:10): [True: 0, False: 0]
  ------------------
 5732|      0|				} else {
 5733|      0|					gf_node_unregister_children(n, elt->children);
 5734|      0|					elt->children = NULL;
 5735|      0|				}
 5736|      0|			}
 5737|      0|			if ((com_type==LSR_UPDATE_INSERT) || (gf_lsr_anim_type_to_attribute(att_type) == TAG_LSR_ATT_children)) {
  ------------------
  |  Branch (5737:8): [True: 0, False: 0]
  |  Branch (5737:41): [True: 0, False: 0]
  ------------------
 5738|      0|				while (count) {
  ------------------
  |  Branch (5738:12): [True: 0, False: 0]
  ------------------
 5739|      0|					GF_Node *new_node = lsr_read_update_content_model(lsr, elt);
 5740|      0|					if (new_node) {
  ------------------
  |  Branch (5740:10): [True: 0, False: 0]
  ------------------
 5741|      0|						if (idx>=0) {
  ------------------
  |  Branch (5741:11): [True: 0, False: 0]
  ------------------
 5742|      0|							gf_node_list_insert_child(&elt->children, new_node, idx);
 5743|      0|						} else {
 5744|      0|							gf_node_list_add_child_last(&elt->children, new_node, &last);
 5745|      0|						}
 5746|      0|						gf_node_register(new_node, n);
 5747|      0|					}
 5748|      0|					count--;
 5749|      0|					if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (5749:10): [True: 0, False: 0]
  ------------------
 5750|      0|				}
 5751|      0|				gf_node_changed(n, NULL);
 5752|      0|			}
 5753|       |			/*node replacement*/
 5754|      0|			else if ((att_type==-1) && (count==1)) {
  ------------------
  |  Branch (5754:13): [True: 0, False: 0]
  |  Branch (5754:31): [True: 0, False: 0]
  ------------------
 5755|      0|				GF_Node *new_node = lsr_read_update_content_model(lsr, elt);
 5756|      0|				gf_node_replace((GF_Node*)elt, new_node, 0);
 5757|      0|			}
 5758|      0|		}
 5759|      0|	}
 5760|      0|	return GF_OK;
 5761|      0|}
lsr_dec.c:lsr_get_attribute_name:
 5295|   438k|{
 5296|   438k|	u32 val = 1;
 5297|   438k|	GF_LSR_READ_INT(lsr, val, 1, "has_attributeName");
  ------------------
  |  |   34|   438k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   438k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 438k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|   438k|	} else {\
  |  |   39|   438k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   438k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   438k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 438k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   438k|	}\
  |  |   42|   438k|}
  ------------------
 5298|   438k|	if (!val) return -1;
  ------------------
  |  Branch (5298:6): [True: 235k, False: 203k]
  ------------------
 5299|       |
 5300|   203k|	GF_LSR_READ_INT(lsr, val, 1, "choice");
  ------------------
  |  |   34|   203k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   203k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 203k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|   203k|	} else {\
  |  |   39|   203k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   203k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   203k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 203k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   203k|	}\
  |  |   42|   203k|}
  ------------------
 5301|   203k|	if (val) {
  ------------------
  |  Branch (5301:6): [True: 98.4k, False: 104k]
  ------------------
 5302|  98.4k|		lsr_read_vluimsbf5(lsr, "item[i]");
 5303|  98.4k|		lsr_read_vluimsbf5(lsr, "item[i]");
 5304|  98.4k|		return -1;
 5305|   104k|	} else {
 5306|   104k|		GF_LSR_READ_INT(lsr, val, 8, "attributeName");
  ------------------
  |  |   34|   104k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   104k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 1, False: 104k]
  |  |  ------------------
  |  |   36|      1|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      1|		(_val) = 0;\
  |  |   38|   104k|	} else {\
  |  |   39|   104k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   104k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   104k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 104k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   104k|	}\
  |  |   42|   104k|}
  ------------------
 5307|   104k|		return val;
 5308|   104k|	}
 5309|   203k|}
lsr_dec.c:lsr_read_id:
  768|    166|{
  769|    166|	GF_FieldInfo info;
  770|    166|	u32 val, id, i, count;
  771|    166|	char *name;
  772|    166|	GF_LSR_READ_INT(lsr, val, 1, "has_id");
  ------------------
  |  |   34|    166|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    166|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 166]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    166|	} else {\
  |  |   39|    166|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    166|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    166|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 166]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    166|	}\
  |  |   42|    166|}
  ------------------
  773|    166|	if (!val) return;
  ------------------
  |  Branch (773:6): [True: 109, False: 57]
  ------------------
  774|       |
  775|     57|	name = NULL;
  776|     57|	id = 1+lsr_read_vluimsbf5(lsr, "ID");
  777|     57|	gf_node_set_id(n, id, name);
  778|       |
  779|     57|	GF_LSR_READ_INT(lsr, val, 1, "reserved");
  ------------------
  |  |   34|     57|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     57|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 57]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     57|	} else {\
  |  |   39|     57|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     57|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     57|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 57]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     57|	}\
  |  |   42|     57|}
  ------------------
  780|       |	/*currently not used*/
  781|     57|	if (val) {
  ------------------
  |  Branch (781:6): [True: 32, False: 25]
  ------------------
  782|     32|		u32 len = lsr_read_vluimsbf5(lsr, "len");
  783|     32|		GF_LSR_READ_INT(lsr, val, len, "reserved");
  ------------------
  |  |   34|     32|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     32|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 32]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     32|	} else {\
  |  |   39|     32|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     32|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     32|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     32|	}\
  |  |   42|     32|}
  ------------------
  784|     32|	}
  785|       |
  786|       |	/*update all pending HREFs*/
  787|     57|	count = gf_list_count(lsr->deferred_hrefs);
  788|    719|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (788:12): [True: 662, False: 57]
  ------------------
  789|    662|		XMLRI *href = (XMLRI *)gf_list_get(lsr->deferred_hrefs, i);
  790|    662|		char *str_id = href ? href->string : NULL;
  ------------------
  |  Branch (790:18): [True: 662, False: 0]
  ------------------
  791|    662|		if (!str_id) return;
  ------------------
  |  Branch (791:7): [True: 0, False: 662]
  ------------------
  792|       |
  793|    662|		if (str_id[0] == '#') str_id++;
  ------------------
  |  Branch (793:7): [True: 0, False: 662]
  ------------------
  794|       |		/*skip 'N'*/
  795|    662|		str_id++;
  796|    662|		if (id == (1 + (u32) atoi(str_id))) {
  ------------------
  |  Branch (796:7): [True: 5, False: 657]
  ------------------
  797|      5|			href->target = (SVG_Element*) n;
  798|      5|			gf_free(href->string);
  799|      5|			href->string = NULL;
  800|      5|			gf_list_rem(lsr->deferred_hrefs, i);
  801|      5|			i--;
  802|      5|			count--;
  803|      5|		}
  804|    662|	}
  805|       |
  806|       |	/*update unresolved listeners*/
  807|     57|	count = gf_list_count(lsr->deferred_listeners);
  808|     57|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (808:12): [True: 0, False: 57]
  ------------------
  809|      0|		GF_Node *par;
  810|      0|		XMLRI *observer = NULL;
  811|      0|		GF_Node *listener = (GF_Node *)gf_list_get(lsr->deferred_listeners, i);
  812|       |
  813|      0|		par = NULL;
  814|      0|		if (gf_node_get_attribute_by_tag(listener, TAG_XMLEV_ATT_observer, GF_FALSE, GF_FALSE, &info) == GF_OK) {
  ------------------
  |  Branch (814:7): [True: 0, False: 0]
  ------------------
  815|      0|			observer = (XMLRI*)info.far_ptr;
  816|      0|			if (observer->type == XMLRI_ELEMENTID) {
  ------------------
  |  Branch (816:8): [True: 0, False: 0]
  ------------------
  817|      0|				if (!observer->target) continue;
  ------------------
  |  Branch (817:9): [True: 0, False: 0]
  ------------------
  818|      0|				else par = (GF_Node*)observer->target;
  819|      0|			}
  820|      0|		}
  821|      0|		if (gf_node_get_attribute_by_tag(listener, TAG_XMLEV_ATT_target, GF_FALSE, GF_FALSE, &info) == GF_OK) {
  ------------------
  |  Branch (821:7): [True: 0, False: 0]
  ------------------
  822|      0|			if (((XMLRI*)info.far_ptr)->type == XMLRI_ELEMENTID) {
  ------------------
  |  Branch (822:8): [True: 0, False: 0]
  ------------------
  823|      0|				if (!((XMLRI*)info.far_ptr)->target) continue;
  ------------------
  |  Branch (823:9): [True: 0, False: 0]
  ------------------
  824|      0|				else if (!par) par = (GF_Node*)((XMLRI*)info.far_ptr)->target;
  ------------------
  |  Branch (824:14): [True: 0, False: 0]
  ------------------
  825|      0|			}
  826|      0|		}
  827|       |		/*FIXME - double check with XML events*/
  828|      0|		if (!par && !observer) {
  ------------------
  |  Branch (828:7): [True: 0, False: 0]
  |  Branch (828:15): [True: 0, False: 0]
  ------------------
  829|      0|			if (gf_node_get_attribute_by_tag(listener, TAG_XMLEV_ATT_event, GF_FALSE, GF_FALSE, &info) == GF_OK) {
  ------------------
  |  Branch (829:8): [True: 0, False: 0]
  ------------------
  830|      0|				XMLEV_Event *ev = (XMLEV_Event *)info.far_ptr;
  831|       |				/*all non-UI get attched to root*/
  832|      0|				if (ev
  ------------------
  |  Branch (832:9): [True: 0, False: 0]
  ------------------
  833|      0|					&& (ev->type > GF_EVENT_MOUSEWHEEL)
  ------------------
  |  Branch (833:9): [True: 0, False: 0]
  ------------------
  834|      0|					&& (ev->type!=GF_EVENT_MOUSEOUT)
  ------------------
  |  Branch (834:9): [True: 0, False: 0]
  ------------------
  835|      0|					&& (ev->type!=GF_EVENT_MOUSEOVER)
  ------------------
  |  Branch (835:9): [True: 0, False: 0]
  ------------------
  836|      0|				) {
  837|      0|					par = (GF_Node*) lsr->current_root;
  838|      0|				}
  839|      0|			}
  840|      0|		}
  841|       |
  842|      0|		if (par)
  ------------------
  |  Branch (842:7): [True: 0, False: 0]
  ------------------
  843|      0|			gf_node_dom_listener_add(par, listener);
  844|      0|		else
  845|      0|			gf_assert(0);
  846|      0|		gf_list_rem(lsr->deferred_listeners, i);
  847|      0|		i--;
  848|      0|		count--;
  849|      0|	}
  850|       |
  851|       |	/*update all pending animations*/
  852|     57|	count = gf_list_count(lsr->deferred_anims);
  853|    116|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (853:12): [True: 59, False: 57]
  ------------------
  854|     59|		SVG_Element *elt = (SVG_Element *)gf_list_get(lsr->deferred_anims, i);
  855|     59|		if (lsr_setup_smil_anim(lsr, elt, NULL)) {
  ------------------
  |  Branch (855:7): [True: 0, False: 59]
  ------------------
  856|      0|			gf_list_rem(lsr->deferred_anims, i);
  857|      0|			i--;
  858|      0|			count--;
  859|      0|			gf_node_init((GF_Node*)elt);
  860|      0|		}
  861|     59|	}
  862|     57|}
lsr_dec.c:lsr_setup_smil_anim:
 2216|     71|{
 2217|     71|	GF_FieldInfo info;
 2218|     71|	u32 coded_type, not_res;
 2219|     71|	GF_Node *target;
 2220|     71|	Bool is_animateMotion, is_animateTransform;
 2221|     71|	XMLRI *xlink;
 2222|     71|	SMIL_AttributeName *name = NULL;
 2223|     71|	SMIL_AnimateValue *value;
 2224|       |
 2225|       |	/*setup smil events*/
 2226|     71|	not_res = 0;
 2227|     71|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_begin, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2227:6): [True: 17, False: 54]
  ------------------
 2228|     17|		if (!lsr_init_smil_times(lsr, anim, *(GF_List**)info.far_ptr, anim_parent)) not_res++;
  ------------------
  |  Branch (2228:7): [True: 17, False: 0]
  ------------------
 2229|     17|	}
 2230|       |
 2231|     71|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_end, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2231:6): [True: 0, False: 71]
  ------------------
 2232|      0|		if (!lsr_init_smil_times(lsr, anim, *(GF_List**)info.far_ptr, anim_parent)) not_res++;
  ------------------
  |  Branch (2232:7): [True: 0, False: 0]
  ------------------
 2233|      0|	}
 2234|       |
 2235|       |
 2236|       |	/*get xlink*/
 2237|     71|	xlink = NULL;
 2238|     71|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_XLINK_ATT_href, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2238:6): [True: 62, False: 9]
  ------------------
 2239|     62|		xlink = info.far_ptr;
 2240|     62|	}
 2241|       |
 2242|       |	/*setup target node*/
 2243|     71|	if (!xlink || !xlink->target) {
  ------------------
  |  Branch (2243:6): [True: 9, False: 62]
  |  Branch (2243:16): [True: 25, False: 37]
  ------------------
 2244|       |		/*target not received*/
 2245|     34|		if (xlink && (xlink->type == XMLRI_ELEMENTID)) return GF_FALSE;
  ------------------
  |  Branch (2245:7): [True: 25, False: 9]
  |  Branch (2245:16): [True: 24, False: 1]
  ------------------
 2246|       |
 2247|     10|		if (!xlink) {
  ------------------
  |  Branch (2247:7): [True: 9, False: 1]
  ------------------
 2248|       |			/*target is parent, initialize xlink (needed by anim module)*/
 2249|      9|			if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_XLINK_ATT_href, GF_TRUE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2249:8): [True: 9, False: 0]
  ------------------
 2250|      9|				xlink = info.far_ptr;
 2251|      9|			} else {
 2252|      0|				return GF_FALSE;
 2253|      0|			}
 2254|      9|		}
 2255|       |
 2256|     10|		xlink->type = XMLRI_ELEMENTID;
 2257|     10|		xlink->target = anim_parent;
 2258|     10|		gf_node_register_iri(lsr->sg, xlink);
 2259|     10|		target = (GF_Node *)anim_parent;
 2260|     37|	} else {
 2261|     37|		target = (GF_Node *)xlink->target;
 2262|     37|	}
 2263|     47|	if (!target || not_res) return GF_FALSE;
  ------------------
  |  Branch (2263:6): [True: 0, False: 47]
  |  Branch (2263:17): [True: 17, False: 30]
  ------------------
 2264|       |
 2265|     30|	is_animateTransform = is_animateMotion = GF_FALSE;
 2266|     30|	if (anim->sgprivate->tag==TAG_SVG_animateMotion) is_animateMotion = GF_TRUE;
  ------------------
  |  Branch (2266:6): [True: 2, False: 28]
  ------------------
 2267|     28|	else if (anim->sgprivate->tag==TAG_SVG_animateTransform) {
  ------------------
  |  Branch (2267:11): [True: 13, False: 15]
  ------------------
 2268|     13|		is_animateTransform = GF_TRUE;
 2269|     13|	}
 2270|     30|	if (is_animateMotion) goto translate_vals;
  ------------------
  |  Branch (2270:6): [True: 2, False: 28]
  ------------------
 2271|       |
 2272|       |	/*for all except animateMotion, get attributeName*/
 2273|     28|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_attributeName, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2273:6): [True: 2, False: 26]
  ------------------
 2274|      2|		name = info.far_ptr;
 2275|      2|	}
 2276|     28|	if (!name) {
  ------------------
  |  Branch (2276:6): [True: 26, False: 2]
  ------------------
 2277|     26|		return GF_FALSE;
 2278|     26|	}
 2279|       |
 2280|      2|	if (!name->field_ptr) {
  ------------------
  |  Branch (2280:6): [True: 2, False: 0]
  ------------------
 2281|      2|		if (gf_node_get_attribute_by_tag((GF_Node *)target, name->type, GF_TRUE, GF_FALSE, &info)!=GF_OK) return GF_FALSE;
  ------------------
  |  Branch (2281:7): [True: 0, False: 2]
  ------------------
 2282|      2|		name->field_ptr = info.far_ptr;
 2283|      2|		name->type = info.fieldType;
 2284|      2|		name->tag = info.fieldIndex;
 2285|      2|	}
 2286|       |
 2287|       |
 2288|       |	/*browse all anim types and retranslate anim values. This must be done in 2 steps since we may not have received
 2289|       |	the target node when parsing the animation node*/
 2290|      4|translate_vals:
 2291|       |
 2292|       |	/*and setup anim values*/
 2293|      4|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_from, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2293:6): [True: 1, False: 3]
  ------------------
 2294|      1|		if (is_animateTransform) {
  ------------------
  |  Branch (2294:7): [True: 0, False: 1]
  ------------------
 2295|      0|			name->type = ((SMIL_AnimateValue*)info.far_ptr)->type;
 2296|      1|		} else {
 2297|      1|			value = info.far_ptr;
 2298|      1|			coded_type = value->type;
 2299|      1|			value->type = is_animateMotion ? SVG_Motion_datatype : name->type;
  ------------------
  |  Branch (2299:18): [True: 0, False: 1]
  ------------------
 2300|      1|			lsr_translate_anim_value(lsr, value, coded_type);
 2301|      1|		}
 2302|      1|	}
 2303|      4|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_by, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2303:6): [True: 2, False: 2]
  ------------------
 2304|      2|		if (is_animateTransform) {
  ------------------
  |  Branch (2304:7): [True: 0, False: 2]
  ------------------
 2305|      0|			name->type = ((SMIL_AnimateValue*)info.far_ptr)->type;
 2306|      2|		} else {
 2307|      2|			value = info.far_ptr;
 2308|      2|			coded_type = value->type;
 2309|      2|			value->type = is_animateMotion ? SVG_Motion_datatype : name->type;
  ------------------
  |  Branch (2309:18): [True: 0, False: 2]
  ------------------
 2310|      2|			lsr_translate_anim_value(lsr, value, coded_type);
 2311|      2|		}
 2312|      2|	}
 2313|      4|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_to, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2313:6): [True: 2, False: 2]
  ------------------
 2314|      2|		if (is_animateTransform) {
  ------------------
  |  Branch (2314:7): [True: 0, False: 2]
  ------------------
 2315|      0|			name->type = ((SMIL_AnimateValue*)info.far_ptr)->type;
 2316|      2|		} else {
 2317|      2|			value = info.far_ptr;
 2318|      2|			coded_type = value->type;
 2319|      2|			value->type = is_animateMotion ? SVG_Motion_datatype : name->type;
  ------------------
  |  Branch (2319:18): [True: 1, False: 1]
  ------------------
 2320|      2|			lsr_translate_anim_value(lsr, value, coded_type);
 2321|      2|		}
 2322|      2|	}
 2323|      4|	if (gf_node_get_attribute_by_tag((GF_Node *)anim, TAG_SVG_ATT_values, GF_FALSE, GF_FALSE, &info)==GF_OK) {
  ------------------
  |  Branch (2323:6): [True: 1, False: 3]
  ------------------
 2324|      1|		if (is_animateTransform) {
  ------------------
  |  Branch (2324:7): [True: 0, False: 1]
  ------------------
 2325|      0|			name->type = ((SMIL_AnimateValues*)info.far_ptr)->type;
 2326|      1|		} else {
 2327|      1|			SMIL_AnimateValues *values = info.far_ptr;
 2328|      1|			coded_type = values->type;
 2329|      1|			values->type = is_animateMotion ? SVG_Motion_datatype : name->type;
  ------------------
  |  Branch (2329:19): [True: 1, False: 0]
  ------------------
 2330|      1|			values->laser_strings = 0;
 2331|      1|			lsr_translate_anim_values(lsr, values, coded_type);
 2332|      1|		}
 2333|      1|	}
 2334|       |
 2335|      4|	return GF_TRUE;
 2336|      2|}
lsr_dec.c:lsr_init_smil_times:
 2187|     17|{
 2188|     17|	u32 i, count;
 2189|     17|	count = gf_list_count(times);
 2190|    136|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (2190:12): [True: 136, False: 0]
  ------------------
 2191|    136|		SMIL_Time *t = (SMIL_Time *)gf_list_get(times, i);
 2192|    136|		if (t->type==GF_SMIL_TIME_EVENT) {
  ------------------
  |  Branch (2192:7): [True: 68, False: 68]
  ------------------
 2193|     68|			if (t->element_id) {
  ------------------
  |  Branch (2193:8): [True: 17, False: 51]
  ------------------
 2194|     17|				if (t->element_id[0]=='N') {
  ------------------
  |  Branch (2194:9): [True: 17, False: 0]
  ------------------
 2195|     17|					t->element = gf_sg_find_node(lsr->sg, atoi(t->element_id+1) + 1);
 2196|     17|				} else {
 2197|      0|					t->element = gf_sg_find_node_by_name(lsr->sg, t->element_id);
 2198|      0|				}
 2199|     17|				if (!t->element) return GF_FALSE;
  ------------------
  |  Branch (2199:9): [True: 17, False: 0]
  ------------------
 2200|      0|				gf_free(t->element_id);
 2201|      0|				t->element_id = NULL;
 2202|      0|			}
 2203|     51|			else if (!t->element) {
  ------------------
  |  Branch (2203:13): [True: 6, False: 45]
  ------------------
 2204|      6|				if (t->event.parameter && (t->event.type==GF_EVENT_KEYDOWN) ) {
  ------------------
  |  Branch (2204:9): [True: 2, False: 4]
  |  Branch (2204:31): [True: 0, False: 2]
  ------------------
 2205|      0|					t->element = lsr->sg->RootNode ? lsr->sg->RootNode : lsr->current_root;
  ------------------
  |  Branch (2205:19): [True: 0, False: 0]
  ------------------
 2206|      6|				} else {
 2207|      6|					t->element = (GF_Node*)parent;
 2208|      6|				}
 2209|      6|			}
 2210|     68|		}
 2211|    136|	}
 2212|      0|	return GF_TRUE;
 2213|     17|}
lsr_dec.c:lsr_translate_anim_value:
 1905|      5|{
 1906|      5|	switch (val->type) {
 1907|      0|	case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (1907:2): [True: 0, False: 5]
  ------------------
 1908|       |		//if list of fixed only
 1909|      0|		if (coded_type == 8) {
  ------------------
  |  Branch (1909:7): [True: 0, False: 0]
  ------------------
 1910|      0|			SVG_StrokeDashArray *da;
 1911|      0|			GF_List *l = (GF_List *)val->value;
 1912|      0|			u32 i;
 1913|      0|			GF_SAFEALLOC(da, SVG_StrokeDashArray);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 1914|      0|			if (!da) {
  ------------------
  |  Branch (1914:8): [True: 0, False: 0]
  ------------------
 1915|      0|				lsr->last_error = GF_OUT_OF_MEM;
 1916|      0|				return;
 1917|      0|			}
 1918|      0|			da->array.count = gf_list_count(l);
 1919|      0|			if (!da->array.count) {
  ------------------
  |  Branch (1919:8): [True: 0, False: 0]
  ------------------
 1920|      0|				da->type = SVG_STROKEDASHARRAY_INHERIT;
 1921|      0|			} else {
 1922|      0|				da->type = SVG_STROKEDASHARRAY_ARRAY;
 1923|      0|				da->array.vals = (Fixed *) gf_malloc(sizeof(Fixed)*da->array.count);
 1924|      0|				da->array.units = (u8 *) gf_malloc(sizeof(u8)*da->array.count);
 1925|      0|				if (!da->array.vals || !da->array.units) {
  ------------------
  |  Branch (1925:9): [True: 0, False: 0]
  |  Branch (1925:28): [True: 0, False: 0]
  ------------------
 1926|      0|					lsr->last_error = GF_OUT_OF_MEM;
 1927|      0|					return;
 1928|      0|				}
 1929|       |
 1930|      0|				for (i=0; i<da->array.count; i++) {
  ------------------
  |  Branch (1930:15): [True: 0, False: 0]
  ------------------
 1931|      0|					Fixed *v = (Fixed *)gf_list_get(l, i);
 1932|      0|					da->array.vals[i] = *v;
 1933|      0|					da->array.units[i] = 0;
 1934|      0|					gf_free(v);
 1935|      0|				}
 1936|      0|			}
 1937|      0|			gf_list_del(l);
 1938|      0|			val->value = da;
 1939|      0|			return;
 1940|      0|		}
 1941|      0|		break;
 1942|      0|	case SVG_ViewBox_datatype:
  ------------------
  |  Branch (1942:2): [True: 0, False: 5]
  ------------------
 1943|       |		//if list of fixed only
 1944|      0|		if (coded_type == 8) {
  ------------------
  |  Branch (1944:7): [True: 0, False: 0]
  ------------------
 1945|      0|			SVG_ViewBox *vb;
 1946|      0|			GF_List *l = (GF_List *)val->value;
 1947|      0|			GF_SAFEALLOC(vb, SVG_ViewBox);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 1948|      0|			if (!vb) {
  ------------------
  |  Branch (1948:8): [True: 0, False: 0]
  ------------------
 1949|      0|				lsr->last_error = GF_OUT_OF_MEM;
 1950|      0|				return;
 1951|      0|			}
 1952|      0|			if (gf_list_count(l)==4) {
  ------------------
  |  Branch (1952:8): [True: 0, False: 0]
  ------------------
 1953|      0|				vb->x = * ((Fixed *)gf_list_get(l, 0));
 1954|      0|				vb->y = * ((Fixed *)gf_list_get(l, 1));
 1955|      0|				vb->width = * ((Fixed *)gf_list_get(l, 2));
 1956|      0|				vb->height = * ((Fixed *)gf_list_get(l, 3));
 1957|      0|			}
 1958|      0|			while (gf_list_count(l)) {
  ------------------
  |  Branch (1958:11): [True: 0, False: 0]
  ------------------
 1959|      0|				Fixed *v = (Fixed *)gf_list_last(l);
 1960|      0|				gf_free(v);
 1961|      0|				gf_list_rem_last(l);
 1962|      0|			}
 1963|      0|			gf_list_del(l);
 1964|      0|			val->value = vb;
 1965|      0|			return;
 1966|      0|		}
 1967|      0|		break;
 1968|      0|	case SVG_Coordinates_datatype:
  ------------------
  |  Branch (1968:2): [True: 0, False: 5]
  ------------------
 1969|      0|	{
 1970|      0|		SVG_Coordinates *coords;
 1971|      0|		if (coded_type==1) {
  ------------------
  |  Branch (1971:7): [True: 0, False: 0]
  ------------------
 1972|      0|			GF_List *l = gf_list_new();
 1973|       |			/*allocated value is already an SVG number*/
 1974|      0|			gf_list_add(l, val->value);
 1975|      0|			coords = (SVG_Coordinates*)gf_malloc(sizeof(SVG_Coordinates));
 1976|      0|			if (!coords) {
  ------------------
  |  Branch (1976:8): [True: 0, False: 0]
  ------------------
 1977|      0|				lsr->last_error = GF_OUT_OF_MEM;
 1978|      0|			} else {
 1979|      0|				*coords = l;
 1980|      0|				val->value = coords;
 1981|      0|			}
 1982|      0|			return;
 1983|      0|		} else if (coded_type==8) {
  ------------------
  |  Branch (1983:14): [True: 0, False: 0]
  ------------------
 1984|      0|			GF_List *l = (GF_List *)val->value;
 1985|      0|			u32 i, count = gf_list_count(l);
 1986|      0|			for (i=0; i<count; i++) {
  ------------------
  |  Branch (1986:14): [True: 0, False: 0]
  ------------------
 1987|      0|				SVG_Coordinate *c;
 1988|      0|				Fixed *v = (Fixed *)gf_list_get(l, i);
 1989|      0|				c = (SVG_Coordinate*)gf_malloc(sizeof(SVG_Coordinate));
 1990|      0|				if (!c) {
  ------------------
  |  Branch (1990:9): [True: 0, False: 0]
  ------------------
 1991|      0|					lsr->last_error = GF_OUT_OF_MEM;
 1992|      0|				} else {
 1993|      0|					c->type = SVG_NUMBER_VALUE;
 1994|      0|					c->value = *v;
 1995|      0|				}
 1996|      0|				gf_free(v);
 1997|      0|				gf_list_rem(l, i);
 1998|      0|				if (c)
  ------------------
  |  Branch (1998:9): [True: 0, False: 0]
  ------------------
 1999|      0|					gf_list_insert(l, c, i);
 2000|      0|			}
 2001|      0|			coords = (SVG_Coordinates*)gf_malloc(sizeof(SVG_Coordinates));
 2002|      0|			if (!coords) {
  ------------------
  |  Branch (2002:8): [True: 0, False: 0]
  ------------------
 2003|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2004|      0|			} else {
 2005|      0|				*coords = (GF_List *) val->value;
 2006|      0|				val->value = coords;
 2007|      0|			}
 2008|      0|			return;
 2009|      0|		}
 2010|      0|	}
 2011|      0|		break;
 2012|      1|	case SVG_Motion_datatype:
  ------------------
  |  Branch (2012:2): [True: 1, False: 4]
  ------------------
 2013|      1|		if (coded_type==9) {
  ------------------
  |  Branch (2013:7): [True: 0, False: 1]
  ------------------
 2014|      0|			GF_Matrix2D *mat;
 2015|      0|			SVG_Point *pt = (SVG_Point *)val->value;
 2016|      0|			if (!pt) {
  ------------------
  |  Branch (2016:8): [True: 0, False: 0]
  ------------------
 2017|      0|				lsr->last_error = GF_BAD_PARAM;
 2018|      0|				return;
 2019|      0|			}
 2020|      0|			GF_SAFEALLOC(mat, GF_Matrix2D);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2021|      0|			if (mat) {
  ------------------
  |  Branch (2021:8): [True: 0, False: 0]
  ------------------
 2022|      0|				gf_mx2d_init(*mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 2023|      0|				mat->m[2] = pt->x;
 2024|      0|				mat->m[5] = pt->y;
 2025|      0|				val->value = mat;
 2026|      0|			} else {
 2027|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2028|      0|			}
 2029|      0|			gf_free(pt);
 2030|      0|			return;
 2031|      0|		}
 2032|      1|		break;
 2033|      4|	default:
  ------------------
  |  Branch (2033:2): [True: 4, False: 1]
  ------------------
 2034|      4|		break;
 2035|      5|	}
 2036|      5|	lsr_delete_anim_value(lsr, val, coded_type);
 2037|      5|}
lsr_dec.c:lsr_delete_anim_value:
 1838|     67|{
 1839|     67|	if (!val) return;
  ------------------
  |  Branch (1839:6): [True: 0, False: 67]
  ------------------
 1840|       |	//unable to transform, free mem and reset
 1841|     67|	switch (coded_type) {
 1842|      1|	case 0://SVG_string *
  ------------------
  |  Branch (1842:2): [True: 1, False: 66]
  ------------------
 1843|      1|		if ((SVG_String *)val->value)
  ------------------
  |  Branch (1843:7): [True: 1, False: 0]
  ------------------
 1844|      1|			gf_free(* (SVG_String *)val->value);
 1845|      1|		gf_free(val->value);
 1846|      1|		break;
 1847|      0|	case 1://SVG_Number *
  ------------------
  |  Branch (1847:2): [True: 0, False: 67]
  ------------------
 1848|      0|		gf_free(val->value);
 1849|      0|		break;
 1850|      2|	case 2: //SVG_PathData *
  ------------------
  |  Branch (1850:2): [True: 2, False: 65]
  ------------------
 1851|      2|		gf_svg_delete_attribute_value(SVG_PathData_datatype, val->value, NULL);
 1852|      2|		break;
 1853|     31|	case 3: //SVG_Points *pts
  ------------------
  |  Branch (1853:2): [True: 31, False: 36]
  ------------------
 1854|     31|		gf_svg_delete_attribute_value(SVG_Points_datatype, val->value, NULL);
 1855|     31|		break;
 1856|      2|	case 4: //SVG_Number*
  ------------------
  |  Branch (1856:2): [True: 2, False: 65]
  ------------------
 1857|      2|		gf_free(val->value);
 1858|      2|		break;
 1859|      1|	case 5://SVG_Paint
  ------------------
  |  Branch (1859:2): [True: 1, False: 66]
  ------------------
 1860|      1|		gf_free(val->value);
 1861|      1|		break;
 1862|      0|	case 6://u8*
  ------------------
  |  Branch (1862:2): [True: 0, False: 67]
  ------------------
 1863|      0|		gf_free(val->value);
 1864|      0|		break;
 1865|      0|	case 7: //list of u8 *
  ------------------
  |  Branch (1865:2): [True: 0, False: 67]
  ------------------
 1866|      5|	case 8: //list of floats
  ------------------
  |  Branch (1866:2): [True: 5, False: 62]
  ------------------
 1867|      5|		{
 1868|      5|			GF_List *l = (GF_List *) val->value;
 1869|  86.1k|			while (gf_list_count(l)) {
  ------------------
  |  Branch (1869:11): [True: 86.1k, False: 5]
  ------------------
 1870|  86.1k|				void *v = gf_list_pop_back(l);
 1871|  86.1k|				gf_free(v);
 1872|  86.1k|			}
 1873|      5|			gf_list_del(l);
 1874|      5|		}
 1875|      5|		break;
 1876|       |	/*point */
 1877|      1|	case 9: //SVG_Point *
  ------------------
  |  Branch (1877:2): [True: 1, False: 66]
  ------------------
 1878|      1|		gf_free(val->value);
 1879|      1|		break;
 1880|      0|	case 10: //u32 *
  ------------------
  |  Branch (1880:2): [True: 0, False: 67]
  ------------------
 1881|      0|		gf_free(val->value);
 1882|      0|		break;
 1883|     16|	case 11: //SVG_FontFamily *
  ------------------
  |  Branch (1883:2): [True: 16, False: 51]
  ------------------
 1884|     16|	{
 1885|     16|		SVG_FontFamily *ft = (SVG_FontFamily *) val->value;
 1886|     16|		if (ft && ft->value) gf_free(ft->value);
  ------------------
  |  Branch (1886:7): [True: 16, False: 0]
  |  Branch (1886:13): [True: 7, False: 9]
  ------------------
 1887|     16|		gf_free(ft);
 1888|     16|	}
 1889|     16|		break;
 1890|      0|	case 12:
  ------------------
  |  Branch (1890:2): [True: 0, False: 67]
  ------------------
 1891|      0|	{
 1892|      0|		XMLRI *iri = (XMLRI *)val->value;
 1893|      0|		gf_list_del_item(lsr->deferred_hrefs, iri);
 1894|      0|		gf_node_unregister_iri(lsr->sg, iri);
 1895|      0|		if (iri->string) gf_free(iri->string);
  ------------------
  |  Branch (1895:7): [True: 0, False: 0]
  ------------------
 1896|      0|		gf_free(iri);
 1897|      0|	}
 1898|      8|	default:
  ------------------
  |  Branch (1898:2): [True: 8, False: 59]
  ------------------
 1899|      8|		break;
 1900|     67|	}
 1901|     67|	val->value = NULL;
 1902|     67|}
lsr_dec.c:lsr_translate_anim_values:
 2041|      1|{
 2042|      1|	u32 i, count;
 2043|      1|	Bool handled = GF_FALSE;
 2044|      1|	GF_List *list, *new_list;
 2045|       |
 2046|      1|	list = val->values;
 2047|      1|	switch (val->type) {
 2048|      0|	case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (2048:2): [True: 0, False: 1]
  ------------------
 2049|      0|		if (coded_type == 8) handled = GF_TRUE;
  ------------------
  |  Branch (2049:7): [True: 0, False: 0]
  ------------------
 2050|      0|		break;
 2051|      0|	case SVG_ViewBox_datatype:
  ------------------
  |  Branch (2051:2): [True: 0, False: 1]
  ------------------
 2052|      0|		if (coded_type == 8) handled = GF_TRUE;
  ------------------
  |  Branch (2052:7): [True: 0, False: 0]
  ------------------
 2053|      0|		break;
 2054|      0|	case SVG_Coordinates_datatype:
  ------------------
  |  Branch (2054:2): [True: 0, False: 1]
  ------------------
 2055|      0|		if (coded_type == 8) handled = GF_TRUE;
  ------------------
  |  Branch (2055:7): [True: 0, False: 0]
  ------------------
 2056|      0|		break;
 2057|      1|	case SVG_Motion_datatype:
  ------------------
  |  Branch (2057:2): [True: 1, False: 0]
  ------------------
 2058|      1|		if (coded_type==9) handled = GF_TRUE;
  ------------------
  |  Branch (2058:7): [True: 0, False: 1]
  ------------------
 2059|      1|		break;
 2060|      0|	default:
  ------------------
  |  Branch (2060:2): [True: 0, False: 1]
  ------------------
 2061|      0|		break;
 2062|      1|	}
 2063|      1|	if (!handled) {
  ------------------
  |  Branch (2063:6): [True: 1, False: 0]
  ------------------
 2064|     16|		while (gf_list_count(list)) {
  ------------------
  |  Branch (2064:10): [True: 15, False: 1]
  ------------------
 2065|     15|			SMIL_AnimateValue a_val;
 2066|     15|			a_val.type = 0;
 2067|     15|			a_val.value = gf_list_pop_back(list);
 2068|     15|			lsr_delete_anim_value(lsr, &a_val, coded_type);
 2069|     15|		}
 2070|      1|		gf_list_del(list);
 2071|      1|		val->values = gf_list_new();
 2072|      1|		return;
 2073|      1|	}
 2074|       |
 2075|      0|	val->values = new_list = gf_list_new();
 2076|      0|	count = gf_list_count(list);
 2077|      0|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (2077:12): [True: 0, False: 0]
  ------------------
 2078|      0|		switch (val->type) {
  ------------------
  |  Branch (2078:11): [True: 0, False: 0]
  ------------------
 2079|      0|		case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (2079:3): [True: 0, False: 0]
  ------------------
 2080|      0|		{
 2081|      0|			SVG_StrokeDashArray *da;
 2082|      0|			GF_List *l = (GF_List *)gf_list_get(list, i);
 2083|      0|			u32 j;
 2084|      0|			GF_SAFEALLOC(da, SVG_StrokeDashArray);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2085|      0|			if (!da) {
  ------------------
  |  Branch (2085:8): [True: 0, False: 0]
  ------------------
 2086|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2087|      0|				return;
 2088|      0|			}
 2089|      0|			da->array.count = gf_list_count(l);
 2090|      0|			if (!da->array.count) {
  ------------------
  |  Branch (2090:8): [True: 0, False: 0]
  ------------------
 2091|      0|				da->type = SVG_STROKEDASHARRAY_INHERIT;
 2092|      0|			} else {
 2093|      0|				da->type = SVG_STROKEDASHARRAY_ARRAY;
 2094|      0|				da->array.vals = (Fixed *)gf_malloc(sizeof(Fixed)*da->array.count);
 2095|      0|				da->array.units = (u8 *) gf_malloc(sizeof(u8)*da->array.count);
 2096|      0|				if (!da->array.vals || !da->array.units) {
  ------------------
  |  Branch (2096:9): [True: 0, False: 0]
  |  Branch (2096:28): [True: 0, False: 0]
  ------------------
 2097|      0|					lsr->last_error = GF_OUT_OF_MEM;
 2098|      0|					return;
 2099|      0|				}
 2100|      0|				for (j=0; j<da->array.count; j++) {
  ------------------
  |  Branch (2100:15): [True: 0, False: 0]
  ------------------
 2101|      0|					Fixed *v = (Fixed *)gf_list_get(l, j);
 2102|      0|					da->array.vals[j] = *v;
 2103|      0|					da->array.units[j] = 0;
 2104|      0|					gf_free(v);
 2105|      0|				}
 2106|      0|			}
 2107|      0|			gf_list_del(l);
 2108|      0|			gf_list_add(new_list, da);
 2109|      0|		}
 2110|      0|		break;
 2111|      0|		case SVG_ViewBox_datatype:
  ------------------
  |  Branch (2111:3): [True: 0, False: 0]
  ------------------
 2112|      0|		{
 2113|      0|			SVG_ViewBox *vb;
 2114|      0|			GF_List *l = (GF_List *)gf_list_get(list, i);
 2115|      0|			GF_SAFEALLOC(vb, SVG_ViewBox);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2116|      0|			if (!vb) {
  ------------------
  |  Branch (2116:8): [True: 0, False: 0]
  ------------------
 2117|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2118|      0|				return;
 2119|      0|			}
 2120|      0|			if (gf_list_count(l)==4) {
  ------------------
  |  Branch (2120:8): [True: 0, False: 0]
  ------------------
 2121|      0|				vb->x = * ((Fixed *)gf_list_get(l, 0));
 2122|      0|				vb->y = * ((Fixed *)gf_list_get(l, 1));
 2123|      0|				vb->width = * ((Fixed *)gf_list_get(l, 2));
 2124|      0|				vb->height = * ((Fixed *)gf_list_get(l, 3));
 2125|      0|			}
 2126|      0|			while (gf_list_count(l)) {
  ------------------
  |  Branch (2126:11): [True: 0, False: 0]
  ------------------
 2127|      0|				Fixed *v=(Fixed *)gf_list_last(l);
 2128|      0|				gf_free(v);
 2129|      0|				gf_list_rem_last(l);
 2130|      0|			}
 2131|      0|			gf_list_del(l);
 2132|      0|			gf_list_add(new_list, vb);
 2133|      0|		}
 2134|      0|		break;
 2135|      0|		case SVG_Coordinates_datatype:
  ------------------
  |  Branch (2135:3): [True: 0, False: 0]
  ------------------
 2136|      0|		{
 2137|      0|			SVG_Coordinates *coords;
 2138|      0|			GF_List *l = (GF_List *)gf_list_get(list, i);
 2139|      0|			u32 j, count2;
 2140|      0|			count2 = gf_list_count(l);
 2141|      0|			for (j=0; j<count2; j++) {
  ------------------
  |  Branch (2141:14): [True: 0, False: 0]
  ------------------
 2142|      0|				Fixed *v = (Fixed *)gf_list_get(l, j);
 2143|      0|				SVG_Coordinate *c = (SVG_Coordinate *)gf_malloc(sizeof(SVG_Coordinate));
 2144|      0|				if (!c) {
  ------------------
  |  Branch (2144:9): [True: 0, False: 0]
  ------------------
 2145|      0|					lsr->last_error = GF_OUT_OF_MEM;
 2146|      0|				} else {
 2147|      0|					c->type = SVG_NUMBER_VALUE;
 2148|      0|					c->value = *v;
 2149|      0|				}
 2150|      0|				gf_list_rem(l, j);
 2151|      0|				gf_free(v);
 2152|      0|				if (c)
  ------------------
  |  Branch (2152:9): [True: 0, False: 0]
  ------------------
 2153|      0|					gf_list_insert(l, c, j);
 2154|      0|			}
 2155|       |
 2156|      0|			coords = (SVG_Coordinates*)gf_malloc(sizeof(SVG_Coordinates));
 2157|      0|			if (!coords) {
  ------------------
  |  Branch (2157:8): [True: 0, False: 0]
  ------------------
 2158|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2159|      0|			} else {
 2160|      0|				*coords = l;
 2161|      0|				gf_list_add(new_list, coords);
 2162|      0|			}
 2163|      0|		}
 2164|      0|		break;
 2165|       |
 2166|      0|		case SVG_Motion_datatype:
  ------------------
  |  Branch (2166:3): [True: 0, False: 0]
  ------------------
 2167|      0| 		{
 2168|      0|			GF_Point2D *pt = (GF_Point2D *)gf_list_get(list, i);
 2169|      0|			GF_Matrix2D *m = (GF_Matrix2D *)gf_malloc(sizeof(GF_Matrix2D ));
 2170|      0|			if (!m) {
  ------------------
  |  Branch (2170:8): [True: 0, False: 0]
  ------------------
 2171|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2172|      0|			} else {
 2173|      0|				gf_mx2d_init(*m);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 2174|      0|				m->m[2] = pt->x;
 2175|      0|				m->m[5] = pt->y;
 2176|      0|				gf_list_add(new_list, m);
 2177|      0|			}
 2178|      0|			gf_free(pt);
 2179|      0|		}
 2180|      0|			break;
 2181|      0|		}
 2182|      0|	}
 2183|      0|	gf_list_del(list);
 2184|      0|}
lsr_dec.c:lsr_read_rare_full:
 1431|    132|{
 1432|    132|	GF_FieldInfo info;
 1433|    132|	u32 i, nb_rare, field_rare;
 1434|    132|	s32 field_tag;
 1435|       |
 1436|    132|	GF_LSR_READ_INT(lsr, nb_rare, 1, "has_rare");
  ------------------
  |  |   34|    132|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    132|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 132]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    132|	} else {\
  |  |   39|    132|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    132|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    132|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 132]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    132|	}\
  |  |   42|    132|}
  ------------------
 1437|    132|	if (!nb_rare) return;
  ------------------
  |  Branch (1437:6): [True: 92, False: 40]
  ------------------
 1438|     40|	GF_LSR_READ_INT(lsr, nb_rare, 6, "nbOfAttributes");
  ------------------
  |  |   34|     40|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     40|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 40]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     40|	} else {\
  |  |   39|     40|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     40|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     40|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 40]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     40|	}\
  |  |   42|     40|}
  ------------------
 1439|       |
 1440|    848|	for (i=0; i<nb_rare; i++) {
  ------------------
  |  Branch (1440:12): [True: 826, False: 22]
  ------------------
 1441|    826|		GF_LSR_READ_INT(lsr, field_rare, 6, "attributeRARE");
  ------------------
  |  |   34|    826|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    826|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 826]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    826|	} else {\
  |  |   39|    826|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    826|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    826|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 826]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    826|	}\
  |  |   42|    826|}
  ------------------
 1442|       |
 1443|       |		/*lsr extend*/
 1444|    826|		if (field_rare==49) {
  ------------------
  |  Branch (1444:7): [True: 16, False: 810]
  ------------------
 1445|     16|			u32 extID, len, j;
 1446|     36|			while (1) {
  ------------------
  |  Branch (1446:11): [True: 36, Folded]
  ------------------
 1447|     36|				GF_LSR_READ_INT(lsr, extID, lsr->info->cfg.extensionIDBits, "extensionID");
  ------------------
  |  |   34|     36|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     36|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 36]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     36|	} else {\
  |  |   39|     36|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     36|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     36|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 36]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     36|	}\
  |  |   42|     36|}
  ------------------
 1448|     36|				len = lsr_read_vluimsbf5(lsr, "len");
 1449|     36|				if (extID==2) {
  ------------------
  |  Branch (1449:9): [True: 0, False: 36]
  ------------------
 1450|      0|					GF_LSR_READ_INT(lsr, len, 2, "nbOfAttributes");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 1451|      0|					for (j=0; j<len; j++) {
  ------------------
  |  Branch (1451:16): [True: 0, False: 0]
  ------------------
 1452|      0|						GF_LSR_READ_INT(lsr, extID, 3, "attributeRARE");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 1453|      0|						switch (extID) {
  ------------------
  |  Branch (1453:15): [True: 0, False: 0]
  ------------------
 1454|      0|						case 0:
  ------------------
  |  Branch (1454:7): [True: 0, False: 0]
  ------------------
 1455|      0|							lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_syncMaster, GF_TRUE, GF_FALSE, &info);
 1456|      0|							GF_LSR_READ_INT(lsr, *(SVG_Boolean *)info.far_ptr, 1, "syncMaster");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 1457|      0|							break;
 1458|      0|						case 1:
  ------------------
  |  Branch (1458:7): [True: 0, False: 0]
  ------------------
 1459|      0|							lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_focusHighlight, GF_TRUE, GF_FALSE, &info);
 1460|      0|							GF_LSR_READ_INT(lsr, *(SVG_FocusHighlight *)info.far_ptr, 2, "focusHighlight");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 1461|      0|							break;
 1462|      0|						case 2:
  ------------------
  |  Branch (1462:7): [True: 0, False: 0]
  ------------------
 1463|      0|							lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_initialVisibility, GF_TRUE, GF_FALSE, &info);
 1464|      0|							GF_LSR_READ_INT(lsr, *(SVG_InitialVisibility *)info.far_ptr, 2, "initialVisibility");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 1465|      0|							break;
 1466|      0|						case 3:
  ------------------
  |  Branch (1466:7): [True: 0, False: 0]
  ------------------
 1467|      0|							lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_fullscreen, GF_TRUE, GF_FALSE, &info);
 1468|      0|							GF_LSR_READ_INT(lsr, *(SVG_Boolean *)info.far_ptr, 1, "fullscreen");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 1469|      0|							break;
 1470|      0|						case 4:
  ------------------
  |  Branch (1470:7): [True: 0, False: 0]
  ------------------
 1471|      0|							lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_requiredFonts, GF_TRUE, GF_FALSE, &info);
 1472|      0|							lsr_read_byte_align_string_list(lsr, *(GF_List **)info.far_ptr, "requiredFonts", GF_FALSE, GF_TRUE);
 1473|      0|							break;
 1474|      0|						}
 1475|      0|					}
 1476|     36|				} else {
 1477|     36|					gf_bs_read_int(lsr->bs, len);
 1478|     36|				}
 1479|     36|				GF_LSR_READ_INT(lsr, extID, 1, "hasNextExtension");
  ------------------
  |  |   34|     36|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     36|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 36]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     36|	} else {\
  |  |   39|     36|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     36|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     36|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 36]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     36|	}\
  |  |   42|     36|}
  ------------------
 1480|     36|				if (!extID) break;
  ------------------
  |  Branch (1480:9): [True: 16, False: 20]
  ------------------
 1481|     36|			}
 1482|     16|			continue;
 1483|     16|		}
 1484|    810|		field_tag = gf_lsr_rare_type_to_attribute(field_rare);
 1485|    810|		if (field_tag==-1) {
  ------------------
  |  Branch (1485:7): [True: 0, False: 810]
  ------------------
 1486|      0|			return;
 1487|      0|		}
 1488|    810|		lsr->last_error = gf_node_get_attribute_by_tag(n, field_tag, GF_TRUE, GF_FALSE, &info);
 1489|    810|		if (!info.far_ptr) lsr->last_error = GF_NOT_SUPPORTED;
  ------------------
  |  Branch (1489:7): [True: 0, False: 810]
  ------------------
 1490|    810|		if (lsr->last_error) return;
  ------------------
  |  Branch (1490:7): [True: 0, False: 810]
  ------------------
 1491|       |
 1492|       |
 1493|    810|		switch (field_tag) {
  ------------------
  |  Branch (1493:11): [True: 810, False: 0]
  ------------------
 1494|      2|		case TAG_SVG_ATT__class:
  ------------------
  |  Branch (1494:3): [True: 2, False: 808]
  ------------------
 1495|      2|			lsr_read_byte_align_string(lsr, info.far_ptr, "class");
 1496|      2|			break;
 1497|       |		/*properties*/
 1498|     15|		case TAG_SVG_ATT_audio_level:
  ------------------
  |  Branch (1498:3): [True: 15, False: 795]
  ------------------
 1499|     15|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "audio-level");
 1500|     15|			break;
 1501|     15|		case TAG_SVG_ATT_color:
  ------------------
  |  Branch (1501:3): [True: 15, False: 795]
  ------------------
 1502|     15|			lsr_read_paint(lsr, (SVG_Paint *)info.far_ptr, "color");
 1503|     15|			break;
 1504|     13|		case TAG_SVG_ATT_color_rendering:
  ------------------
  |  Branch (1504:3): [True: 13, False: 797]
  ------------------
 1505|     13|			GF_LSR_READ_INT(lsr, *(SVG_RenderingHint*)info.far_ptr, 2, "color-rendering");
  ------------------
  |  |   34|     13|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     13|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 13]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     13|	} else {\
  |  |   39|     13|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     13|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     13|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 13]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     13|	}\
  |  |   42|     13|}
  ------------------
 1506|     13|			break;
 1507|      5|		case TAG_SVG_ATT_display:
  ------------------
  |  Branch (1507:3): [True: 5, False: 805]
  ------------------
 1508|      5|			GF_LSR_READ_INT(lsr, *(SVG_Display*)info.far_ptr, 5, "display");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 1509|      5|			break;
 1510|      6|		case TAG_SVG_ATT_display_align:
  ------------------
  |  Branch (1510:3): [True: 6, False: 804]
  ------------------
 1511|      6|			GF_LSR_READ_INT(lsr, *(SVG_DisplayAlign*)info.far_ptr, 3, "display-align");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 1512|      6|			break;
 1513|     22|		case TAG_SVG_ATT_fill_opacity:
  ------------------
  |  Branch (1513:3): [True: 22, False: 788]
  ------------------
 1514|     22|			((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 1515|     22|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "fill-opacity");
 1516|     22|			break;
 1517|      6|		case TAG_SVG_ATT_fill_rule:
  ------------------
  |  Branch (1517:3): [True: 6, False: 804]
  ------------------
 1518|      6|			GF_LSR_READ_INT(lsr, *(SVG_FillRule*)info.far_ptr, 2, "fill-rule");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 1519|      6|			break;
 1520|     21|		case TAG_SVG_ATT_image_rendering:
  ------------------
  |  Branch (1520:3): [True: 21, False: 789]
  ------------------
 1521|     21|			GF_LSR_READ_INT(lsr, *(SVG_RenderingHint*)info.far_ptr, 2, "image-rendering");
  ------------------
  |  |   34|     21|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     21|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 21]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     21|	} else {\
  |  |   39|     21|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     21|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     21|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 21]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     21|	}\
  |  |   42|     21|}
  ------------------
 1522|     21|			break;
 1523|      9|		case TAG_SVG_ATT_line_increment:
  ------------------
  |  Branch (1523:3): [True: 9, False: 801]
  ------------------
 1524|      9|			lsr_read_line_increment_type(lsr, info.far_ptr, "line-increment");
 1525|      9|			break;
 1526|      5|		case TAG_SVG_ATT_pointer_events:
  ------------------
  |  Branch (1526:3): [True: 5, False: 805]
  ------------------
 1527|      5|			GF_LSR_READ_INT(lsr, *(SVG_PointerEvents*)info.far_ptr, 4, "pointer-events");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 1528|      5|			break;
 1529|      7|		case TAG_SVG_ATT_shape_rendering:
  ------------------
  |  Branch (1529:3): [True: 7, False: 803]
  ------------------
 1530|      7|			GF_LSR_READ_INT(lsr, *(SVG_RenderingHint*)info.far_ptr, 3, "shape-rendering");
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 1531|      7|			break;
 1532|     12|		case TAG_SVG_ATT_solid_color:
  ------------------
  |  Branch (1532:3): [True: 12, False: 798]
  ------------------
 1533|     12|			lsr_read_paint(lsr, info.far_ptr, "solid-color");
 1534|     12|			break;
 1535|      8|		case TAG_SVG_ATT_solid_opacity:
  ------------------
  |  Branch (1535:3): [True: 8, False: 802]
  ------------------
 1536|      8|			((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 1537|      8|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "solid-opacity");
 1538|      8|			break;
 1539|     18|		case TAG_SVG_ATT_stop_color:
  ------------------
  |  Branch (1539:3): [True: 18, False: 792]
  ------------------
 1540|     18|			lsr_read_paint(lsr, info.far_ptr, "stop-color");
 1541|     18|			break;
 1542|      8|		case TAG_SVG_ATT_stop_opacity:
  ------------------
  |  Branch (1542:3): [True: 8, False: 802]
  ------------------
 1543|      8|			((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 1544|      8|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "stop-opacity");
 1545|      8|			break;
 1546|     11|		case TAG_SVG_ATT_stroke_dasharray:
  ------------------
  |  Branch (1546:3): [True: 11, False: 799]
  ------------------
 1547|     11|		{
 1548|     11|			u32 j, flag;
 1549|     11|			SVG_StrokeDashArray *da = (SVG_StrokeDashArray *)info.far_ptr;
 1550|     11|			GF_LSR_READ_INT(lsr, flag, 1, "dashArray");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 1551|     11|			if (flag) {
  ------------------
  |  Branch (1551:8): [True: 4, False: 7]
  ------------------
 1552|      4|				da->type=SVG_STROKEDASHARRAY_INHERIT;
 1553|      7|			} else {
 1554|      7|				da->type=SVG_STROKEDASHARRAY_ARRAY;
 1555|      7|				da->array.count = lsr_read_vluimsbf5(lsr, "len");
 1556|      7|				da->array.vals = (Fixed*)gf_realloc(da->array.vals, sizeof(Fixed)*da->array.count);
 1557|      7|				da->array.units = (u8*)gf_realloc(da->array.units, sizeof(u8)*da->array.count);
 1558|      7|				if (!da->array.vals || !da->array.units) {
  ------------------
  |  Branch (1558:9): [True: 0, False: 7]
  |  Branch (1558:28): [True: 0, False: 7]
  ------------------
 1559|      0|					lsr->last_error = GF_OUT_OF_MEM;
 1560|      0|					return;
 1561|      0|				}
 1562|     84|				for (j=0; j<da->array.count; j++) {
  ------------------
  |  Branch (1562:15): [True: 77, False: 7]
  ------------------
 1563|     77|					da->array.vals[j] = lsr_read_fixed_16_8(lsr, "dash");
 1564|     77|					da->array.units[j] = 0;
 1565|     77|					if (lsr->last_error) return;
  ------------------
  |  Branch (1565:10): [True: 0, False: 77]
  ------------------
 1566|     77|				}
 1567|      7|			}
 1568|     11|		}
 1569|     11|		break;
 1570|     14|		case TAG_SVG_ATT_stroke_dashoffset:
  ------------------
  |  Branch (1570:3): [True: 14, False: 796]
  ------------------
 1571|     14|			lsr_read_fixed_16_8i(lsr, info.far_ptr, "dashOffset");
 1572|     14|			break;
 1573|       |
 1574|      8|		case TAG_SVG_ATT_stroke_linecap:
  ------------------
  |  Branch (1574:3): [True: 8, False: 802]
  ------------------
 1575|      8|			GF_LSR_READ_INT(lsr, *(SVG_StrokeLineCap*)info.far_ptr, 2, "stroke-linecap");
  ------------------
  |  |   34|      8|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      8|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 8]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      8|	} else {\
  |  |   39|      8|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      8|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      8|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      8|	}\
  |  |   42|      8|}
  ------------------
 1576|      8|			break;
 1577|      9|		case TAG_SVG_ATT_stroke_linejoin:
  ------------------
  |  Branch (1577:3): [True: 9, False: 801]
  ------------------
 1578|      9|			GF_LSR_READ_INT(lsr, *(SVG_StrokeLineJoin*)info.far_ptr, 2, "stroke-linejoin");
  ------------------
  |  |   34|      9|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      9|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 9]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      9|	} else {\
  |  |   39|      9|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      9|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      9|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      9|	}\
  |  |   42|      9|}
  ------------------
 1579|      9|			break;
 1580|      3|		case TAG_SVG_ATT_stroke_miterlimit:
  ------------------
  |  Branch (1580:3): [True: 3, False: 807]
  ------------------
 1581|      3|			lsr_read_fixed_16_8i(lsr, info.far_ptr, "miterLimit");
 1582|      3|			break;
 1583|     10|		case TAG_SVG_ATT_stroke_opacity:
  ------------------
  |  Branch (1583:3): [True: 10, False: 800]
  ------------------
 1584|     10|			((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 1585|     10|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "stroke-opacity");
 1586|     10|			break;
 1587|      9|		case TAG_SVG_ATT_stroke_width:
  ------------------
  |  Branch (1587:3): [True: 9, False: 801]
  ------------------
 1588|      9|			lsr_read_fixed_16_8i(lsr, info.far_ptr, "strokeWidth");
 1589|      9|			break;
 1590|      5|		case TAG_SVG_ATT_text_anchor:
  ------------------
  |  Branch (1590:3): [True: 5, False: 805]
  ------------------
 1591|      5|			GF_LSR_READ_INT(lsr, *(SVG_TextAnchor*)info.far_ptr, 2, "text-achor");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 1592|      5|			break;
 1593|     30|		case TAG_SVG_ATT_text_rendering:
  ------------------
  |  Branch (1593:3): [True: 30, False: 780]
  ------------------
 1594|     30|			GF_LSR_READ_INT(lsr, *(SVG_RenderingHint*)info.far_ptr, 3, "text-rendering");
  ------------------
  |  |   34|     30|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     30|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 30]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     30|	} else {\
  |  |   39|     30|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     30|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     30|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 30]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     30|	}\
  |  |   42|     30|}
  ------------------
 1595|     30|			break;
 1596|     34|		case TAG_SVG_ATT_viewport_fill:
  ------------------
  |  Branch (1596:3): [True: 34, False: 776]
  ------------------
 1597|     34|			lsr_read_paint(lsr, info.far_ptr, "viewport-fill");
 1598|     34|			break;
 1599|     10|		case TAG_SVG_ATT_viewport_fill_opacity:
  ------------------
  |  Branch (1599:3): [True: 10, False: 800]
  ------------------
 1600|     10|			((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 1601|     10|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "viewport-fill-opacity");
 1602|     10|			break;
 1603|     40|		case TAG_SVG_ATT_vector_effect:
  ------------------
  |  Branch (1603:3): [True: 40, False: 770]
  ------------------
 1604|     40|			GF_LSR_READ_INT(lsr, *(SVG_VectorEffect*)info.far_ptr, 4, "vector-effect");
  ------------------
  |  |   34|     40|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     40|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 40]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     40|	} else {\
  |  |   39|     40|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     40|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     40|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 40]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     40|	}\
  |  |   42|     40|}
  ------------------
 1605|     40|			break;
 1606|     27|		case TAG_SVG_ATT_visibility:
  ------------------
  |  Branch (1606:3): [True: 27, False: 783]
  ------------------
 1607|     27|			GF_LSR_READ_INT(lsr, *(SVG_Visibility*)info.far_ptr, 2, "visibility");
  ------------------
  |  |   34|     27|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     27|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 27]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     27|	} else {\
  |  |   39|     27|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     27|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     27|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 27]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     27|	}\
  |  |   42|     27|}
  ------------------
 1608|     27|			break;
 1609|     25|		case TAG_SVG_ATT_requiredExtensions:
  ------------------
  |  Branch (1609:3): [True: 25, False: 785]
  ------------------
 1610|     25|			lsr_read_byte_align_string_list(lsr, *(GF_List**)info.far_ptr, "requiredExtensions", GF_TRUE, GF_FALSE);
 1611|     25|			break;
 1612|      1|		case TAG_SVG_ATT_requiredFormats:
  ------------------
  |  Branch (1612:3): [True: 1, False: 809]
  ------------------
 1613|      1|			lsr_read_byte_align_string_list(lsr, *(GF_List**)info.far_ptr, "requiredFormats", GF_FALSE, GF_FALSE);
 1614|      1|			break;
 1615|      4|		case TAG_SVG_ATT_requiredFeatures:
  ------------------
  |  Branch (1615:3): [True: 4, False: 806]
  ------------------
 1616|      4|		{
 1617|      4|			u32 j, fcount = lsr_read_vluimsbf5(lsr, "count");
 1618|     16|			for (j=0; j<fcount; j++) {
  ------------------
  |  Branch (1618:14): [True: 12, False: 4]
  ------------------
 1619|     12|				u32 fval;
 1620|     12|				GF_LSR_READ_INT(lsr, fval, 6, "feature");
  ------------------
  |  |   34|     12|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     12|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 12]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     12|	} else {\
  |  |   39|     12|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     12|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     12|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     12|	}\
  |  |   42|     12|}
  ------------------
 1621|     12|				if (lsr->last_error) return;
  ------------------
  |  Branch (1621:9): [True: 0, False: 12]
  ------------------
 1622|     12|			}
 1623|      4|		}
 1624|      4|		break;
 1625|     23|		case TAG_SVG_ATT_systemLanguage:
  ------------------
  |  Branch (1625:3): [True: 23, False: 787]
  ------------------
 1626|     23|			lsr_read_byte_align_string_list(lsr, *(GF_List**)info.far_ptr, "systemLanguage", GF_FALSE, GF_FALSE);
 1627|     23|			break;
 1628|     17|		case TAG_XML_ATT_base:
  ------------------
  |  Branch (1628:3): [True: 17, False: 793]
  ------------------
 1629|     17|			lsr_read_byte_align_string(lsr, &((XMLRI*)info.far_ptr)->string, "xml:base");
 1630|     17|			((XMLRI*)info.far_ptr)->type = XMLRI_STRING;
 1631|     17|			break;
 1632|      4|		case TAG_XML_ATT_lang:
  ------------------
  |  Branch (1632:3): [True: 4, False: 806]
  ------------------
 1633|      4|			lsr_read_byte_align_string(lsr, info.far_ptr, "xml:lang");
 1634|      4|			break;
 1635|     18|		case TAG_XML_ATT_space:
  ------------------
  |  Branch (1635:3): [True: 18, False: 792]
  ------------------
 1636|     18|			GF_LSR_READ_INT(lsr, *(XML_Space*)info.far_ptr, 1, "xml:space");
  ------------------
  |  |   34|     18|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     18|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 18]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     18|	} else {\
  |  |   39|     18|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     18|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     18|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     18|	}\
  |  |   42|     18|}
  ------------------
 1637|     18|			break;
 1638|       |		/*focusable*/
 1639|      7|		case TAG_SVG_ATT_nav_next:
  ------------------
  |  Branch (1639:3): [True: 7, False: 803]
  ------------------
 1640|      7|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusNext");
 1641|      7|			break;
 1642|      9|		case TAG_SVG_ATT_nav_up:
  ------------------
  |  Branch (1642:3): [True: 9, False: 801]
  ------------------
 1643|      9|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusNorth");
 1644|      9|			break;
 1645|      8|		case TAG_SVG_ATT_nav_up_left:
  ------------------
  |  Branch (1645:3): [True: 8, False: 802]
  ------------------
 1646|      8|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusNorthEast");
 1647|      8|			break;
 1648|      9|		case TAG_SVG_ATT_nav_up_right:
  ------------------
  |  Branch (1648:3): [True: 9, False: 801]
  ------------------
 1649|      9|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusNorthWest");
 1650|      9|			break;
 1651|     11|		case TAG_SVG_ATT_nav_prev:
  ------------------
  |  Branch (1651:3): [True: 11, False: 799]
  ------------------
 1652|     11|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusPrev");
 1653|     11|			break;
 1654|     15|		case TAG_SVG_ATT_nav_down:
  ------------------
  |  Branch (1654:3): [True: 15, False: 795]
  ------------------
 1655|     15|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusSouth");
 1656|     15|			break;
 1657|      5|		case TAG_SVG_ATT_nav_down_left:
  ------------------
  |  Branch (1657:3): [True: 5, False: 805]
  ------------------
 1658|      5|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusSouthEast");
 1659|      5|			break;
 1660|      3|		case TAG_SVG_ATT_nav_down_right:
  ------------------
  |  Branch (1660:3): [True: 3, False: 807]
  ------------------
 1661|      3|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusSouthWest");
 1662|      3|			break;
 1663|     21|		case TAG_SVG_ATT_nav_left:
  ------------------
  |  Branch (1663:3): [True: 21, False: 789]
  ------------------
 1664|     21|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusEast");
 1665|     21|			break;
 1666|      5|		case TAG_SVG_ATT_focusable:
  ------------------
  |  Branch (1666:3): [True: 5, False: 805]
  ------------------
 1667|      5|			GF_LSR_READ_INT(lsr, *(SVG_Focusable*)info.far_ptr, 2, "focusable");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 1668|      5|			break;
 1669|     14|		case TAG_SVG_ATT_nav_right:
  ------------------
  |  Branch (1669:3): [True: 14, False: 796]
  ------------------
 1670|     14|			lsr_read_focus(lsr, (SVG_Focus*)info.far_ptr, "focusWest");
 1671|     14|			break;
 1672|      5|		case TAG_SVG_ATT_transform:
  ------------------
  |  Branch (1672:3): [True: 5, False: 805]
  ------------------
 1673|      5|			lsr_read_matrix(lsr, info.far_ptr);
 1674|      5|			break;
 1675|     18|		case TAG_SVG_ATT_text_decoration:
  ------------------
  |  Branch (1675:3): [True: 18, False: 792]
  ------------------
 1676|     18|			lsr_read_byte_align_string_list(lsr, *(GF_List**)info.far_ptr, "textDecoration", GF_FALSE, GF_FALSE);
 1677|     18|			break;
 1678|       |
 1679|     32|		case TAG_SVG_ATT_font_variant:
  ------------------
  |  Branch (1679:3): [True: 32, False: 778]
  ------------------
 1680|     32|			GF_LSR_READ_INT(lsr, *(SVG_FontVariant*)info.far_ptr, 2, "font-variant");
  ------------------
  |  |   34|     32|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     32|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 32]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     32|	} else {\
  |  |   39|     32|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     32|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     32|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     32|	}\
  |  |   42|     32|}
  ------------------
 1681|     32|			break;
 1682|     21|		case TAG_SVG_ATT_font_family:
  ------------------
  |  Branch (1682:3): [True: 21, False: 789]
  ------------------
 1683|     21|		{
 1684|     21|			u32 flag;
 1685|     21|			GF_LSR_READ_INT(lsr, flag, 1, "isInherit");
  ------------------
  |  |   34|     21|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     21|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 21]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     21|	} else {\
  |  |   39|     21|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     21|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     21|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 21]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     21|	}\
  |  |   42|     21|}
  ------------------
 1686|     21|			if (flag) {
  ------------------
  |  Branch (1686:8): [True: 6, False: 15]
  ------------------
 1687|      6|				((SVG_FontFamily*)info.far_ptr)->type = SVG_FONTFAMILY_INHERIT;
 1688|     15|			} else {
 1689|     15|				char *ft;
 1690|     15|				((SVG_FontFamily*)info.far_ptr)->type = SVG_FONTFAMILY_VALUE;
 1691|     15|				GF_LSR_READ_INT(lsr, flag, lsr->fontIndexBits, "fontIndex");
  ------------------
  |  |   34|     15|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     15|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 15]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     15|	} else {\
  |  |   39|     15|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     15|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     15|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 15]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     15|	}\
  |  |   42|     15|}
  ------------------
 1692|     15|				ft = (char*)gf_list_get(lsr->font_table, flag);
 1693|     15|				if (ft) {
  ------------------
  |  Branch (1693:9): [True: 7, False: 8]
  ------------------
 1694|      7|					if (((SVG_FontFamily*)info.far_ptr)->value) gf_free(((SVG_FontFamily*)info.far_ptr)->value);
  ------------------
  |  Branch (1694:10): [True: 0, False: 7]
  ------------------
 1695|      7|					((SVG_FontFamily*)info.far_ptr)->value = gf_strdup(ft);
 1696|      7|				}
 1697|     15|			}
 1698|     21|		}
 1699|     21|		break;
 1700|     20|		case TAG_SVG_ATT_font_size:
  ------------------
  |  Branch (1700:3): [True: 20, False: 790]
  ------------------
 1701|     20|			lsr_read_fixed_16_8i(lsr, info.far_ptr, "fontSize");
 1702|     20|			break;
 1703|      4|		case TAG_SVG_ATT_font_style:
  ------------------
  |  Branch (1703:3): [True: 4, False: 806]
  ------------------
 1704|      4|			GF_LSR_READ_INT(lsr, *(SVG_FontStyle*)info.far_ptr, 3, "fontStyle");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 1705|      4|			break;
 1706|      8|		case TAG_SVG_ATT_font_weight:
  ------------------
  |  Branch (1706:3): [True: 8, False: 802]
  ------------------
 1707|      8|			GF_LSR_READ_INT(lsr, *(SVG_FontWeight*)info.far_ptr, 4, "fontWeight");
  ------------------
  |  |   34|      8|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      8|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 8]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      8|	} else {\
  |  |   39|      8|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      8|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      8|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      8|	}\
  |  |   42|      8|}
  ------------------
 1708|      8|			break;
 1709|     22|		case TAG_XLINK_ATT_title:
  ------------------
  |  Branch (1709:3): [True: 22, False: 788]
  ------------------
 1710|     22|			lsr_read_byte_align_string(lsr, info.far_ptr, "xlink:title");
 1711|     22|			break;
 1712|      2|		case TAG_XLINK_ATT_type:
  ------------------
  |  Branch (1712:3): [True: 2, False: 808]
  ------------------
 1713|       |			/*TODO FIXME*/
 1714|      2|			GF_LSR_READ_INT(lsr, field_rare, 3, "xlink:type");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 1715|      2|			break;
 1716|     30|		case TAG_XLINK_ATT_role:
  ------------------
  |  Branch (1716:3): [True: 30, False: 780]
  ------------------
 1717|     30|			lsr_read_any_uri(lsr, info.far_ptr, "xlink:role");
 1718|     30|			break;
 1719|     20|		case TAG_XLINK_ATT_arcrole:
  ------------------
  |  Branch (1719:3): [True: 20, False: 790]
  ------------------
 1720|     20|			lsr_read_any_uri(lsr, info.far_ptr, "xlink:arcrole");
 1721|     20|			break;
 1722|      7|		case TAG_XLINK_ATT_actuate:
  ------------------
  |  Branch (1722:3): [True: 7, False: 803]
  ------------------
 1723|       |			/*TODO FIXME*/
 1724|      7|			GF_LSR_READ_INT(lsr, field_rare, 2, "xlink:actuate");
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 1725|      7|			break;
 1726|      3|		case TAG_XLINK_ATT_show:
  ------------------
  |  Branch (1726:3): [True: 3, False: 807]
  ------------------
 1727|       |			/*TODO FIXME*/
 1728|      3|			GF_LSR_READ_INT(lsr, field_rare, 3, "xlink:show");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 1729|      3|			break;
 1730|      1|		case TAG_SVG_ATT_end:
  ------------------
  |  Branch (1730:3): [True: 1, False: 809]
  ------------------
 1731|      1|			lsr_read_smil_times(lsr, NULL, 0, info.far_ptr, "end", 0);
 1732|      1|			break;
 1733|      2|		case TAG_SVG_ATT_max:
  ------------------
  |  Branch (1733:3): [True: 2, False: 808]
  ------------------
 1734|      2|			lsr_read_duration_ex(lsr, NULL, 0, info.far_ptr, "min", 0);
 1735|      2|			break;
 1736|     34|		case TAG_SVG_ATT_min:
  ------------------
  |  Branch (1736:3): [True: 34, False: 776]
  ------------------
 1737|     34|			lsr_read_duration_ex(lsr, NULL, 0, info.far_ptr, "min", 0);
 1738|     34|			break;
 1739|    810|		}
 1740|    810|		if (lsr->last_error) return;
  ------------------
  |  Branch (1740:7): [True: 18, False: 792]
  ------------------
 1741|    810|	}
 1742|     40|}
lsr_dec.c:lsr_read_byte_align_string_list:
  550|     67|{
  551|     67|	XMLRI *iri;
  552|     67|	char *text, *sep, *sep2, *cur;
  553|     67|	if (!l) {
  ------------------
  |  Branch (553:6): [True: 18, False: 49]
  ------------------
  554|     18|		lsr->last_error = GF_BAD_PARAM;
  555|     18|		return;
  556|     18|	}
  557|     65|	while (gf_list_count(l)) {
  ------------------
  |  Branch (557:9): [True: 16, False: 49]
  ------------------
  558|     16|		void* item = gf_list_last(l);
  559|     16|		gf_list_rem_last(l);
  560|     16|		if (item) {
  ------------------
  |  Branch (560:7): [True: 16, False: 0]
  ------------------
  561|     16|			if (is_iri) {
  ------------------
  |  Branch (561:8): [True: 11, False: 5]
  ------------------
  562|     11|				gf_free(((XMLRI*)item)->string);
  563|     11|			}
  564|     16|			gf_free(item);
  565|     16|		}
  566|     16|	}
  567|     49|	text = NULL;
  568|     49|	lsr_read_byte_align_string(lsr, &text, name);
  569|     49|	cur = text;
  570|     49|	while (cur) {
  ------------------
  |  Branch (570:9): [True: 49, False: 0]
  ------------------
  571|     49|		sep = strchr(cur, '\'');
  572|     49|		if (!sep && is_font) {
  ------------------
  |  Branch (572:7): [True: 49, False: 0]
  |  Branch (572:15): [True: 0, False: 49]
  ------------------
  573|      0|			sep = strchr(cur, ',');
  574|      0|			if (!sep) sep = strchr(cur, ';');
  ------------------
  |  Branch (574:8): [True: 0, False: 0]
  ------------------
  575|      0|		}
  576|     49|		if (!sep) {
  ------------------
  |  Branch (576:7): [True: 49, False: 0]
  ------------------
  577|     49|			if (is_iri) {
  ------------------
  |  Branch (577:8): [True: 25, False: 24]
  ------------------
  578|     25|				GF_SAFEALLOC(iri, XMLRI);
  ------------------
  |  |  242|     25|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     25|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     25|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 25, False: 0]
  |  |  ------------------
  |  |  245|     25|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     25|		}\
  |  |  247|     25|	}
  ------------------
  579|     25|				if (iri) {
  ------------------
  |  Branch (579:9): [True: 25, False: 0]
  ------------------
  580|     25|					iri->string = gf_strdup(cur);
  581|     25|					iri->type = XMLRI_STRING;
  582|     25|					gf_list_add(l, iri);
  583|     25|				} else {
  584|      0|					lsr->last_error = GF_OUT_OF_MEM;
  585|      0|				}
  586|     25|			} else {
  587|     24|				gf_list_add(l, gf_strdup(cur));
  588|     24|			}
  589|     49|			break;
  590|     49|		}
  591|      0|		sep2 = strchr(sep + 1, '\'');
  592|      0|		if (!sep2 && !is_font) {
  ------------------
  |  Branch (592:7): [True: 0, False: 0]
  |  Branch (592:16): [True: 0, False: 0]
  ------------------
  593|      0|			if (is_iri) {
  ------------------
  |  Branch (593:8): [True: 0, False: 0]
  ------------------
  594|      0|				GF_SAFEALLOC(iri, XMLRI);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
  595|      0|				if (iri) {
  ------------------
  |  Branch (595:9): [True: 0, False: 0]
  ------------------
  596|      0|					iri->string = gf_strdup(cur);
  597|      0|					iri->type = XMLRI_STRING;
  598|      0|					gf_list_add(l, iri);
  599|      0|				} else {
  600|      0|					lsr->last_error = GF_OUT_OF_MEM;
  601|      0|				}
  602|      0|			} else {
  603|      0|				gf_list_add(l, gf_strdup(cur));
  604|      0|			}
  605|      0|			break;
  606|      0|		}
  607|      0|		if (sep2)
  ------------------
  |  Branch (607:7): [True: 0, False: 0]
  ------------------
  608|      0|			sep2[0] = 0;
  609|      0|		else
  610|      0|			sep[0] = 0;
  611|      0|		if (is_iri) {
  ------------------
  |  Branch (611:7): [True: 0, False: 0]
  ------------------
  612|      0|			GF_SAFEALLOC(iri, XMLRI);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
  613|      0|			if (iri) {
  ------------------
  |  Branch (613:8): [True: 0, False: 0]
  ------------------
  614|      0|				iri->string = gf_strdup(sep+1);
  615|      0|				iri->type = XMLRI_STRING;
  616|      0|				gf_list_add(l, iri);
  617|      0|			} else {
  618|      0|				lsr->last_error = GF_OUT_OF_MEM;
  619|      0|			}
  620|      0|		} else {
  621|      0|			gf_list_add(l, gf_strdup(sep+1));
  622|      0|		}
  623|      0|		if (sep2) {
  ------------------
  |  Branch (623:7): [True: 0, False: 0]
  ------------------
  624|      0|			sep2[0] = '\'';
  625|      0|			cur = sep2 + 1;
  626|      0|		} else {
  627|      0|			sep[0] = ';';
  628|      0|			cur = sep + 1;
  629|      0|		}
  630|      0|	}
  631|     49|	gf_free(text);
  632|     49|}
lsr_dec.c:lsr_read_fixed_clamp:
  959|     76|{
  960|     76|	s32 val;
  961|     76|	GF_LSR_READ_INT(lsr, val, 8, name);
  ------------------
  |  |   34|     76|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     76|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 76]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     76|	} else {\
  |  |   39|     76|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     76|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     76|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 76]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     76|	}\
  |  |   42|     76|}
  ------------------
  962|     76|	return INT2FIX(val) / 255;
  ------------------
  |  |  119|     76|#define INT2FIX(v)		((Float) (v))
  ------------------
  963|     76|}
lsr_dec.c:lsr_read_paint:
  692|    135|{
  693|    135|	u32 val;
  694|    135|	GF_LSR_READ_INT(lsr, val, 1, "hasIndex");
  ------------------
  |  |   34|    135|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    135|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 135]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    135|	} else {\
  |  |   39|    135|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    135|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    135|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 135]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    135|	}\
  |  |   42|    135|}
  ------------------
  695|    135|	if (val) {
  ------------------
  |  Branch (695:6): [True: 66, False: 69]
  ------------------
  696|     66|		GF_LSR_READ_INT(lsr, val, lsr->colorIndexBits, name);
  ------------------
  |  |   34|     66|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     66|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 66]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     66|	} else {\
  |  |   39|     66|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     66|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     66|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 66]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     66|	}\
  |  |   42|     66|}
  ------------------
  697|     66|		lsr_get_color(lsr, val, &paint->color);
  698|     66|		paint->type = SVG_PAINT_COLOR;
  699|     66|		paint->color.type = 0;
  700|     69|	} else {
  701|     69|		GF_LSR_READ_INT(lsr, val, 2, "enum");
  ------------------
  |  |   34|     69|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     69|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 69]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     69|	} else {\
  |  |   39|     69|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     69|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     69|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 69]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     69|	}\
  |  |   42|     69|}
  ------------------
  702|     69|		switch (val) {
  ------------------
  |  Branch (702:11): [True: 69, False: 0]
  ------------------
  703|     16|		case 0:
  ------------------
  |  Branch (703:3): [True: 16, False: 53]
  ------------------
  704|     16|			GF_LSR_READ_INT(lsr, val, 2, "choice");
  ------------------
  |  |   34|     16|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     16|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 16]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     16|	} else {\
  |  |   39|     16|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     16|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     16|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 16]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     16|	}\
  |  |   42|     16|}
  ------------------
  705|     16|			switch (val) {
  706|      7|			case 0:
  ------------------
  |  Branch (706:4): [True: 7, False: 9]
  ------------------
  707|      7|				paint->type = SVG_PAINT_INHERIT;
  708|      7|				break;
  709|      4|			case 1:
  ------------------
  |  Branch (709:4): [True: 4, False: 12]
  ------------------
  710|      4|				paint->type = SVG_PAINT_COLOR;
  711|      4|				paint->color.type = SVG_COLOR_CURRENTCOLOR;
  712|      4|				break;
  713|      5|			default:
  ------------------
  |  Branch (713:4): [True: 5, False: 11]
  ------------------
  714|      5|				paint->type = SVG_PAINT_NONE;
  715|      5|				break;
  716|     16|			}
  717|     16|			break;
  718|     16|		case 1:
  ------------------
  |  Branch (718:3): [True: 9, False: 60]
  ------------------
  719|      9|		{
  720|      9|			XMLRI iri;
  721|      9|			memset(&iri, 0, sizeof(XMLRI));
  722|      9|			iri.type = 0xFF;
  723|      9|			lsr_read_any_uri(lsr, &iri, name);
  724|      9|			gf_node_unregister_iri(lsr->sg, &iri);
  725|      9|			gf_list_del_item(lsr->deferred_hrefs, &iri);
  726|       |
  727|      9|			paint->type = SVG_PAINT_URI;
  728|      9|			if (iri.string) {
  ------------------
  |  Branch (728:8): [True: 4, False: 5]
  ------------------
  729|      4|				paint->type = SVG_PAINT_URI;
  730|      4|				paint->iri.type = XMLRI_STRING;
  731|      4|				if (paint->iri.string) gf_free(paint->iri.string);
  ------------------
  |  Branch (731:9): [True: 0, False: 4]
  ------------------
  732|      4|				paint->iri.string = iri.string;
  733|      5|			} else if (iri.target) {
  ------------------
  |  Branch (733:15): [True: 1, False: 4]
  ------------------
  734|      1|				paint->iri.type = XMLRI_ELEMENTID;
  735|      1|				paint->iri.target = iri.target;
  736|      1|			}
  737|      9|		}
  738|      9|		break;
  739|     31|		case 2:
  ------------------
  |  Branch (739:3): [True: 31, False: 38]
  ------------------
  740|     31|		{
  741|     31|			char *sysPaint=NULL;
  742|     31|			lsr_read_byte_align_string(lsr, &sysPaint, "systemsPaint");
  743|     31|			if (sysPaint) {
  ------------------
  |  Branch (743:8): [True: 30, False: 1]
  ------------------
  744|     30|				paint->type = SVG_PAINT_COLOR;
  745|     30|				paint->color.type = gf_svg_get_system_paint_server_type(sysPaint);
  746|     30|				gf_free(sysPaint);
  747|     30|			}
  748|     31|		}
  749|     31|		break;
  750|     13|		case 3:
  ------------------
  |  Branch (750:3): [True: 13, False: 56]
  ------------------
  751|     13|			lsr_read_extension(lsr, name);
  752|     13|			break;
  753|     69|		}
  754|     69|	}
  755|    135|}
lsr_dec.c:lsr_get_color:
  482|     66|{
  483|     66|	LSRCol *c;
  484|     66|	if (idx>=lsr->nb_cols) return;
  ------------------
  |  Branch (484:6): [True: 19, False: 47]
  ------------------
  485|       |
  486|     47|	c = &lsr->col_table[idx];
  487|     47|	color->red = INT2FIX(c->r) / lsr->color_scale;
  ------------------
  |  |  119|     47|#define INT2FIX(v)		((Float) (v))
  ------------------
  488|     47|	color->green = INT2FIX(c->g) / lsr->color_scale;
  ------------------
  |  |  119|     47|#define INT2FIX(v)		((Float) (v))
  ------------------
  489|     47|	color->blue = INT2FIX(c->b) / lsr->color_scale;
  ------------------
  |  |  119|     47|#define INT2FIX(v)		((Float) (v))
  ------------------
  490|     47|	color->type = SVG_COLOR_RGBCOLOR;
  491|     47|}
lsr_dec.c:lsr_read_extension:
  279|     46|{
  280|     46|	u32 len = lsr_read_vluimsbf5(lsr, name);
  281|       |#if 0
  282|       |	*out_data = gf_malloc(sizeof(char)*len);
  283|       |	gf_bs_read_data(lsr->bs, *out_data, len);
  284|       |	*out_len = len;
  285|       |#else
  286|  1.19M|	while (len && gf_bs_available(lsr->bs) ) {
  ------------------
  |  Branch (286:9): [True: 1.19M, False: 45]
  |  Branch (286:16): [True: 1.19M, False: 1]
  ------------------
  287|  1.19M|		gf_bs_read_int(lsr->bs, 8);
  288|  1.19M|		len--;
  289|  1.19M|	}
  290|     46|	if (len) lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
  ------------------
  |  Branch (290:6): [True: 1, False: 45]
  ------------------
  291|     46|#endif
  292|     46|}
lsr_dec.c:lsr_read_line_increment_type:
  495|      9|{
  496|      9|	u32 val;
  497|      9|	GF_LSR_READ_INT(lsr, val, 1, "choice");
  ------------------
  |  |   34|      9|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      9|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 9]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      9|	} else {\
  |  |   39|      9|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      9|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      9|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      9|	}\
  |  |   42|      9|}
  ------------------
  498|      9|	if (val==1) {
  ------------------
  |  Branch (498:6): [True: 5, False: 4]
  ------------------
  499|      5|		GF_LSR_READ_INT(lsr, val, 1, "type");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
  500|      5|		if (val==1) li->type=SVG_NUMBER_INHERIT;
  ------------------
  |  Branch (500:7): [True: 1, False: 4]
  ------------------
  501|      4|		else li->type=SVG_NUMBER_AUTO;
  502|      5|	} else {
  503|      4|		li->value = lsr_read_fixed_16_8(lsr, "line-increment-value");
  504|      4|	}
  505|      9|}
lsr_dec.c:lsr_read_fixed_16_8:
  449|  86.3k|{
  450|  86.3k|	u32 val;
  451|  86.3k|	GF_LSR_READ_INT(lsr, val, 24, name);
  ------------------
  |  |   34|  86.3k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  86.3k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 1, False: 86.3k]
  |  |  ------------------
  |  |   36|      1|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      1|		(_val) = 0;\
  |  |   38|  86.3k|	} else {\
  |  |   39|  86.3k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  86.3k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  86.3k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 86.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  86.3k|	}\
  |  |   42|  86.3k|}
  ------------------
  452|  86.3k|	if (val & (1<<23)) {
  ------------------
  |  Branch (452:6): [True: 35.9k, False: 50.4k]
  ------------------
  453|  35.9k|		s32 res = val - (1<<24);
  454|       |#ifdef GPAC_FIXED_POINT
  455|       |		return res*256;
  456|       |#else
  457|  35.9k|		return INT2FIX(res) / 256;
  ------------------
  |  |  119|  35.9k|#define INT2FIX(v)		((Float) (v))
  ------------------
  458|  35.9k|#endif
  459|  50.4k|	} else {
  460|       |#ifdef GPAC_FIXED_POINT
  461|       |		return val*256;
  462|       |#else
  463|  50.4k|		return INT2FIX(val) / 256;
  ------------------
  |  |  119|  50.4k|#define INT2FIX(v)		((Float) (v))
  ------------------
  464|  50.4k|#endif
  465|  50.4k|	}
  466|  86.3k|}
lsr_dec.c:lsr_read_fixed_16_8i:
  469|     46|{
  470|     46|	s32 val;
  471|     46|	GF_LSR_READ_INT(lsr, val, 1, name);
  ------------------
  |  |   34|     46|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     46|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 46]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     46|	} else {\
  |  |   39|     46|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     46|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     46|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     46|	}\
  |  |   42|     46|}
  ------------------
  472|     46|	if (val) {
  ------------------
  |  Branch (472:6): [True: 19, False: 27]
  ------------------
  473|     19|		n->type=SVG_NUMBER_INHERIT;
  474|     27|	} else {
  475|     27|		n->type=SVG_NUMBER_VALUE;
  476|     27|		n->value = lsr_read_fixed_16_8(lsr, name);
  477|     27|	}
  478|     46|}
lsr_dec.c:lsr_read_focus:
  966|    102|{
  967|    102|	u32 flag;
  968|       |
  969|    102|	if (foc->target.string) {
  ------------------
  |  Branch (969:6): [True: 15, False: 87]
  ------------------
  970|     15|		gf_free(foc->target.string);
  971|     15|		foc->target.string = NULL;
  972|     15|	}
  973|    102|	if (foc->target.target) foc->target.target = NULL;
  ------------------
  |  Branch (973:6): [True: 1, False: 101]
  ------------------
  974|    102|	gf_node_unregister_iri(lsr->sg, &foc->target);
  975|    102|	gf_list_del_item(lsr->deferred_hrefs, &foc->target);
  976|       |
  977|    102|	GF_LSR_READ_INT(lsr, flag, 1, "isEnum");
  ------------------
  |  |   34|    102|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    102|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 102]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    102|	} else {\
  |  |   39|    102|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    102|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    102|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 102]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    102|	}\
  |  |   42|    102|}
  ------------------
  978|    102|	if (flag) {
  ------------------
  |  Branch (978:6): [True: 32, False: 70]
  ------------------
  979|     32|		GF_LSR_READ_INT(lsr, foc->type, 1, "enum");
  ------------------
  |  |   34|     32|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     32|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 32]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     32|	} else {\
  |  |   39|     32|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     32|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     32|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 32]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     32|	}\
  |  |   42|     32|}
  ------------------
  980|     70|	} else {
  981|     70|		foc->type = SVG_FOCUS_IRI;
  982|     70|		lsr_read_codec_IDREF(lsr, &foc->target, "id");
  983|     70|	}
  984|    102|}
lsr_dec.c:lsr_read_codec_IDREF:
  406|  3.61k|{
  407|  3.61k|	GF_Node *n;
  408|  3.61k|	u32 flag;
  409|  3.61k|	u32 nID = 1+lsr_read_vluimsbf5(lsr, name);
  410|       |
  411|  3.61k|	GF_LSR_READ_INT(lsr, flag, 1, "reserved");
  ------------------
  |  |   34|  3.61k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  3.61k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3.61k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  3.61k|	} else {\
  |  |   39|  3.61k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  3.61k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  3.61k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3.61k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  3.61k|	}\
  |  |   42|  3.61k|}
  ------------------
  412|  3.61k|	if (flag) {
  ------------------
  |  Branch (412:6): [True: 1.18k, False: 2.42k]
  ------------------
  413|  1.18k|		u32 len = lsr_read_vluimsbf5(lsr, "len");
  414|  1.18k|		GF_LSR_READ_INT(lsr, flag, len, "reserved");
  ------------------
  |  |   34|  1.18k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  1.18k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1.18k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  1.18k|	} else {\
  |  |   39|  1.18k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  1.18k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  1.18k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1.18k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  1.18k|	}\
  |  |   42|  1.18k|}
  ------------------
  415|  1.18k|	}
  416|       |
  417|  3.61k|	n = gf_sg_find_node(lsr->sg, nID);
  418|  3.61k|	if (!n) {
  ------------------
  |  Branch (418:6): [True: 3.19k, False: 417]
  ------------------
  419|  3.19k|		char NodeID[1024];
  420|  3.19k|		sprintf(NodeID, "N%d", nID-1);
  421|  3.19k|		if (href->string) gf_free(href->string);
  ------------------
  |  Branch (421:7): [True: 22, False: 3.17k]
  ------------------
  422|  3.19k|		href->string = gf_strdup(NodeID);
  423|  3.19k|		if (href->type!=0xFF && gf_list_find(lsr->deferred_hrefs, href)<0) {
  ------------------
  |  Branch (423:7): [True: 91, False: 3.10k]
  |  Branch (423:27): [True: 89, False: 2]
  ------------------
  424|     89|			gf_list_add(lsr->deferred_hrefs, href);
  425|     89|			gf_node_register_iri(lsr->sg, href);
  426|     89|		}
  427|  3.19k|		href->type = XMLRI_ELEMENTID;
  428|  3.19k|		return;
  429|  3.19k|	}
  430|    417|	href->target = (SVG_Element *)n;
  431|    417|	href->type = XMLRI_ELEMENTID;
  432|    417|	gf_node_register_iri(lsr->sg, href);
  433|    417|}
lsr_dec.c:lsr_read_matrix:
  912|      5|{
  913|      5|	u32 flag;
  914|      5|	gf_mx2d_init(mx->mat);
  ------------------
  |  |  391|      5|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      5|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
  915|      5|	mx->is_ref = 0;
  916|      5|	GF_LSR_READ_INT(lsr, flag, 1, "isNotMatrix");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
  917|      5|	if (flag) {
  ------------------
  |  Branch (917:6): [True: 1, False: 4]
  ------------------
  918|      1|		GF_LSR_READ_INT(lsr, flag, 1, "isRef");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
  919|      1|		if (flag) {
  ------------------
  |  Branch (919:7): [True: 0, False: 1]
  ------------------
  920|      0|			GF_LSR_READ_INT(lsr, flag, 1, "hasXY");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
  921|      0|			if (flag) {
  ------------------
  |  Branch (921:8): [True: 0, False: 0]
  ------------------
  922|      0|				mx->mat.m[2] = lsr_read_fixed_16_8(lsr, "valueX");
  923|      0|				mx->mat.m[5] = lsr_read_fixed_16_8(lsr, "valueY");
  924|      0|			}
  925|      1|		} else {
  926|      1|			lsr_read_extension(lsr, "ext");
  927|      1|		}
  928|      4|	} else {
  929|      4|		lsr->coord_bits += lsr->scale_bits;
  930|      4|		GF_LSR_READ_INT(lsr, flag, 1, "xx_yy_present");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
  931|      4|		if (flag) {
  ------------------
  |  Branch (931:7): [True: 3, False: 1]
  ------------------
  932|      3|			GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "xx");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
  933|      3|			mx->mat.m[0] = lsr_translate_scale(lsr, flag);
  934|      3|			GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "yy");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
  935|      3|			mx->mat.m[4] = lsr_translate_scale(lsr, flag);
  936|      3|		} else {
  937|      1|			mx->mat.m[0] = mx->mat.m[4] = FIX_ONE;
  ------------------
  |  |  118|      1|#define FIX_ONE			1.0f
  ------------------
  938|      1|		}
  939|      4|		GF_LSR_READ_INT(lsr, flag, 1, "xy_yx_present");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
  940|      4|		if (flag) {
  ------------------
  |  Branch (940:7): [True: 4, False: 0]
  ------------------
  941|      4|			GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "xy");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
  942|      4|			mx->mat.m[1] = lsr_translate_scale(lsr, flag);
  943|      4|			GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "yx");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
  944|      4|			mx->mat.m[3] = lsr_translate_scale(lsr, flag);
  945|      4|		}
  946|       |
  947|      4|		GF_LSR_READ_INT(lsr, flag, 1, "xz_yz_present");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
  948|      4|		if (flag) {
  ------------------
  |  Branch (948:7): [True: 3, False: 1]
  ------------------
  949|      3|			GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "xz");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
  950|      3|			mx->mat.m[2] = lsr_translate_coords(lsr, flag, lsr->coord_bits);
  951|      3|			GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "yz");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
  952|      3|			mx->mat.m[5] = lsr_translate_coords(lsr, flag, lsr->coord_bits);
  953|      3|		}
  954|      4|		lsr->coord_bits -= lsr->scale_bits;
  955|      4|	}
  956|      5|}
lsr_dec.c:lsr_translate_scale:
  899|     14|{
  900|     14|	if (lsr && lsr->coord_bits && ((lsr->coord_bits-1) < 8*sizeof(val)) && val >> (lsr->coord_bits-1) ) {
  ------------------
  |  Branch (900:6): [True: 14, False: 0]
  |  Branch (900:13): [True: 0, False: 14]
  |  Branch (900:32): [True: 0, False: 0]
  |  Branch (900:73): [True: 0, False: 0]
  ------------------
  901|      0|		s32 neg;
  902|      0|		if (lsr->coord_bits >= 31)
  ------------------
  |  Branch (902:7): [True: 0, False: 0]
  ------------------
  903|      0|			neg = (s32)val - 0x80000000;
  904|      0|		else
  905|      0|			neg = (s32)val - (1 << lsr->coord_bits);
  906|      0|		return INT2FIX(neg) / 256 ;
  ------------------
  |  |  119|      0|#define INT2FIX(v)		((Float) (v))
  ------------------
  907|     14|	} else {
  908|     14|		return INT2FIX(val) / 256;
  ------------------
  |  |  119|     14|#define INT2FIX(v)		((Float) (v))
  ------------------
  909|     14|	}
  910|     14|}
lsr_dec.c:lsr_translate_coords:
  865|  8.53k|{
  866|  8.53k|	if (!nb_bits) return 0;
  ------------------
  |  Branch (866:6): [True: 105, False: 8.43k]
  ------------------
  867|  8.43k|	if (nb_bits>=32) return 0;
  ------------------
  |  Branch (867:6): [True: 0, False: 8.43k]
  ------------------
  868|       |
  869|       |#ifdef GPAC_FIXED_POINT
  870|       |	if (val >> (nb_bits-1) ) {
  871|       |		s32 neg;
  872|       |		if (nb_bits == 31)
  873|       |			neg = (s32)val - 0x80000000;
  874|       |		else
  875|       |			neg = (s32)val - (1 << nb_bits);
  876|       |		if (neg < -FIX_ONE / 2)
  877|       |			return 2 * gf_divfix(INT2FIX(neg/2), lsr->res_factor);
  878|       |		return gf_divfix(INT2FIX(neg), lsr->res_factor);
  879|       |	} else {
  880|       |		if (val > FIX_ONE / 2)
  881|       |			return 2 * gf_divfix(INT2FIX(val/2), lsr->res_factor);
  882|       |		return gf_divfix(INT2FIX(val), lsr->res_factor);
  883|       |	}
  884|       |#else
  885|  8.43k|	if (val >> (nb_bits-1) ) {
  ------------------
  |  Branch (885:6): [True: 3.84k, False: 4.59k]
  ------------------
  886|  3.84k|		s32 neg;
  887|  3.84k|		if (nb_bits == 31)
  ------------------
  |  Branch (887:7): [True: 0, False: 3.84k]
  ------------------
  888|      0|			neg = (s32)val - 0x80000000;
  889|  3.84k|		else
  890|  3.84k|			neg = (s32)val - (1 << nb_bits);
  891|  3.84k|		return ((Fixed)neg) / lsr->res_factor;
  892|  4.59k|	} else {
  893|  4.59k|		return ((Fixed)val) / lsr->res_factor;
  894|  4.59k|	}
  895|  8.43k|#endif
  896|  8.43k|}
lsr_dec.c:lsr_read_any_uri:
  635|     76|{
  636|     76|	u32 val;
  637|     76|	GF_LSR_READ_INT(lsr, val, 1, "hasUri");
  ------------------
  |  |   34|     76|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     76|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 76]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     76|	} else {\
  |  |   39|     76|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     76|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     76|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 76]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     76|	}\
  |  |   42|     76|}
  ------------------
  638|     76|	if (val) {
  ------------------
  |  Branch (638:6): [True: 34, False: 42]
  ------------------
  639|     34|		char *s = NULL;
  640|     34|		iri->type=XMLRI_STRING;
  641|     34|		if (iri->string) {
  ------------------
  |  Branch (641:7): [True: 5, False: 29]
  ------------------
  642|      5|			gf_free(iri->string);
  643|      5|			iri->string = NULL;
  644|      5|		}
  645|     34|		lsr_read_byte_align_string(lsr, &s, "uri");
  646|     34|		GF_LSR_READ_INT(lsr, val, 1, "hasData");
  ------------------
  |  |   34|     34|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     34|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 34]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     34|	} else {\
  |  |   39|     34|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     34|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     34|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     34|	}\
  |  |   42|     34|}
  ------------------
  647|     34|		if (!val) {
  ------------------
  |  Branch (647:7): [True: 33, False: 1]
  ------------------
  648|     33|			iri->string = s;
  649|     33|		} else {
  650|      1|			u32 len_rad, len;
  651|      1|			len = lsr_read_vluimsbf5(lsr, "len");
  652|      1|			if (len > gf_bs_available(lsr->bs)) {
  ------------------
  |  Branch (652:8): [True: 0, False: 1]
  ------------------
  653|      0|				lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
  654|      0|				if (s) { gf_free(s); }
  ------------------
  |  Branch (654:9): [True: 0, False: 0]
  ------------------
  655|      0|				return;
  656|      0|			}
  657|      1|			len_rad = s ? (u32) strlen(s) : 0;
  ------------------
  |  Branch (657:14): [True: 0, False: 1]
  ------------------
  658|      1|			if (iri->string) gf_free(iri->string);
  ------------------
  |  Branch (658:8): [True: 0, False: 1]
  ------------------
  659|      1|			iri->string = (char*)gf_malloc(sizeof(char)*(len_rad+1+len+1));
  660|      1|			if (!iri->string) {
  ------------------
  |  Branch (660:8): [True: 0, False: 1]
  ------------------
  661|      0|				lsr->last_error = GF_OUT_OF_MEM;
  662|      0|				if (s) { gf_free(s); }
  ------------------
  |  Branch (662:9): [True: 0, False: 0]
  ------------------
  663|      0|				return;
  664|      0|			}
  665|       |
  666|      1|			iri->string[0] = 0;
  667|      1|			if (s) {
  ------------------
  |  Branch (667:8): [True: 0, False: 1]
  ------------------
  668|      0|				strcpy(iri->string, s);
  669|      0|				gf_free(s);
  670|      0|			}
  671|      1|			strcat(iri->string, ",");
  672|      1|			gf_bs_read_data(lsr->bs, iri->string + len_rad + 1, len);
  673|      1|			iri->string[len_rad + 1 + len] = 0;
  674|      1|		}
  675|     34|	}
  676|     76|	GF_LSR_READ_INT(lsr, val, 1, "hasID");
  ------------------
  |  |   34|     76|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     76|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 76]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     76|	} else {\
  |  |   39|     76|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     76|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     76|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 76]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     76|	}\
  |  |   42|     76|}
  ------------------
  677|     76|	if (val) lsr_read_codec_IDREF(lsr, iri, "idref");
  ------------------
  |  Branch (677:6): [True: 27, False: 49]
  ------------------
  678|       |
  679|     76|	GF_LSR_READ_INT(lsr, val, 1, "hasStreamID");
  ------------------
  |  |   34|     76|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     76|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 76]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     76|	} else {\
  |  |   39|     76|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     76|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     76|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 76]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     76|	}\
  |  |   42|     76|}
  ------------------
  680|     76|	if (val) {
  ------------------
  |  Branch (680:6): [True: 46, False: 30]
  ------------------
  681|     46|		iri->type = XMLRI_STREAMID;
  682|     46|		iri->lsr_stream_id = lsr_read_vluimsbf5(lsr, name);
  683|     46|		GF_LSR_READ_INT(lsr, val, 1, "reserved");
  ------------------
  |  |   34|     46|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     46|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 46]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     46|	} else {\
  |  |   39|     46|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     46|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     46|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 46]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     46|	}\
  |  |   42|     46|}
  ------------------
  684|     46|		if (val) {
  ------------------
  |  Branch (684:7): [True: 11, False: 35]
  ------------------
  685|     11|			u32 len = lsr_read_vluimsbf5(lsr, "len");
  686|     11|			GF_LSR_READ_INT(lsr, val, len, "reserved");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
  687|     11|		}
  688|     46|	}
  689|     76|}
lsr_dec.c:lsr_read_duration_ex:
 1395|     55|{
 1396|     55|	GF_FieldInfo info;
 1397|     55|	u32 val = 1;
 1398|       |
 1399|     55|	if (skipable) {
  ------------------
  |  Branch (1399:6): [True: 19, False: 36]
  ------------------
 1400|     19|		GF_LSR_READ_INT(lsr, val, 1, name);
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 1401|     19|		if (!val) return;
  ------------------
  |  Branch (1401:7): [True: 10, False: 9]
  ------------------
 1402|     19|	}
 1403|     45|	if (!smil) {
  ------------------
  |  Branch (1403:6): [True: 9, False: 36]
  ------------------
 1404|      9|		lsr->last_error = gf_node_get_attribute_by_tag(n, tag, GF_TRUE, GF_FALSE, &info);
 1405|      9|		if (lsr->last_error) return;
  ------------------
  |  Branch (1405:7): [True: 0, False: 9]
  ------------------
 1406|      9|		smil = (SMIL_Duration *)info.far_ptr;
 1407|      9|	}
 1408|     45|	smil->type = 0;
 1409|     45|	smil->clock_value=0;
 1410|       |
 1411|     45|	GF_LSR_READ_INT(lsr, val, 1, "choice");
  ------------------
  |  |   34|     45|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     45|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 45]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     45|	} else {\
  |  |   39|     45|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     45|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     45|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 45]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     45|	}\
  |  |   42|     45|}
  ------------------
 1412|     45|	if (val) {
  ------------------
  |  Branch (1412:6): [True: 39, False: 6]
  ------------------
 1413|     39|		GF_LSR_READ_INT(lsr, smil->type, 2, "time");
  ------------------
  |  |   34|     39|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     39|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 39]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     39|	} else {\
  |  |   39|     39|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     39|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     39|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 39]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     39|	}\
  |  |   42|     39|}
  ------------------
 1414|     39|	} else {
 1415|      6|		Bool sign;
 1416|      6|		u32 now;
 1417|      6|		GF_LSR_READ_INT(lsr, sign, 1, "sign");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 1418|      6|		now = lsr_read_vluimsbf5(lsr, "value");
 1419|      6|		smil->clock_value = now;
 1420|      6|		smil->clock_value /= lsr->time_resolution;
 1421|      6|		if (sign) smil->clock_value *= -1;
  ------------------
  |  Branch (1421:7): [True: 2, False: 4]
  ------------------
 1422|      6|		smil->type = SMIL_DURATION_DEFINED;
 1423|      6|	}
 1424|     45|}
lsr_dec.c:lsr_read_smil_times:
 1354|     20|{
 1355|     20|	GF_FieldInfo info;
 1356|     20|	SMIL_Time *v;
 1357|     20|	u32 val, i, count;
 1358|       |
 1359|     20|	if (skipable) {
  ------------------
  |  Branch (1359:6): [True: 19, False: 1]
  ------------------
 1360|     19|		GF_LSR_READ_INT(lsr, val, 1, name);
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 1361|     19|		if (!val) return;
  ------------------
  |  Branch (1361:7): [True: 11, False: 8]
  ------------------
 1362|     19|	}
 1363|      9|	if (!times) {
  ------------------
  |  Branch (1363:6): [True: 8, False: 1]
  ------------------
 1364|      8|		lsr->last_error = gf_node_get_attribute_by_tag(n, tag, GF_TRUE, GF_FALSE, &info);
 1365|      8|		times = (SMIL_Times*)info.far_ptr;
 1366|      8|	}
 1367|       |
 1368|      9|	while (gf_list_count(*times)) {
  ------------------
  |  Branch (1368:9): [True: 0, False: 9]
  ------------------
 1369|      0|		v = (SMIL_Time *)gf_list_last(*times);
 1370|      0|		gf_list_rem_last(*times);
 1371|      0|		if (v->element_id) gf_free(v->element_id);
  ------------------
  |  Branch (1371:7): [True: 0, False: 0]
  ------------------
 1372|      0|		gf_free(v);
 1373|      0|	}
 1374|       |
 1375|      9|	GF_LSR_READ_INT(lsr, val, 1, "choice");
  ------------------
  |  |   34|      9|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      9|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 9]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      9|	} else {\
  |  |   39|      9|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      9|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      9|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      9|	}\
  |  |   42|      9|}
  ------------------
 1376|      9|	if (val) {
  ------------------
  |  Branch (1376:6): [True: 2, False: 7]
  ------------------
 1377|      2|		GF_SAFEALLOC(v, SMIL_Time);
  ------------------
  |  |  242|      2|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      2|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      2|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 2, False: 0]
  |  |  ------------------
  |  |  245|      2|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      2|		}\
  |  |  247|      2|	}
  ------------------
 1378|      2|		if (v) {
  ------------------
  |  Branch (1378:7): [True: 2, False: 0]
  ------------------
 1379|      2|			v->type = GF_SMIL_TIME_INDEFINITE;
 1380|      2|			gf_list_add(*times, v);
 1381|      2|		} else {
 1382|      0|			lsr->last_error = GF_OUT_OF_MEM;
 1383|      0|		}
 1384|      2|		return;
 1385|      2|	}
 1386|      7|	count = lsr_read_vluimsbf5(lsr, "count");
 1387|  10.9k|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (1387:12): [True: 10.9k, False: 5]
  ------------------
 1388|  10.9k|		v = lsr_read_smil_time(lsr, n);
 1389|  10.9k|		gf_list_add(*times, v);
 1390|  10.9k|		if (lsr->last_error) return;
  ------------------
  |  Branch (1390:7): [True: 2, False: 10.9k]
  ------------------
 1391|  10.9k|	}
 1392|      7|}
lsr_dec.c:lsr_read_smil_time:
 1307|  10.9k|{
 1308|  10.9k|	SMIL_Time *t;
 1309|  10.9k|	u32 val;
 1310|       |
 1311|  10.9k|	GF_SAFEALLOC(t, SMIL_Time);
  ------------------
  |  |  242|  10.9k|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|  10.9k|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|  10.9k|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 10.9k, False: 0]
  |  |  ------------------
  |  |  245|  10.9k|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|  10.9k|		}\
  |  |  247|  10.9k|	}
  ------------------
 1312|  10.9k|	if (!t) {
  ------------------
  |  Branch (1312:6): [True: 0, False: 10.9k]
  ------------------
 1313|      0|		lsr->last_error = GF_OUT_OF_MEM;
 1314|      0|		return NULL;
 1315|      0|	}
 1316|  10.9k|	t->type = GF_SMIL_TIME_CLOCK;
 1317|       |
 1318|  10.9k|	GF_LSR_READ_INT(lsr, val, 1, "hasEvent");
  ------------------
  |  |   34|  10.9k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  10.9k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 10.9k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  10.9k|	} else {\
  |  |   39|  10.9k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  10.9k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  10.9k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 10.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  10.9k|	}\
  |  |   42|  10.9k|}
  ------------------
 1319|  10.9k|	if (val) {
  ------------------
  |  Branch (1319:6): [True: 4.87k, False: 6.03k]
  ------------------
 1320|  4.87k|		t->type = GF_SMIL_TIME_EVENT;
 1321|  4.87k|		GF_LSR_READ_INT(lsr, val, 1, "hasIdentifier");
  ------------------
  |  |   34|  4.87k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  4.87k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4.87k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  4.87k|	} else {\
  |  |   39|  4.87k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  4.87k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  4.87k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4.87k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  4.87k|	}\
  |  |   42|  4.87k|}
  ------------------
 1322|  4.87k|		if (val) {
  ------------------
  |  Branch (1322:7): [True: 3.51k, False: 1.36k]
  ------------------
 1323|  3.51k|			XMLRI iri;
 1324|  3.51k|			iri.type = 0xFF;
 1325|  3.51k|			iri.string = NULL;
 1326|  3.51k|			lsr_read_codec_IDREF(lsr, &iri, "idref");
 1327|  3.51k|			gf_node_unregister_iri(lsr->sg, &iri);
 1328|  3.51k|			gf_list_del_item(lsr->deferred_hrefs, &iri);
 1329|  3.51k|			if (iri.string) {
  ------------------
  |  Branch (1329:8): [True: 3.10k, False: 410]
  ------------------
 1330|  3.10k|				t->element_id = iri.string;
 1331|  3.10k|			} else {
 1332|    410|				t->element = (GF_Node *)iri.target;
 1333|    410|			}
 1334|  3.51k|		}
 1335|  4.87k|		lsr_read_event_type(lsr, &t->event);
 1336|  4.87k|		if (t->event.type==GF_EVENT_EXECUTION_TIME) {
  ------------------
  |  Branch (1336:7): [True: 2, False: 4.87k]
  ------------------
 1337|      2|			t->type = GF_SMIL_TIME_CLOCK;
 1338|      2|			t->clock = gf_node_get_scene_time(n);
 1339|      2|		}
 1340|  4.87k|	}
 1341|  10.9k|	GF_LSR_READ_INT(lsr, val, 1, "hasClock");
  ------------------
  |  |   34|  10.9k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  10.9k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 10.9k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  10.9k|	} else {\
  |  |   39|  10.9k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  10.9k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  10.9k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 10.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  10.9k|	}\
  |  |   42|  10.9k|}
  ------------------
 1342|  10.9k|	if (val) {
  ------------------
  |  Branch (1342:6): [True: 5.11k, False: 5.80k]
  ------------------
 1343|  5.11k|		u32 now;
 1344|  5.11k|		GF_LSR_READ_INT(lsr, val, 1, "sign");
  ------------------
  |  |   34|  5.11k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  5.11k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5.11k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  5.11k|	} else {\
  |  |   39|  5.11k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  5.11k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  5.11k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5.11k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  5.11k|	}\
  |  |   42|  5.11k|}
  ------------------
 1345|  5.11k|		now = lsr_read_vluimsbf5(lsr, "value");
 1346|  5.11k|		t->clock = now;
 1347|  5.11k|		t->clock /= lsr->time_resolution;
 1348|  5.11k|		if (val) t->clock *= -1;
  ------------------
  |  Branch (1348:7): [True: 2.33k, False: 2.77k]
  ------------------
 1349|  5.11k|	}
 1350|  10.9k|	return t;
 1351|  10.9k|}
lsr_dec.c:lsr_read_event_type:
 1157|  4.87k|{
 1158|  4.87k|	u32 flag;
 1159|  4.87k|	memset(evtType, 0, sizeof(XMLEV_Event));
 1160|       |
 1161|  4.87k|	GF_LSR_READ_INT(lsr, flag, 1, "choice");
  ------------------
  |  |   34|  4.87k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  4.87k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4.87k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  4.87k|	} else {\
  |  |   39|  4.87k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  4.87k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  4.87k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4.87k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  4.87k|	}\
  |  |   42|  4.87k|}
  ------------------
 1162|  4.87k|	if (!flag) {
  ------------------
  |  Branch (1162:6): [True: 2.16k, False: 2.71k]
  ------------------
 1163|  2.16k|		char *evtName, *sep;
 1164|  2.16k|		evtName = NULL;
 1165|  2.16k|		lsr_read_byte_align_string(lsr, &evtName, "evtString");
 1166|  2.16k|		evtType->type = evtType->parameter = 0;
 1167|  2.16k|		if (evtName) {
  ------------------
  |  Branch (1167:7): [True: 2.15k, False: 2]
  ------------------
 1168|  2.15k|			sep = strchr(evtName, '(');
 1169|  2.15k|			if (sep) {
  ------------------
  |  Branch (1169:8): [True: 1.17k, False: 982]
  ------------------
 1170|  1.17k|				char *param;
 1171|  1.17k|				sep[0] = 0;
 1172|  1.17k|				evtType->type = gf_dom_event_type_by_name(evtName);
 1173|  1.17k|				sep[0] = '(';
 1174|  1.17k|				param = sep+1;
 1175|  1.17k|				sep = strchr(evtName, ')');
 1176|  1.17k|				if (sep) sep[0]=0;
  ------------------
  |  Branch (1176:9): [True: 879, False: 297]
  ------------------
 1177|  1.17k|				if (evtType->type==GF_EVENT_REPEAT) {
  ------------------
  |  Branch (1177:9): [True: 0, False: 1.17k]
  ------------------
 1178|      0|					evtType->parameter = atoi(param);
 1179|  1.17k|				} else {
 1180|  1.17k|					evtType->parameter = gf_dom_get_key_type(param);
 1181|  1.17k|				}
 1182|  1.17k|			} else {
 1183|    982|				evtType->type = gf_dom_event_type_by_name(evtName);
 1184|    982|			}
 1185|  2.15k|			gf_free(evtName);
 1186|  2.15k|		}
 1187|  2.71k|	} else {
 1188|  2.71k|		evtType->parameter = 0;
 1189|  2.71k|		GF_LSR_READ_INT(lsr, flag, 6, "event");
  ------------------
  |  |   34|  2.71k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  2.71k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2.71k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  2.71k|	} else {\
  |  |   39|  2.71k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  2.71k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  2.71k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2.71k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  2.71k|	}\
  |  |   42|  2.71k|}
  ------------------
 1190|  2.71k|		switch (flag) {
 1191|      6|		case LSR_EVT_abort:
  ------------------
  |  Branch (1191:3): [True: 6, False: 2.70k]
  ------------------
 1192|      6|			evtType->type = GF_EVENT_ABORT;
 1193|      6|			break;
 1194|     21|		case LSR_EVT_accessKey:
  ------------------
  |  Branch (1194:3): [True: 21, False: 2.69k]
  ------------------
 1195|     21|			evtType->type = GF_EVENT_KEYDOWN;
 1196|     21|			break;
 1197|      1|		case LSR_EVT_activate:
  ------------------
  |  Branch (1197:3): [True: 1, False: 2.71k]
  ------------------
 1198|      1|			evtType->type = GF_EVENT_ACTIVATE;
 1199|      1|			break;
 1200|     52|		case LSR_EVT_activatedEvent:
  ------------------
  |  Branch (1200:3): [True: 52, False: 2.66k]
  ------------------
 1201|     52|			evtType->type = GF_EVENT_ACTIVATED;
 1202|     52|			break;
 1203|    113|		case LSR_EVT_beginEvent:
  ------------------
  |  Branch (1203:3): [True: 113, False: 2.60k]
  ------------------
 1204|    113|			evtType->type = GF_EVENT_BEGIN_EVENT;
 1205|    113|			break;
 1206|     35|		case LSR_EVT_click:
  ------------------
  |  Branch (1206:3): [True: 35, False: 2.68k]
  ------------------
 1207|     35|			evtType->type = GF_EVENT_CLICK;
 1208|     35|			break;
 1209|     12|		case LSR_EVT_deactivatedEvent:
  ------------------
  |  Branch (1209:3): [True: 12, False: 2.70k]
  ------------------
 1210|     12|			evtType->type = GF_EVENT_DEACTIVATED;
 1211|     12|			break;
 1212|     18|		case LSR_EVT_endEvent:
  ------------------
  |  Branch (1212:3): [True: 18, False: 2.69k]
  ------------------
 1213|     18|			evtType->type = GF_EVENT_END_EVENT;
 1214|     18|			break;
 1215|     31|		case LSR_EVT_error:
  ------------------
  |  Branch (1215:3): [True: 31, False: 2.68k]
  ------------------
 1216|     31|			evtType->type = GF_EVENT_ERROR;
 1217|     31|			break;
 1218|      2|		case LSR_EVT_executionTime:
  ------------------
  |  Branch (1218:3): [True: 2, False: 2.71k]
  ------------------
 1219|      2|			evtType->type = GF_EVENT_EXECUTION_TIME;
 1220|      2|			break;
 1221|      0|		case LSR_EVT_focusin:
  ------------------
  |  Branch (1221:3): [True: 0, False: 2.71k]
  ------------------
 1222|      0|			evtType->type = GF_EVENT_FOCUSIN;
 1223|      0|			break;
 1224|     15|		case LSR_EVT_focusout:
  ------------------
  |  Branch (1224:3): [True: 15, False: 2.70k]
  ------------------
 1225|     15|			evtType->type = GF_EVENT_FOCUSOUT;
 1226|     15|			break;
 1227|     44|		case LSR_EVT_keydown:
  ------------------
  |  Branch (1227:3): [True: 44, False: 2.67k]
  ------------------
 1228|     44|			evtType->type = GF_EVENT_KEYDOWN;
 1229|     44|			break;
 1230|     90|		case LSR_EVT_keyup:
  ------------------
  |  Branch (1230:3): [True: 90, False: 2.62k]
  ------------------
 1231|     90|			evtType->type = GF_EVENT_KEYUP;
 1232|     90|			break;
 1233|     24|		case LSR_EVT_load:
  ------------------
  |  Branch (1233:3): [True: 24, False: 2.69k]
  ------------------
 1234|     24|			evtType->type = GF_EVENT_LOAD;
 1235|     24|			break;
 1236|     13|		case LSR_EVT_longAccessKey:
  ------------------
  |  Branch (1236:3): [True: 13, False: 2.70k]
  ------------------
 1237|     13|			evtType->type = GF_EVENT_LONGKEYPRESS;
 1238|     13|			break;
 1239|     12|		case LSR_EVT_mousedown:
  ------------------
  |  Branch (1239:3): [True: 12, False: 2.70k]
  ------------------
 1240|     12|			evtType->type = GF_EVENT_MOUSEDOWN;
 1241|     12|			break;
 1242|     18|		case LSR_EVT_mousemove:
  ------------------
  |  Branch (1242:3): [True: 18, False: 2.69k]
  ------------------
 1243|     18|			evtType->type = GF_EVENT_MOUSEMOVE;
 1244|     18|			break;
 1245|      7|		case LSR_EVT_mouseout:
  ------------------
  |  Branch (1245:3): [True: 7, False: 2.70k]
  ------------------
 1246|      7|			evtType->type = GF_EVENT_MOUSEOUT;
 1247|      7|			break;
 1248|      3|		case LSR_EVT_mouseover:
  ------------------
  |  Branch (1248:3): [True: 3, False: 2.71k]
  ------------------
 1249|      3|			evtType->type = GF_EVENT_MOUSEOVER;
 1250|      3|			break;
 1251|     13|		case LSR_EVT_mouseup:
  ------------------
  |  Branch (1251:3): [True: 13, False: 2.70k]
  ------------------
 1252|     13|			evtType->type = GF_EVENT_MOUSEUP;
 1253|     13|			break;
 1254|     34|		case LSR_EVT_pause:
  ------------------
  |  Branch (1254:3): [True: 34, False: 2.68k]
  ------------------
 1255|     34|			evtType->type = GF_EVENT_PAUSE;
 1256|     34|			break;
 1257|      8|		case LSR_EVT_pausedEvent:
  ------------------
  |  Branch (1257:3): [True: 8, False: 2.70k]
  ------------------
 1258|      8|			evtType->type = GF_EVENT_PAUSED_EVENT;
 1259|      8|			break;
 1260|      3|		case LSR_EVT_play:
  ------------------
  |  Branch (1260:3): [True: 3, False: 2.71k]
  ------------------
 1261|      3|			evtType->type = GF_EVENT_PLAY;
 1262|      3|			break;
 1263|     32|		case LSR_EVT_repeatEvent:
  ------------------
  |  Branch (1263:3): [True: 32, False: 2.68k]
  ------------------
 1264|     32|			evtType->type = GF_EVENT_REPEAT_EVENT;
 1265|     32|			break;
 1266|     23|		case LSR_EVT_repeatKey:
  ------------------
  |  Branch (1266:3): [True: 23, False: 2.69k]
  ------------------
 1267|     23|			evtType->type = GF_EVENT_REPEAT_KEY;
 1268|     23|			break;
 1269|      1|		case LSR_EVT_resize:
  ------------------
  |  Branch (1269:3): [True: 1, False: 2.71k]
  ------------------
 1270|      1|			evtType->type = GF_EVENT_RESIZE;
 1271|      1|			break;
 1272|     17|		case LSR_EVT_resumedEvent:
  ------------------
  |  Branch (1272:3): [True: 17, False: 2.69k]
  ------------------
 1273|     17|			evtType->type = GF_EVENT_RESUME_EVENT;
 1274|     17|			break;
 1275|      6|		case LSR_EVT_scroll:
  ------------------
  |  Branch (1275:3): [True: 6, False: 2.70k]
  ------------------
 1276|      6|			evtType->type = GF_EVENT_SCROLL;
 1277|      6|			break;
 1278|     21|		case LSR_EVT_shortAccessKey:
  ------------------
  |  Branch (1278:3): [True: 21, False: 2.69k]
  ------------------
 1279|     21|			evtType->type = GF_EVENT_SHORT_ACCESSKEY;
 1280|     21|			break;
 1281|     20|		case LSR_EVT_textinput:
  ------------------
  |  Branch (1281:3): [True: 20, False: 2.69k]
  ------------------
 1282|     20|			evtType->type = GF_EVENT_TEXTINPUT;
 1283|     20|			break;
 1284|     11|		case LSR_EVT_unload:
  ------------------
  |  Branch (1284:3): [True: 11, False: 2.70k]
  ------------------
 1285|     11|			evtType->type = GF_EVENT_UNLOAD;
 1286|     11|			break;
 1287|      0|		case LSR_EVT_zoom:
  ------------------
  |  Branch (1287:3): [True: 0, False: 2.71k]
  ------------------
 1288|      0|			evtType->type = GF_EVENT_ZOOM;
 1289|      0|			break;
 1290|  2.00k|		default:
  ------------------
  |  Branch (1290:3): [True: 2.00k, False: 706]
  ------------------
 1291|  2.00k|			GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[LASeR] Undefined LASeR event %d\n", flag));
  ------------------
  |  | 1086|  2.00k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 2.00k]
  |  |  ------------------
  ------------------
 1292|  2.00k|			break;
 1293|  2.71k|		}
 1294|  2.71k|		switch (flag) {
  ------------------
  |  Branch (1294:11): [True: 78, False: 2.63k]
  ------------------
 1295|     21|		case LSR_EVT_accessKey:
  ------------------
  |  Branch (1295:3): [True: 21, False: 2.69k]
  ------------------
 1296|     34|		case LSR_EVT_longAccessKey:
  ------------------
  |  Branch (1296:3): [True: 13, False: 2.70k]
  ------------------
 1297|     57|		case LSR_EVT_repeatKey:
  ------------------
  |  Branch (1297:3): [True: 23, False: 2.69k]
  ------------------
 1298|     78|		case LSR_EVT_shortAccessKey:
  ------------------
  |  Branch (1298:3): [True: 21, False: 2.69k]
  ------------------
 1299|     78|			evtType->parameter = lsr_read_vluimsbf5(lsr, "keyCode");
 1300|     78|			evtType->parameter  = lsr_to_dom_key(evtType->parameter);
 1301|     78|			break;
 1302|  2.71k|		}
 1303|  2.71k|	}
 1304|  4.87k|}
lsr_dec.c:lsr_to_dom_key:
 1107|     78|{
 1108|     78|	switch (lsr_k) {
 1109|      4|	case 0:
  ------------------
  |  Branch (1109:2): [True: 4, False: 74]
  ------------------
 1110|      4|		return GF_KEY_STAR;
 1111|     14|	case 1:
  ------------------
  |  Branch (1111:2): [True: 14, False: 64]
  ------------------
 1112|     14|		return GF_KEY_0;
 1113|      0|	case 2:
  ------------------
  |  Branch (1113:2): [True: 0, False: 78]
  ------------------
 1114|      0|		return GF_KEY_1;
 1115|      0|	case 3:
  ------------------
  |  Branch (1115:2): [True: 0, False: 78]
  ------------------
 1116|      0|		return GF_KEY_2;
 1117|      2|	case 4:
  ------------------
  |  Branch (1117:2): [True: 2, False: 76]
  ------------------
 1118|      2|		return GF_KEY_3;
 1119|      0|	case 5:
  ------------------
  |  Branch (1119:2): [True: 0, False: 78]
  ------------------
 1120|      0|		return GF_KEY_4;
 1121|      2|	case 6:
  ------------------
  |  Branch (1121:2): [True: 2, False: 76]
  ------------------
 1122|      2|		return GF_KEY_5;
 1123|      0|	case 7:
  ------------------
  |  Branch (1123:2): [True: 0, False: 78]
  ------------------
 1124|      0|		return GF_KEY_6;
 1125|      3|	case 8:
  ------------------
  |  Branch (1125:2): [True: 3, False: 75]
  ------------------
 1126|      3|		return GF_KEY_7;
 1127|      3|	case 9:
  ------------------
  |  Branch (1127:2): [True: 3, False: 75]
  ------------------
 1128|      3|		return GF_KEY_8;
 1129|      0|	case 10:
  ------------------
  |  Branch (1129:2): [True: 0, False: 78]
  ------------------
 1130|      0|		return GF_KEY_9;
 1131|      9|	case 12:
  ------------------
  |  Branch (1131:2): [True: 9, False: 69]
  ------------------
 1132|      9|		return GF_KEY_DOWN;
 1133|      0|	case 14:
  ------------------
  |  Branch (1133:2): [True: 0, False: 78]
  ------------------
 1134|      0|		return GF_KEY_LEFT;
 1135|      0|	case 16:
  ------------------
  |  Branch (1135:2): [True: 0, False: 78]
  ------------------
 1136|      0|		return GF_KEY_RIGHT;
 1137|      0|	case 20:
  ------------------
  |  Branch (1137:2): [True: 0, False: 78]
  ------------------
 1138|      0|		return GF_KEY_UP;
 1139|       |	/*WHAT IS ANY_KEY (11) ??*/
 1140|      0|	case 13:
  ------------------
  |  Branch (1140:2): [True: 0, False: 78]
  ------------------
 1141|      0|		return GF_KEY_ENTER;
 1142|      0|	case 15:
  ------------------
  |  Branch (1142:2): [True: 0, False: 78]
  ------------------
 1143|      0|		return GF_KEY_ESCAPE;
 1144|      0|	case 17:
  ------------------
  |  Branch (1144:2): [True: 0, False: 78]
  ------------------
 1145|      0|		return GF_KEY_NUMBER;
 1146|      0|	case 18:
  ------------------
  |  Branch (1146:2): [True: 0, False: 78]
  ------------------
 1147|      0|		return GF_KEY_CELL_SOFT1;
 1148|      0|	case 19:
  ------------------
  |  Branch (1148:2): [True: 0, False: 78]
  ------------------
 1149|      0|		return GF_KEY_CELL_SOFT2;
 1150|     41|	default:
  ------------------
  |  Branch (1150:2): [True: 41, False: 37]
  ------------------
 1151|       |		/*use '*' by default ... */
 1152|     41|		return 0;
 1153|     78|	}
 1154|     78|}
lsr_dec.c:lsr_read_eRR:
 3510|     43|{
 3511|     43|	u32 err;
 3512|     43|	GF_LSR_READ_INT(lsr, err, 1, "externalResourcesRequired");
  ------------------
  |  |   34|     43|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     43|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 43]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     43|	} else {\
  |  |   39|     43|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     43|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     43|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 43]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     43|	}\
  |  |   42|     43|}
  ------------------
 3513|     43|	if (err) {
  ------------------
  |  Branch (3513:6): [True: 12, False: 31]
  ------------------
 3514|     12|		GF_FieldInfo info;
 3515|     12|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_externalResourcesRequired, 1, 0, &info);
 3516|     12|		*(SVG_Boolean*)info.far_ptr = 1;
 3517|     12|	}
 3518|     43|}
lsr_dec.c:lsr_read_lsr_enabled:
 3521|     13|{
 3522|     13|	u32 err;
 3523|     13|	GF_LSR_READ_INT(lsr, err, 1, "enabled");
  ------------------
  |  |   34|     13|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     13|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 13]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     13|	} else {\
  |  |   39|     13|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     13|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     13|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 13]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     13|	}\
  |  |   42|     13|}
  ------------------
 3524|     13|	if (err) {
  ------------------
  |  Branch (3524:6): [True: 4, False: 9]
  ------------------
 3525|      4|		GF_FieldInfo info;
 3526|      4|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_LSR_ATT_enabled, 1, 0, &info);
 3527|      4|		*(SVG_Boolean*)info.far_ptr = 1;
 3528|      4|	}
 3529|     13|}
lsr_dec.c:lsr_read_cursorManager:
 3752|      5|{
 3753|      5|	GF_Node *elt = gf_node_new(lsr->sg, TAG_LSR_cursorManager);
 3754|      5|	lsr_read_id(lsr, elt);
 3755|      5|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      5|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3756|      5|	lsr_read_coordinate_ptr(lsr, elt,TAG_SVG_ATT_x, 1, "x");
 3757|      5|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 3758|      5|	lsr_read_href(lsr, elt);
 3759|      5|	lsr_read_any_attribute(lsr, elt, 1);
 3760|      5|	lsr_read_group_content(lsr, elt, 0);
 3761|      5|	return elt;
 3762|      5|}
lsr_dec.c:lsr_read_coordinate_ptr:
 3311|    140|{
 3312|    140|	u32 flag;
 3313|    140|	GF_FieldInfo info;
 3314|    140|	if (skipable) {
  ------------------
  |  Branch (3314:6): [True: 98, False: 42]
  ------------------
 3315|     98|		GF_LSR_READ_INT(lsr, flag, 1, name);
  ------------------
  |  |   34|     98|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     98|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 98]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     98|	} else {\
  |  |   39|     98|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     98|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     98|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 98]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     98|	}\
  |  |   42|     98|}
  ------------------
 3316|     98|		if (!flag) return;
  ------------------
  |  Branch (3316:7): [True: 47, False: 51]
  ------------------
 3317|     98|	}
 3318|     93|	lsr->last_error = gf_node_get_attribute_by_tag(n, tag, GF_TRUE, 0, &info);
 3319|       |
 3320|     93|	((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 3321|     93|	GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, name);
  ------------------
  |  |   34|     93|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     93|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 93]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     93|	} else {\
  |  |   39|     93|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     93|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     93|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 93]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     93|	}\
  |  |   42|     93|}
  ------------------
 3322|     93|	((SVG_Number*)info.far_ptr)->value = lsr_translate_coords(lsr, flag, lsr->coord_bits);
 3323|     93|}
lsr_dec.c:lsr_read_href:
 1768|     35|{
 1769|     35|	Bool has_href;
 1770|     35|	GF_LSR_READ_INT(lsr, has_href, 1, "has_href");
  ------------------
  |  |   34|     35|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     35|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 35]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     35|	} else {\
  |  |   39|     35|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     35|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     35|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 35]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     35|	}\
  |  |   42|     35|}
  ------------------
 1771|     35|	if (has_href) {
  ------------------
  |  Branch (1771:6): [True: 13, False: 22]
  ------------------
 1772|     13|		GF_FieldInfo info;
 1773|     13|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_XLINK_ATT_href, GF_TRUE, GF_FALSE, &info);
 1774|     13|		lsr_read_any_uri(lsr, info.far_ptr, "href");
 1775|     13|	}
 1776|     35|}
lsr_dec.c:lsr_read_group_content:
 4862|    154|{
 4863|    154|	u32 i, count;
 4864|    154|	if (lsr->last_error) return;
  ------------------
  |  Branch (4864:6): [True: 4, False: 150]
  ------------------
 4865|       |
 4866|    150|	if (!skip_object_content) lsr_read_object_content(lsr, (SVG_Element*)elt);
  ------------------
  |  Branch (4866:6): [True: 119, False: 31]
  ------------------
 4867|       |
 4868|       |
 4869|       |	/*node attributes are all parsed*/
 4870|    150|	if (elt->sgprivate->tag!=TAG_SVG_script)
  ------------------
  |  Branch (4870:6): [True: 150, False: 0]
  ------------------
 4871|    150|		gf_node_init(elt);
 4872|       |
 4873|    150|	GF_LSR_READ_INT(lsr, count, 1, "opt_group");
  ------------------
  |  |   34|    150|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    150|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 150]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    150|	} else {\
  |  |   39|    150|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    150|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    150|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 150]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    150|	}\
  |  |   42|    150|}
  ------------------
 4874|    150|	if (count) {
  ------------------
  |  Branch (4874:6): [True: 86, False: 64]
  ------------------
 4875|     86|		GF_ChildNodeItem *last = NULL;
 4876|     86|		count = lsr_read_vluimsbf5(lsr, "occ0");
 4877|    255|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (4877:13): [True: 220, False: 35]
  ------------------
 4878|    220|			GF_Node *n;
 4879|    220|			if (lsr->last_error) return;
  ------------------
  |  Branch (4879:8): [True: 51, False: 169]
  ------------------
 4880|    169|			n = lsr_read_scene_content_model(lsr, (SVG_Element*)elt);
 4881|    169|			if (n) {
  ------------------
  |  Branch (4881:8): [True: 144, False: 25]
  ------------------
 4882|    144|				gf_node_register(n, elt);
 4883|    144|				gf_node_list_add_child_last(& ((SVG_Element*)elt)->children, n, &last);
 4884|    144|				GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] ############## end %s ###########\n", gf_node_get_class_name(n)));
  ------------------
  |  | 1086|    144|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 144]
  |  |  ------------------
  ------------------
 4885|    144|			} else {
 4886|       |				/*either error or text content*/
 4887|     25|			}
 4888|    169|		}
 4889|     86|	}
 4890|       |
 4891|     99|	if (elt->sgprivate->tag==TAG_SVG_script)
  ------------------
  |  Branch (4891:6): [True: 0, False: 99]
  ------------------
 4892|      0|		gf_node_init(elt);
 4893|     99|}
lsr_dec.c:lsr_read_scene_content_model:
 4535|    179|{
 4536|    179|	GF_Node *n;
 4537|    179|	u32 ntype;
 4538|    179|	GF_LSR_READ_INT(lsr, ntype, 6, "ch4");
  ------------------
  |  |   34|    179|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    179|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 179]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    179|	} else {\
  |  |   39|    179|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    179|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    179|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 179]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    179|	}\
  |  |   42|    179|}
  ------------------
 4539|    179|	n = NULL;
 4540|    179|	switch (ntype) {
 4541|      3|	case LSR_SCENE_CONTENT_MODEL_a:
  ------------------
  |  Branch (4541:2): [True: 3, False: 176]
  ------------------
 4542|      3|		n = lsr_read_a(lsr);
 4543|      3|		break;
 4544|      5|	case LSR_SCENE_CONTENT_MODEL_animate:
  ------------------
  |  Branch (4544:2): [True: 5, False: 174]
  ------------------
 4545|      5|		n = lsr_read_animate(lsr, parent, 0);
 4546|      5|		break;
 4547|      2|	case LSR_SCENE_CONTENT_MODEL_animateColor:
  ------------------
  |  Branch (4547:2): [True: 2, False: 177]
  ------------------
 4548|      2|		n = lsr_read_animate(lsr, parent, 1);
 4549|      2|		break;
 4550|      2|	case LSR_SCENE_CONTENT_MODEL_animateMotion:
  ------------------
  |  Branch (4550:2): [True: 2, False: 177]
  ------------------
 4551|      2|		n = lsr_read_animateMotion(lsr, parent);
 4552|      2|		break;
 4553|      2|	case LSR_SCENE_CONTENT_MODEL_animateTransform:
  ------------------
  |  Branch (4553:2): [True: 2, False: 177]
  ------------------
 4554|      2|		n = lsr_read_animateTransform(lsr, parent);
 4555|      2|		break;
 4556|      5|	case LSR_SCENE_CONTENT_MODEL_audio:
  ------------------
  |  Branch (4556:2): [True: 5, False: 174]
  ------------------
 4557|      5|		n = lsr_read_audio(lsr, parent);
 4558|      5|		break;
 4559|      2|	case LSR_SCENE_CONTENT_MODEL_circle:
  ------------------
  |  Branch (4559:2): [True: 2, False: 177]
  ------------------
 4560|      2|		n = lsr_read_circle(lsr);
 4561|      2|		break;
 4562|      0|	case LSR_SCENE_CONTENT_MODEL_conditional:
  ------------------
  |  Branch (4562:2): [True: 0, False: 179]
  ------------------
 4563|      0|		n = lsr_read_conditional(lsr);
 4564|      0|		break;
 4565|      5|	case LSR_SCENE_CONTENT_MODEL_cursorManager:
  ------------------
  |  Branch (4565:2): [True: 5, False: 174]
  ------------------
 4566|      5|		n = lsr_read_cursorManager(lsr);
 4567|      5|		break;
 4568|      2|	case LSR_SCENE_CONTENT_MODEL_defs:
  ------------------
  |  Branch (4568:2): [True: 2, False: 177]
  ------------------
 4569|      2|		n = lsr_read_defs(lsr);
 4570|      2|		break;
 4571|     42|	case LSR_SCENE_CONTENT_MODEL_desc:
  ------------------
  |  Branch (4571:2): [True: 42, False: 137]
  ------------------
 4572|     42|		n = lsr_read_data(lsr, TAG_SVG_desc);
 4573|     42|		break;
 4574|      1|	case LSR_SCENE_CONTENT_MODEL_ellipse:
  ------------------
  |  Branch (4574:2): [True: 1, False: 178]
  ------------------
 4575|      1|		n = lsr_read_ellipse(lsr);
 4576|      1|		break;
 4577|      2|	case LSR_SCENE_CONTENT_MODEL_foreignObject:
  ------------------
  |  Branch (4577:2): [True: 2, False: 177]
  ------------------
 4578|      2|		n = lsr_read_foreignObject(lsr);
 4579|      2|		break;
 4580|      3|	case LSR_SCENE_CONTENT_MODEL_g:
  ------------------
  |  Branch (4580:2): [True: 3, False: 176]
  ------------------
 4581|      3|		n = lsr_read_g(lsr, 0);
 4582|      3|		break;
 4583|      2|	case LSR_SCENE_CONTENT_MODEL_image:
  ------------------
  |  Branch (4583:2): [True: 2, False: 177]
  ------------------
 4584|      2|		n = lsr_read_image(lsr);
 4585|      2|		break;
 4586|      0|	case LSR_SCENE_CONTENT_MODEL_line:
  ------------------
  |  Branch (4586:2): [True: 0, False: 179]
  ------------------
 4587|      0|		n = lsr_read_line(lsr, 0);
 4588|      0|		break;
 4589|      2|	case LSR_SCENE_CONTENT_MODEL_linearGradient:
  ------------------
  |  Branch (4589:2): [True: 2, False: 177]
  ------------------
 4590|      2|		n = lsr_read_linearGradient(lsr);
 4591|      2|		break;
 4592|      2|	case LSR_SCENE_CONTENT_MODEL_metadata:
  ------------------
  |  Branch (4592:2): [True: 2, False: 177]
  ------------------
 4593|      2|		n = lsr_read_data(lsr, TAG_SVG_metadata);
 4594|      2|		break;
 4595|      1|	case LSR_SCENE_CONTENT_MODEL_mpath:
  ------------------
  |  Branch (4595:2): [True: 1, False: 178]
  ------------------
 4596|      1|		n = lsr_read_mpath(lsr);
 4597|      1|		break;
 4598|      3|	case LSR_SCENE_CONTENT_MODEL_path:
  ------------------
  |  Branch (4598:2): [True: 3, False: 176]
  ------------------
 4599|      3|		n = lsr_read_path(lsr, 0);
 4600|      3|		break;
 4601|      1|	case LSR_SCENE_CONTENT_MODEL_polygon:
  ------------------
  |  Branch (4601:2): [True: 1, False: 178]
  ------------------
 4602|      1|		n = lsr_read_polygon(lsr, 0, 0);
 4603|      1|		break;
 4604|      2|	case LSR_SCENE_CONTENT_MODEL_polyline:
  ------------------
  |  Branch (4604:2): [True: 2, False: 177]
  ------------------
 4605|      2|		n = lsr_read_polygon(lsr, 1, 0);
 4606|      2|		break;
 4607|      2|	case LSR_SCENE_CONTENT_MODEL_radialGradient:
  ------------------
  |  Branch (4607:2): [True: 2, False: 177]
  ------------------
 4608|      2|		n = lsr_read_radialGradient(lsr);
 4609|      2|		break;
 4610|      5|	case LSR_SCENE_CONTENT_MODEL_rect:
  ------------------
  |  Branch (4610:2): [True: 5, False: 174]
  ------------------
 4611|      5|		n = lsr_read_rect(lsr, 0);
 4612|      5|		break;
 4613|      2|	case LSR_SCENE_CONTENT_MODEL_rectClip:
  ------------------
  |  Branch (4613:2): [True: 2, False: 177]
  ------------------
 4614|      2|		n = lsr_read_rectClip(lsr);
 4615|      2|		break;
 4616|      2|	case LSR_SCENE_CONTENT_MODEL_sameg:
  ------------------
  |  Branch (4616:2): [True: 2, False: 177]
  ------------------
 4617|      2|		n = lsr_read_g(lsr, 1);
 4618|      2|		break;
 4619|      2|	case LSR_SCENE_CONTENT_MODEL_sameline:
  ------------------
  |  Branch (4619:2): [True: 2, False: 177]
  ------------------
 4620|      2|		n = lsr_read_line(lsr, 1);
 4621|      2|		break;
 4622|      1|	case LSR_SCENE_CONTENT_MODEL_samepath:
  ------------------
  |  Branch (4622:2): [True: 1, False: 178]
  ------------------
 4623|      1|		n = lsr_read_path(lsr, 1);
 4624|      1|		break;
 4625|      3|	case LSR_SCENE_CONTENT_MODEL_samepathfill:
  ------------------
  |  Branch (4625:2): [True: 3, False: 176]
  ------------------
 4626|      3|		n = lsr_read_path(lsr, 2);
 4627|      3|		break;
 4628|      2|	case LSR_SCENE_CONTENT_MODEL_samepolygon:
  ------------------
  |  Branch (4628:2): [True: 2, False: 177]
  ------------------
 4629|      2|		n = lsr_read_polygon(lsr, 0, 1);
 4630|      2|		break;
 4631|      0|	case LSR_SCENE_CONTENT_MODEL_samepolygonfill:
  ------------------
  |  Branch (4631:2): [True: 0, False: 179]
  ------------------
 4632|      0|		n = lsr_read_polygon(lsr, 0, 2);
 4633|      0|		break;
 4634|      2|	case LSR_SCENE_CONTENT_MODEL_samepolygonstroke:
  ------------------
  |  Branch (4634:2): [True: 2, False: 177]
  ------------------
 4635|      2|		n = lsr_read_polygon(lsr, 0, 3);
 4636|      2|		break;
 4637|      2|	case LSR_SCENE_CONTENT_MODEL_samepolyline:
  ------------------
  |  Branch (4637:2): [True: 2, False: 177]
  ------------------
 4638|      2|		n = lsr_read_polygon(lsr, 1, 1);
 4639|      2|		break;
 4640|      2|	case LSR_SCENE_CONTENT_MODEL_samepolylinefill:
  ------------------
  |  Branch (4640:2): [True: 2, False: 177]
  ------------------
 4641|      2|		n = lsr_read_polygon(lsr, 1, 2);
 4642|      2|		break;
 4643|      0|	case LSR_SCENE_CONTENT_MODEL_samepolylinestroke:
  ------------------
  |  Branch (4643:2): [True: 0, False: 179]
  ------------------
 4644|      0|		n = lsr_read_polygon(lsr, 1, 3);
 4645|      0|		break;
 4646|      9|	case LSR_SCENE_CONTENT_MODEL_samerect:
  ------------------
  |  Branch (4646:2): [True: 9, False: 170]
  ------------------
 4647|      9|		n = lsr_read_rect(lsr, 1);
 4648|      9|		break;
 4649|      1|	case LSR_SCENE_CONTENT_MODEL_samerectfill:
  ------------------
  |  Branch (4649:2): [True: 1, False: 178]
  ------------------
 4650|      1|		n = lsr_read_rect(lsr, 2);
 4651|      1|		break;
 4652|      4|	case LSR_SCENE_CONTENT_MODEL_sametext:
  ------------------
  |  Branch (4652:2): [True: 4, False: 175]
  ------------------
 4653|      4|		n = lsr_read_text(lsr, 1);
 4654|      4|		break;
 4655|      1|	case LSR_SCENE_CONTENT_MODEL_sametextfill:
  ------------------
  |  Branch (4655:2): [True: 1, False: 178]
  ------------------
 4656|      1|		n = lsr_read_text(lsr, 2);
 4657|      1|		break;
 4658|      3|	case LSR_SCENE_CONTENT_MODEL_sameuse:
  ------------------
  |  Branch (4658:2): [True: 3, False: 176]
  ------------------
 4659|      3|		n = lsr_read_use(lsr, 1);
 4660|      3|		break;
 4661|      0|	case LSR_SCENE_CONTENT_MODEL_script:
  ------------------
  |  Branch (4661:2): [True: 0, False: 179]
  ------------------
 4662|      0|		n = lsr_read_script(lsr);
 4663|      0|		break;
 4664|      4|	case LSR_SCENE_CONTENT_MODEL_selector:
  ------------------
  |  Branch (4664:2): [True: 4, False: 175]
  ------------------
 4665|      4|		n = lsr_read_selector(lsr);
 4666|      4|		break;
 4667|      1|	case LSR_SCENE_CONTENT_MODEL_set:
  ------------------
  |  Branch (4667:2): [True: 1, False: 178]
  ------------------
 4668|      1|		n = lsr_read_set(lsr, parent);
 4669|      1|		break;
 4670|      1|	case LSR_SCENE_CONTENT_MODEL_simpleLayout:
  ------------------
  |  Branch (4670:2): [True: 1, False: 178]
  ------------------
 4671|      1|		n = lsr_read_simpleLayout(lsr);
 4672|      1|		break;
 4673|      0|	case LSR_SCENE_CONTENT_MODEL_stop:
  ------------------
  |  Branch (4673:2): [True: 0, False: 179]
  ------------------
 4674|      0|		n = lsr_read_stop(lsr);
 4675|      0|		break;
 4676|      3|	case LSR_SCENE_CONTENT_MODEL_switch:
  ------------------
  |  Branch (4676:2): [True: 3, False: 176]
  ------------------
 4677|      3|		n = lsr_read_switch(lsr);
 4678|      3|		break;
 4679|      5|	case LSR_SCENE_CONTENT_MODEL_text:
  ------------------
  |  Branch (4679:2): [True: 5, False: 174]
  ------------------
 4680|      5|		n = lsr_read_text(lsr, 0);
 4681|      5|		break;
 4682|      1|	case LSR_SCENE_CONTENT_MODEL_title:
  ------------------
  |  Branch (4682:2): [True: 1, False: 178]
  ------------------
 4683|      1|		n = lsr_read_data(lsr, TAG_SVG_title);
 4684|      1|		break;
 4685|      0|	case LSR_SCENE_CONTENT_MODEL_tspan:
  ------------------
  |  Branch (4685:2): [True: 0, False: 179]
  ------------------
 4686|      0|		n = lsr_read_tspan(lsr);
 4687|      0|		break;
 4688|      2|	case LSR_SCENE_CONTENT_MODEL_use:
  ------------------
  |  Branch (4688:2): [True: 2, False: 177]
  ------------------
 4689|      2|		n = lsr_read_use(lsr, 0);
 4690|      2|		break;
 4691|      2|	case LSR_SCENE_CONTENT_MODEL_video:
  ------------------
  |  Branch (4691:2): [True: 2, False: 177]
  ------------------
 4692|      2|		n = lsr_read_video(lsr, parent);
 4693|      2|		break;
 4694|      1|	case LSR_SCENE_CONTENT_MODEL_listener:
  ------------------
  |  Branch (4694:2): [True: 1, False: 178]
  ------------------
 4695|      1|		n = lsr_read_listener(lsr, parent);
 4696|      1|		break;
 4697|      3|	case LSR_SCENE_CONTENT_MODEL_element_any:
  ------------------
  |  Branch (4697:2): [True: 3, False: 176]
  ------------------
 4698|      3|		lsr_read_extend_class(lsr, NULL, 0, "node");
 4699|      3|		break;
 4700|      6|	case LSR_SCENE_CONTENT_MODEL_privateContainer:
  ------------------
  |  Branch (4700:2): [True: 6, False: 173]
  ------------------
 4701|      6|		lsr_read_private_element_container(lsr);
 4702|      6|		break;
 4703|      3|	case LSR_SCENE_CONTENT_MODEL_textContent:
  ------------------
  |  Branch (4703:2): [True: 3, False: 176]
  ------------------
 4704|      3|		lsr_read_text_content(lsr, (GF_Node*)parent);
 4705|      3|		break;
 4706|     15|	default:
  ------------------
  |  Branch (4706:2): [True: 15, False: 164]
  ------------------
 4707|     15|		break;
 4708|    179|	}
 4709|    179|	if (n && n->sgprivate->interact && n->sgprivate->interact->dom_evt) {
  ------------------
  |  Branch (4709:6): [True: 152, False: 27]
  |  Branch (4709:11): [True: 0, False: 152]
  |  Branch (4709:37): [True: 0, False: 0]
  ------------------
 4710|      0|		GF_DOM_Event evt;
 4711|      0|		memset(&evt, 0, sizeof(GF_DOM_Event));
 4712|      0|		evt.type = GF_EVENT_LOAD;
 4713|      0|		gf_dom_event_fire(n, &evt);
 4714|      0|	}
 4715|    179|	return n;
 4716|    179|}
lsr_dec.c:lsr_read_text_content:
  542|      3|{
  543|      3|	char *str = NULL;
  544|      3|	lsr_read_byte_align_string(lsr, &str, "textContent");
  545|      3|	if (!str) return;
  ------------------
  |  Branch (545:6): [True: 0, False: 3]
  ------------------
  546|      3|	gf_dom_add_text_node(elt, str);
  547|      3|}
lsr_dec.c:lsr_read_extend_class:
  295|      3|{
  296|      3|	u32 len, blen;
  297|      3|	GF_LSR_READ_INT(lsr, len, lsr->info->cfg.extensionIDBits, "reserved");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
  298|      3|	len = lsr_read_vluimsbf5(lsr, "len");
  299|     10|	while (len && !gf_bs_is_align(lsr->bs)) {
  ------------------
  |  Branch (299:9): [True: 10, False: 0]
  |  Branch (299:16): [True: 7, False: 3]
  ------------------
  300|      7|		gf_bs_read_int(lsr->bs, len);
  301|      7|		len--;
  302|      7|	}
  303|      3|	blen = len / 8;
  304|      3|	gf_bs_skip_bytes(lsr->bs, blen);
  305|      3|	len -= blen*8;
  306|       |
  307|     11|	while (len) {
  ------------------
  |  Branch (307:9): [True: 8, False: 3]
  ------------------
  308|      8|		gf_bs_read_int(lsr->bs, 1);
  309|      8|		len--;
  310|      8|	}
  311|      3|	if (out_data) *out_data = NULL;
  ------------------
  |  Branch (311:6): [True: 0, False: 3]
  ------------------
  312|      3|	if (out_len) *out_len = 0;
  ------------------
  |  Branch (312:6): [True: 0, False: 3]
  ------------------
  313|      3|}
lsr_dec.c:lsr_read_rectClip:
 4060|      2|{
 4061|      2|	u32 flag;
 4062|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_LSR_rectClip);
 4063|      2|	lsr_read_id(lsr, elt);
 4064|      2|	lsr_read_rare_full(lsr, elt);
 4065|      2|	lsr_read_fill(lsr, elt);
 4066|      2|	lsr_read_stroke(lsr, elt);
 4067|      2|	lsr_read_eRR(lsr, elt);
 4068|      2|	GF_LSR_READ_INT(lsr, flag, 1, "has_size");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 4069|      2|	if (flag) {
  ------------------
  |  Branch (4069:6): [True: 1, False: 1]
  ------------------
 4070|      1|		SVG_Number num;
 4071|      1|		GF_FieldInfo info;
 4072|      1|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_size, 1, 0, &info);
 4073|      1|		lsr_read_coordinate(lsr, & num, 0, "width");
 4074|      1|		((LASeR_Size*)info.far_ptr)->width = num.value;
 4075|      1|		lsr_read_coordinate(lsr, & num, 0, "height");
 4076|      1|		((LASeR_Size*)info.far_ptr)->height = num.value;
 4077|      1|	}
 4078|      2|	lsr_read_any_attribute(lsr, elt, 1);
 4079|      2|	lsr_read_group_content(lsr, elt, 0);
 4080|      2|	return elt;
 4081|      2|}
lsr_dec.c:lsr_read_fill:
 1747|     66|{
 1748|     66|	Bool has_fill;
 1749|     66|	GF_LSR_READ_INT(lsr, has_fill, 1, "fill");
  ------------------
  |  |   34|     66|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     66|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 66]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     66|	} else {\
  |  |   39|     66|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     66|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     66|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 66]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     66|	}\
  |  |   42|     66|}
  ------------------
 1750|     66|	if (has_fill) {
  ------------------
  |  Branch (1750:6): [True: 30, False: 36]
  ------------------
 1751|     30|		GF_FieldInfo info;
 1752|     30|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_fill, GF_TRUE, GF_FALSE, &info);
 1753|     30|		lsr_read_paint(lsr, info.far_ptr, "fill");
 1754|     30|	}
 1755|     66|}
lsr_dec.c:lsr_read_stroke:
 1758|     61|{
 1759|     61|	Bool has_stroke;
 1760|     61|	GF_LSR_READ_INT(lsr, has_stroke, 1, "has_stroke");
  ------------------
  |  |   34|     61|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     61|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 61]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     61|	} else {\
  |  |   39|     61|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     61|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     61|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 61]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     61|	}\
  |  |   42|     61|}
  ------------------
 1761|     61|	if (has_stroke) {
  ------------------
  |  Branch (1761:6): [True: 25, False: 36]
  ------------------
 1762|     25|		GF_FieldInfo info;
 1763|     25|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_stroke, GF_TRUE, GF_FALSE, &info);
 1764|     25|		lsr_read_paint(lsr, info.far_ptr, "stroke");
 1765|     25|	}
 1766|     61|}
lsr_dec.c:lsr_read_coordinate:
 3296|      2|{
 3297|      2|	u32 flag;
 3298|      2|	if (skipable) {
  ------------------
  |  Branch (3298:6): [True: 0, False: 2]
  ------------------
 3299|      0|		GF_LSR_READ_INT(lsr, flag, 1, name);
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 3300|      0|		if (!flag) {
  ------------------
  |  Branch (3300:7): [True: 0, False: 0]
  ------------------
 3301|       |			//coord->type = SVG_NUMBER_UNKNOWN;
 3302|       |			//coord->value = 0;
 3303|      0|			return;
 3304|      0|		}
 3305|      0|	}
 3306|      2|	coord->type = SVG_NUMBER_VALUE;
 3307|      2|	GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, name);
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3308|      2|	coord->value = lsr_translate_coords(lsr, flag, lsr->coord_bits);
 3309|      2|}
lsr_dec.c:lsr_read_simpleLayout:
 4151|      1|{
 4152|      1|	u32 flag;
 4153|      1|	GF_Node *elt = gf_node_new(lsr->sg, TAG_LSR_simpleLayout);
 4154|      1|	lsr_read_id(lsr, elt);
 4155|      1|	lsr_read_rare_full(lsr, elt);
 4156|      1|	lsr_read_fill(lsr, elt);
 4157|      1|	lsr_read_stroke(lsr, elt);
 4158|      1|	GF_LSR_READ_INT(lsr, flag, 1, "has_delta");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4159|      1|	if (flag) {
  ------------------
  |  Branch (4159:6): [True: 0, False: 1]
  ------------------
 4160|      0|		SVG_Number num;
 4161|      0|		GF_FieldInfo info;
 4162|      0|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_delta, 1, 0, &info);
 4163|      0|		lsr_read_coordinate(lsr, & num, 0, "width");
 4164|      0|		((LASeR_Size*)info.far_ptr)->width = num.value;
 4165|      0|		lsr_read_coordinate(lsr, & num, 0, "height");
 4166|      0|		((LASeR_Size*)info.far_ptr)->height = num.value;
 4167|      0|	}
 4168|      1|	lsr_read_eRR(lsr, elt);
 4169|      1|	lsr_read_any_attribute(lsr, elt, 1);
 4170|      1|	lsr_read_group_content(lsr, elt, 0);
 4171|      1|	return elt;
 4172|      1|}
lsr_dec.c:lsr_read_selector:
 4097|      4|{
 4098|      4|	u32 flag;
 4099|      4|	GF_Node *elt = gf_node_new(lsr->sg, TAG_LSR_selector);
 4100|      4|	lsr_read_id(lsr, elt);
 4101|      4|	lsr_read_rare_full(lsr, elt);
 4102|      4|	lsr_read_fill(lsr, elt);
 4103|      4|	lsr_read_stroke(lsr, elt);
 4104|      4|	lsr_read_eRR(lsr, elt);
 4105|      4|	GF_LSR_READ_INT(lsr, flag, 1, "hasChoice");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 4106|      4|	if (flag) {
  ------------------
  |  Branch (4106:6): [True: 4, False: 0]
  ------------------
 4107|      4|		GF_FieldInfo info;
 4108|      4|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_choice, 1, 0, &info);
 4109|      4|		GF_LSR_READ_INT(lsr, flag, 1, "choice");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 4110|      4|		if (flag) {
  ------------------
  |  Branch (4110:7): [True: 1, False: 3]
  ------------------
 4111|      1|			GF_LSR_READ_INT(lsr, ((LASeR_Choice*)info.far_ptr)->type, 1, "type");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4112|      3|		} else {
 4113|      3|			GF_LSR_READ_INT(lsr, ((LASeR_Choice*)info.far_ptr)->choice_index, 8, "value");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 4114|      3|			((LASeR_Choice*)info.far_ptr)->type = LASeR_CHOICE_N;
 4115|      3|		}
 4116|      4|	}
 4117|      4|	lsr_read_any_attribute(lsr, elt, 1);
 4118|      4|	lsr_read_group_content(lsr, elt, 0);
 4119|      4|	return elt;
 4120|      4|}
lsr_dec.c:lsr_read_a:
 3532|      3|{
 3533|      3|	Bool flag;
 3534|      3|	GF_Node *elt = (GF_Node*) gf_node_new(lsr->sg, TAG_SVG_a);
 3535|      3|	lsr_read_id(lsr, elt);
 3536|      3|	lsr_read_rare_full(lsr, elt);
 3537|      3|	lsr_read_fill(lsr, elt);
 3538|      3|	lsr_read_stroke(lsr, elt);
 3539|      3|	lsr_read_eRR(lsr, elt);
 3540|      3|	GF_LSR_READ_INT(lsr, flag, 1, "hasTarget");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 3541|      3|	if (flag) {
  ------------------
  |  Branch (3541:6): [True: 2, False: 1]
  ------------------
 3542|      2|		GF_FieldInfo info;
 3543|      2|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_target, 1, 0, &info);
 3544|      2|		lsr_read_byte_align_string(lsr, info.far_ptr, "target");
 3545|      2|	}
 3546|      3|	lsr_read_href(lsr, elt);
 3547|      3|	lsr_read_any_attribute(lsr, elt, 1);
 3548|      3|	lsr_read_group_content(lsr, elt, 0);
 3549|      3|	return elt;
 3550|      3|}
lsr_dec.c:lsr_read_animate:
 3555|      7|{
 3556|      7|	GF_Node *elt = gf_node_new(lsr->sg, is_animateColor ? TAG_SVG_animateColor : TAG_SVG_animate);
  ------------------
  |  Branch (3556:38): [True: 2, False: 5]
  ------------------
 3557|      7|	lsr_read_id(lsr, elt);
 3558|      7|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      7|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3559|      7|	lsr_read_attribute_name(lsr, elt);
 3560|       |
 3561|      7|	lsr_read_accumulate(lsr, elt);
 3562|      7|	lsr_read_additive(lsr, elt);
 3563|      7|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_by, "by");
  ------------------
  |  | 2908|      7|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 3564|      7|	lsr_read_calc_mode(lsr, elt);
 3565|      7|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_from, "from");
  ------------------
  |  | 2908|      7|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 3566|      7|	lsr_read_fraction_12(lsr, elt, TAG_SVG_ATT_keySplines, "keySplines");
 3567|      7|	lsr_read_fraction_12(lsr, elt, TAG_SVG_ATT_keyTimes, "keyTimes");
 3568|      7|	lsr_read_anim_values(lsr, elt);
  ------------------
  |  | 2909|      7|#define lsr_read_anim_values(_a, _b) lsr_read_anim_values_ex(_a, _b, NULL)
  ------------------
 3569|      7|	lsr_read_attribute_type(lsr, elt);
 3570|      7|	lsr_read_smil_times(lsr, elt, TAG_SVG_ATT_begin, NULL, "begin", 1);
 3571|      7|	lsr_read_duration(lsr, elt);
 3572|      7|	lsr_read_anim_fill(lsr, elt);
 3573|      7|	lsr_read_anim_repeatCount(lsr, elt);
 3574|      7|	lsr_read_repeat_duration(lsr, elt);
 3575|      7|	lsr_read_anim_restart(lsr, elt);
 3576|      7|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_to, "to");
  ------------------
  |  | 2908|      7|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 3577|      7|	lsr_read_href(lsr, elt);
 3578|      7|	lsr_read_lsr_enabled(lsr, elt);
 3579|      7|	lsr_read_any_attribute(lsr, elt, 1);
 3580|       |
 3581|      7|	if (!lsr_setup_smil_anim(lsr, (SVG_Element*)elt, parent)) {
  ------------------
  |  Branch (3581:6): [True: 5, False: 2]
  ------------------
 3582|      5|		gf_list_add(lsr->deferred_anims, elt);
 3583|      5|		lsr_read_group_content_post_init(lsr, (SVG_Element*)elt, 1);
 3584|      5|	} else {
 3585|      2|		lsr_read_group_content(lsr, elt, 0);
 3586|      2|	}
 3587|      7|	return elt;
 3588|      7|}
lsr_dec.c:lsr_read_attribute_name:
 1833|     10|{
 1834|     10|	lsr_read_attribute_name_ex(lsr, n, GF_TRUE);
 1835|     10|}
lsr_dec.c:lsr_read_attribute_name_ex:
 1811|     10|{
 1812|     10|	u32 val = 1;
 1813|     10|	if (skippable) {
  ------------------
  |  Branch (1813:6): [True: 10, False: 0]
  ------------------
 1814|     10|		GF_LSR_READ_INT(lsr, val, 1, "hasAttributeName");
  ------------------
  |  |   34|     10|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     10|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 10]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     10|	} else {\
  |  |   39|     10|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     10|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     10|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     10|	}\
  |  |   42|     10|}
  ------------------
 1815|     10|		if (!val) return;
  ------------------
  |  Branch (1815:7): [True: 5, False: 5]
  ------------------
 1816|     10|	}
 1817|       |
 1818|      5|	GF_LSR_READ_INT(lsr, val, 1, "choice");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 1819|      5|	if (val) {
  ------------------
  |  Branch (1819:6): [True: 0, False: 5]
  ------------------
 1820|      0|		lsr_read_vluimsbf5(lsr, "item[i]");
 1821|      0|		lsr_read_vluimsbf5(lsr, "item[i]");
 1822|      0|		return;
 1823|      5|	} else {
 1824|      5|		GF_FieldInfo info;
 1825|      5|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_attributeName, GF_TRUE, GF_FALSE, &info);
 1826|      5|		GF_LSR_READ_INT(lsr, val, 8, "attributeType");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 1827|       |
 1828|       |		/*translate type to attribute tag*/
 1829|      5|		((SMIL_AttributeName*)info.far_ptr)->type = gf_lsr_anim_type_to_attribute(val);
 1830|      5|	}
 1831|      5|}
lsr_dec.c:lsr_read_accumulate:
 1779|     11|{
 1780|     11|	Bool v;
 1781|     11|	GF_LSR_READ_INT(lsr, v, 1, "has_accumulate");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 1782|     11|	if (v) {
  ------------------
  |  Branch (1782:6): [True: 6, False: 5]
  ------------------
 1783|      6|		GF_FieldInfo info;
 1784|      6|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_accumulate, GF_TRUE, GF_FALSE, &info);
 1785|      6|		GF_LSR_READ_INT(lsr, *(SMIL_Accumulate*)info.far_ptr, 1, "accumulate");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 1786|      6|	}
 1787|     11|}
lsr_dec.c:lsr_read_additive:
 1789|     11|{
 1790|     11|	Bool v;
 1791|     11|	GF_LSR_READ_INT(lsr, v, 1, "has_additive");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 1792|     11|	if (v) {
  ------------------
  |  Branch (1792:6): [True: 6, False: 5]
  ------------------
 1793|      6|		GF_FieldInfo info;
 1794|      6|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_additive, GF_TRUE, GF_FALSE, &info);
 1795|      6|		GF_LSR_READ_INT(lsr, *(SMIL_Additive*)info.far_ptr, 1, "additive");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 1796|      6|	}
 1797|     11|}
lsr_dec.c:lsr_read_anim_value_ex:
 2835|     34|{
 2836|     34|	u32 val, coded_type;
 2837|     34|	GF_LSR_READ_INT(lsr, val, 1, name);
  ------------------
  |  |   34|     34|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     34|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 34]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     34|	} else {\
  |  |   39|     34|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     34|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     34|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     34|	}\
  |  |   42|     34|}
  ------------------
 2838|     34|	if (val) {
  ------------------
  |  Branch (2838:6): [True: 18, False: 16]
  ------------------
 2839|     18|		GF_FieldInfo info;
 2840|     18|		lsr->last_error = gf_node_get_attribute_by_tag(n, tag, GF_TRUE, 0, &info);
 2841|       |
 2842|     18|		GF_LSR_READ_INT(lsr, coded_type, 4, "type");
  ------------------
  |  |   34|     18|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     18|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 18]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     18|	} else {\
  |  |   39|     18|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     18|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     18|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     18|	}\
  |  |   42|     18|}
  ------------------
 2843|     18|		((SMIL_AnimateValue*)info.far_ptr)->value = lsr_read_an_anim_value(lsr, coded_type, name);
 2844|     18|		((SMIL_AnimateValue*)info.far_ptr)->type = coded_type;
 2845|       |
 2846|     18|		if (tr_type) {
  ------------------
  |  Branch (2846:7): [True: 5, False: 13]
  ------------------
 2847|      5|			lsr_translate_anim_trans_value(lsr, info.far_ptr, *tr_type);
 2848|      5|		}
 2849|     13|		else {
 2850|     13|			lsr_delete_anim_value(lsr, info.far_ptr, coded_type);
 2851|     13|		}
 2852|     18|	}
 2853|     34|}
lsr_dec.c:lsr_read_an_anim_value:
 2397|     64|{
 2398|     64|	u32 flag;
 2399|     64|	u32 escapeFlag, escape_val = 0;
 2400|     64|	u8 *enum_val;
 2401|     64|	u32 *id_val;
 2402|     64|	char *string;
 2403|     64|	SVG_String *svg_string;
 2404|     64|	SVG_Number *num;
 2405|     64|	XMLRI *iri;
 2406|     64|	SVG_Point *pt;
 2407|     64|	SVG_Paint *paint;
 2408|       |
 2409|     64|	GF_LSR_READ_INT(lsr, escapeFlag, 1, "escapeFlag");
  ------------------
  |  |   34|     64|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     64|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 64]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     64|	} else {\
  |  |   39|     64|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     64|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     64|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 64]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     64|	}\
  |  |   42|     64|}
  ------------------
 2410|     64|	if (escapeFlag) GF_LSR_READ_INT(lsr, escape_val, 2, "escapeEnum");
  ------------------
  |  |   34|     25|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     25|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 25]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     25|	} else {\
  |  |   39|     25|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     25|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     25|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 25]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     25|	}\
  |  |   42|     25|}
  ------------------
  |  Branch (2410:6): [True: 25, False: 39]
  ------------------
 2411|       |
 2412|     64|	switch (coded_type) {
 2413|      1|	case 0:
  ------------------
  |  Branch (2413:2): [True: 1, False: 63]
  ------------------
 2414|      1|		string = NULL;
 2415|      1|		lsr_read_byte_align_string(lsr, &string, name);
 2416|      1|		GF_SAFEALLOC(svg_string, SVG_String);
  ------------------
  |  |  242|      1|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      1|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      1|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 1, False: 0]
  |  |  ------------------
  |  |  245|      1|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      1|		}\
  |  |  247|      1|	}
  ------------------
 2417|      1|		if (!svg_string) {
  ------------------
  |  Branch (2417:7): [True: 0, False: 1]
  ------------------
 2418|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2419|      0|			return NULL;
 2420|      0|		}
 2421|      1|		*svg_string = string;
 2422|      1|		return svg_string;
 2423|      0|	case 1:
  ------------------
  |  Branch (2423:2): [True: 0, False: 64]
  ------------------
 2424|      0|		num = (SVG_Number*)gf_malloc(sizeof(SVG_Number));
 2425|      0|		if (!num) {
  ------------------
  |  Branch (2425:7): [True: 0, False: 0]
  ------------------
 2426|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2427|      0|			return NULL;
 2428|      0|		}
 2429|      0|		if (escapeFlag) {
  ------------------
  |  Branch (2429:7): [True: 0, False: 0]
  ------------------
 2430|      0|			num->type = (escape_val==1) ? SVG_NUMBER_INHERIT : SVG_NUMBER_VALUE;
  ------------------
  |  Branch (2430:16): [True: 0, False: 0]
  ------------------
 2431|      0|		} else {
 2432|      0|			num->type = SVG_NUMBER_VALUE;
 2433|      0|			num->value = lsr_read_fixed_16_8(lsr, name);
 2434|      0|		}
 2435|      0|		return num;
 2436|      2|	case 2:
  ------------------
  |  Branch (2436:2): [True: 2, False: 62]
  ------------------
 2437|      2|	{
 2438|      2|		SVG_PathData *pd = (SVG_PathData *)gf_svg_create_attribute_value(SVG_PathData_datatype);
 2439|      2|		if (!pd) {
  ------------------
  |  Branch (2439:7): [True: 0, False: 2]
  ------------------
 2440|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2441|      2|		} else {
 2442|      2|			lsr_read_path_type(lsr, NULL, 0, pd, name);
 2443|      2|		}
 2444|      2|		return pd;
 2445|      0|	}
 2446|     31|	case 3:
  ------------------
  |  Branch (2446:2): [True: 31, False: 33]
  ------------------
 2447|     31|	{
 2448|     31|		SVG_Points *pts = (SVG_Points *)gf_svg_create_attribute_value(SVG_Points_datatype);
 2449|     31|		if (!pts) {
  ------------------
  |  Branch (2449:7): [True: 0, False: 31]
  ------------------
 2450|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2451|     31|		} else {
 2452|     31|			lsr_read_point_sequence(lsr, *pts, name);
 2453|     31|		}
 2454|     31|		return pts;
 2455|      0|	}
 2456|      1|	case 4:
  ------------------
  |  Branch (2456:2): [True: 1, False: 63]
  ------------------
 2457|      1|		num = (SVG_Number*)gf_malloc(sizeof(SVG_Number));
 2458|      1|		if (!num) {
  ------------------
  |  Branch (2458:7): [True: 0, False: 1]
  ------------------
 2459|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2460|      0|			return NULL;
 2461|      0|		}
 2462|      1|		if (escapeFlag) {
  ------------------
  |  Branch (2462:7): [True: 0, False: 1]
  ------------------
 2463|      0|			num->type = (escape_val==1) ? SVG_NUMBER_INHERIT : SVG_NUMBER_VALUE;
  ------------------
  |  Branch (2463:16): [True: 0, False: 0]
  ------------------
 2464|      1|		} else {
 2465|      1|			num->type = SVG_NUMBER_VALUE;
 2466|      1|			num->value = lsr_read_fixed_clamp(lsr, name);
 2467|      1|		}
 2468|      1|		return num;
 2469|      1|	case 5:
  ------------------
  |  Branch (2469:2): [True: 1, False: 63]
  ------------------
 2470|      1|		GF_SAFEALLOC(paint, SVG_Paint);
  ------------------
  |  |  242|      1|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      1|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      1|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 1, False: 0]
  |  |  ------------------
  |  |  245|      1|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      1|		}\
  |  |  247|      1|	}
  ------------------
 2471|      1|		if (!paint) {
  ------------------
  |  Branch (2471:7): [True: 0, False: 1]
  ------------------
 2472|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2473|      0|			return NULL;
 2474|      0|		}
 2475|      1|		if (escapeFlag) {
  ------------------
  |  Branch (2475:7): [True: 0, False: 1]
  ------------------
 2476|      0|			paint->type = SVG_PAINT_INHERIT;
 2477|      1|		} else {
 2478|      1|			lsr_read_paint(lsr, paint, name);
 2479|      1|		}
 2480|      1|		return paint;
 2481|      0|	case 6:
  ------------------
  |  Branch (2481:2): [True: 0, False: 64]
  ------------------
 2482|      0|		enum_val = (u8*)gf_malloc(sizeof(u8));
 2483|      0|		if (!enum_val) {
  ------------------
  |  Branch (2483:7): [True: 0, False: 0]
  ------------------
 2484|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2485|      0|		} else {
 2486|      0|			*enum_val = lsr_read_vluimsbf5(lsr, name);
 2487|      0|		}
 2488|      0|		return enum_val;
 2489|       |	/*TODO check this is correct*/
 2490|      0|	case 7:
  ------------------
  |  Branch (2490:2): [True: 0, False: 64]
  ------------------
 2491|      0|	{
 2492|      0|		GF_List *l = gf_list_new();
 2493|      0|		if (!l) {
  ------------------
  |  Branch (2493:7): [True: 0, False: 0]
  ------------------
 2494|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2495|      0|			return NULL;
 2496|      0|		}
 2497|      0|		u32 i, count;
 2498|      0|		count = lsr_read_vluimsbf5(lsr, "count");
 2499|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (2499:13): [True: 0, False: 0]
  ------------------
 2500|      0|			u8 *v = (u8 *)gf_malloc(sizeof(u8));
 2501|      0|			if (!v) {
  ------------------
  |  Branch (2501:8): [True: 0, False: 0]
  ------------------
 2502|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2503|      0|			} else {
 2504|      0|				*v = lsr_read_vluimsbf5(lsr, "val");
 2505|      0|				gf_list_add(l, v);
 2506|      0|			}
 2507|      0|			if (lsr->last_error) {
  ------------------
  |  Branch (2507:8): [True: 0, False: 0]
  ------------------
 2508|      0|				break;
 2509|      0|			}
 2510|      0|		}
 2511|      0|		return l;
 2512|      0|	}
 2513|       |	/*TODO check this is correct*/
 2514|      4|	case 8: // floats
  ------------------
  |  Branch (2514:2): [True: 4, False: 60]
  ------------------
 2515|      4|	{
 2516|      4|		GF_List *l = gf_list_new();
 2517|      4|		if (!l) {
  ------------------
  |  Branch (2517:7): [True: 0, False: 4]
  ------------------
 2518|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2519|      0|			return NULL;
 2520|      0|		}
 2521|      4|		u32 i, count;
 2522|      4|		count = lsr_read_vluimsbf5(lsr, "count");
 2523|  86.1k|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (2523:13): [True: 86.1k, False: 3]
  ------------------
 2524|  86.1k|			Fixed *v = (Fixed *)gf_malloc(sizeof(Fixed));
 2525|  86.1k|			if (!v) {
  ------------------
  |  Branch (2525:8): [True: 0, False: 86.1k]
  ------------------
 2526|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2527|  86.1k|			} else {
 2528|  86.1k|				*v = lsr_read_fixed_16_8(lsr, "val");
 2529|  86.1k|				gf_list_add(l, v);
 2530|  86.1k|			}
 2531|  86.1k|			if (lsr->last_error) break;
  ------------------
  |  Branch (2531:8): [True: 1, False: 86.1k]
  ------------------
 2532|  86.1k|		}
 2533|      4|		return l;
 2534|      4|	}
 2535|       |
 2536|       |	/*point */
 2537|      1|	case 9:
  ------------------
  |  Branch (2537:2): [True: 1, False: 63]
  ------------------
 2538|      1|		pt = (SVG_Point*)gf_malloc(sizeof(SVG_Point));
 2539|      1|		if (!pt) {
  ------------------
  |  Branch (2539:7): [True: 0, False: 1]
  ------------------
 2540|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2541|      0|			return NULL;
 2542|      0|		}
 2543|      1|		GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "valX");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 2544|      1|		pt->x = lsr_translate_coords(lsr, flag, lsr->coord_bits);
 2545|      1|		GF_LSR_READ_INT(lsr, flag, lsr->coord_bits, "valY");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 2546|      1|		pt->y = lsr_translate_coords(lsr, flag, lsr->coord_bits);
 2547|      1|		return pt;
 2548|      0|	case 10:
  ------------------
  |  Branch (2548:2): [True: 0, False: 64]
  ------------------
 2549|      0|		id_val = (u32*)gf_malloc(sizeof(u32));
 2550|      0|		if (!id_val) {
  ------------------
  |  Branch (2550:7): [True: 0, False: 0]
  ------------------
 2551|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2552|      0|		} else {
 2553|      0|			*id_val = lsr_read_vluimsbf5(lsr, name);
 2554|      0|		}
 2555|      0|		return id_val;
 2556|     16|	case 11:
  ------------------
  |  Branch (2556:2): [True: 16, False: 48]
  ------------------
 2557|     16|	{
 2558|     16|		SVG_FontFamily *ft;
 2559|     16|		u32 idx;
 2560|     16|		GF_SAFEALLOC(ft, SVG_FontFamily);
  ------------------
  |  |  242|     16|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     16|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     16|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 16, False: 0]
  |  |  ------------------
  |  |  245|     16|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     16|		}\
  |  |  247|     16|	}
  ------------------
 2561|     16|		if (!ft) {
  ------------------
  |  Branch (2561:7): [True: 0, False: 16]
  ------------------
 2562|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2563|      0|			return NULL;
 2564|      0|		}
 2565|     16|		if (escapeFlag) {
  ------------------
  |  Branch (2565:7): [True: 3, False: 13]
  ------------------
 2566|      3|			ft->type = SVG_FONTFAMILY_INHERIT;
 2567|     13|		} else {
 2568|     13|			idx = lsr_read_vluimsbf5(lsr, name);
 2569|     13|			ft->type = SVG_FONTFAMILY_VALUE;
 2570|     13|			ft->value = (char*)gf_list_get(lsr->font_table, idx);
 2571|     13|			if (ft->value) ft->value = gf_strdup(ft->value);
  ------------------
  |  Branch (2571:8): [True: 7, False: 6]
  ------------------
 2572|     13|		}
 2573|     16|		return ft;
 2574|     16|	}
 2575|      0|	case 12:
  ------------------
  |  Branch (2575:2): [True: 0, False: 64]
  ------------------
 2576|      0|		GF_SAFEALLOC(iri, XMLRI);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2577|      0|		if (!iri) {
  ------------------
  |  Branch (2577:7): [True: 0, False: 0]
  ------------------
 2578|      0|			lsr->last_error = GF_OUT_OF_MEM;
 2579|      0|		} else {
 2580|      0|			lsr_read_any_uri(lsr, iri, name);
 2581|      0|		}
 2582|      0|		return iri;
 2583|      7|	default:
  ------------------
  |  Branch (2583:2): [True: 7, False: 57]
  ------------------
 2584|      7|		lsr_read_extension(lsr, name);
 2585|      7|		break;
 2586|     64|	}
 2587|      7|	return NULL;
 2588|     64|}
lsr_dec.c:lsr_read_path_type:
 3069|     10|{
 3070|     10|#if USE_GF_PATH
 3071|     10|	GF_Point2D *pt, *ct1, *ct2, *end;
 3072|     10|	GF_Point2D orig, ct_orig;
 3073|     10|	u32 i, count, cur_pt, type;
 3074|     10|	GF_List *pts = gf_list_new();
 3075|     10|	lsr_read_point_sequence(lsr, pts, "seq");
 3076|       |
 3077|     10|	if (!path) {
  ------------------
  |  Branch (3077:6): [True: 8, False: 2]
  ------------------
 3078|      8|		GF_FieldInfo info;
 3079|      8|		gf_node_get_attribute_by_tag(n, tag, GF_TRUE, 0, &info);
 3080|      8|		path = (SVG_PathData*)info.far_ptr;
 3081|      8|	} else {
 3082|      2|		gf_path_reset(path);
 3083|      2|	}
 3084|       |	/*first MoveTo is skipped in LASeR*/
 3085|     10|	pt = (GF_Point2D*)gf_list_get(pts, 0);
 3086|     10|	if (pt) {
  ------------------
  |  Branch (3086:6): [True: 5, False: 5]
  ------------------
 3087|      5|		ct_orig = orig = *pt;
 3088|      5|		gf_path_add_move_to_vec(path, pt);
 3089|      5|	} else {
 3090|      5|		orig.x = orig.y = 0;
 3091|      5|		ct_orig = orig;
 3092|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] Empty path found.\n"));
  ------------------
  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 3093|      5|	}
 3094|     10|	cur_pt = 1;
 3095|     10|	count = lsr_read_vluimsbf5(lsr, "nbOfTypes");
 3096|     51|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (3096:12): [True: 47, False: 4]
  ------------------
 3097|     47|		GF_LSR_READ_INT(lsr, type, 5, name);
  ------------------
  |  |   34|     47|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     47|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 47]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     47|	} else {\
  |  |   39|     47|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     47|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     47|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 47]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     47|	}\
  |  |   42|     47|}
  ------------------
 3098|     47|		switch (type) {
  ------------------
  |  Branch (3098:11): [True: 27, False: 20]
  ------------------
 3099|      1|		case LSR_PATH_COM_h:
  ------------------
  |  Branch (3099:3): [True: 1, False: 46]
  ------------------
 3100|      1|		case LSR_PATH_COM_l:
  ------------------
  |  Branch (3100:3): [True: 0, False: 47]
  ------------------
 3101|      2|		case LSR_PATH_COM_v:
  ------------------
  |  Branch (3101:3): [True: 1, False: 46]
  ------------------
 3102|      4|		case LSR_PATH_COM_H:
  ------------------
  |  Branch (3102:3): [True: 2, False: 45]
  ------------------
 3103|      5|		case LSR_PATH_COM_V:
  ------------------
  |  Branch (3103:3): [True: 1, False: 46]
  ------------------
 3104|      7|		case LSR_PATH_COM_L:
  ------------------
  |  Branch (3104:3): [True: 2, False: 45]
  ------------------
 3105|      7|			pt = (GF_Point2D*)gf_list_get(pts, cur_pt);
 3106|      7|			if (!pt) goto err_exit;
  ------------------
  |  Branch (3106:8): [True: 0, False: 7]
  ------------------
 3107|      7|			gf_path_add_line_to_vec(path, pt);
 3108|      7|			cur_pt++;
 3109|      7|			break;
 3110|      1|		case LSR_PATH_COM_m:
  ------------------
  |  Branch (3110:3): [True: 1, False: 46]
  ------------------
 3111|      4|		case LSR_PATH_COM_M:
  ------------------
  |  Branch (3111:3): [True: 3, False: 44]
  ------------------
 3112|      4|			pt = (GF_Point2D*)gf_list_get(pts, cur_pt);
 3113|      4|			if (!pt) goto err_exit;
  ------------------
  |  Branch (3113:8): [True: 3, False: 1]
  ------------------
 3114|      1|			gf_path_add_move_to_vec(path, pt);
 3115|      1|			cur_pt++;
 3116|      1|			break;
 3117|      2|		case LSR_PATH_COM_q:
  ------------------
  |  Branch (3117:3): [True: 2, False: 45]
  ------------------
 3118|      3|		case LSR_PATH_COM_Q:
  ------------------
  |  Branch (3118:3): [True: 1, False: 46]
  ------------------
 3119|      3|			ct1 = (GF_Point2D*)gf_list_get(pts, cur_pt);
 3120|      3|			end = (GF_Point2D*)gf_list_get(pts, cur_pt+1);
 3121|      3|			if (!ct1 || !end) goto err_exit;
  ------------------
  |  Branch (3121:8): [True: 0, False: 3]
  |  Branch (3121:16): [True: 1, False: 2]
  ------------------
 3122|      2|			gf_path_add_quadratic_to_vec(path, ct1, end);
 3123|      2|			orig = *end;
 3124|      2|			cur_pt+=2;
 3125|      2|			break;
 3126|      0|		case LSR_PATH_COM_c:
  ------------------
  |  Branch (3126:3): [True: 0, False: 47]
  ------------------
 3127|      1|		case LSR_PATH_COM_C:
  ------------------
  |  Branch (3127:3): [True: 1, False: 46]
  ------------------
 3128|      1|			ct1 = (GF_Point2D*)gf_list_get(pts, cur_pt);
 3129|      1|			ct2 = (GF_Point2D*)gf_list_get(pts, cur_pt+1);
 3130|      1|			end = (GF_Point2D*)gf_list_get(pts, cur_pt+2);
 3131|      1|			if (!ct1 || !ct2 || !end) goto err_exit;
  ------------------
  |  Branch (3131:8): [True: 0, False: 1]
  |  Branch (3131:16): [True: 0, False: 1]
  |  Branch (3131:24): [True: 0, False: 1]
  ------------------
 3132|      1|			gf_path_add_cubic_to_vec(path, ct1, ct2, end);
 3133|      1|			cur_pt+=3;
 3134|      1|			ct_orig = *ct2;
 3135|      1|			orig = *end;
 3136|      1|			break;
 3137|      3|		case LSR_PATH_COM_s:
  ------------------
  |  Branch (3137:3): [True: 3, False: 44]
  ------------------
 3138|      3|		case LSR_PATH_COM_S:
  ------------------
  |  Branch (3138:3): [True: 0, False: 47]
  ------------------
 3139|      3|			ct_orig.x = 2*orig.x - ct_orig.x;
 3140|      3|			ct_orig.y = 2*orig.y - ct_orig.y;
 3141|      3|			ct2 = (GF_Point2D*)gf_list_get(pts, cur_pt);
 3142|      3|			end = (GF_Point2D*)gf_list_get(pts, cur_pt+1);
 3143|      3|			if (!ct2 || !end) goto err_exit;
  ------------------
  |  Branch (3143:8): [True: 1, False: 2]
  |  Branch (3143:16): [True: 0, False: 2]
  ------------------
 3144|      2|			gf_path_add_cubic_to_vec(path, &ct_orig, ct2, end);
 3145|      2|			ct_orig = *ct2;
 3146|      2|			orig = *end;
 3147|      2|			cur_pt+=2;
 3148|      2|			break;
 3149|      1|		case LSR_PATH_COM_t:
  ------------------
  |  Branch (3149:3): [True: 1, False: 46]
  ------------------
 3150|      1|		case LSR_PATH_COM_T:
  ------------------
  |  Branch (3150:3): [True: 0, False: 47]
  ------------------
 3151|      1|			ct_orig.x = 2*orig.x - ct_orig.x;
 3152|      1|			ct_orig.y = 2*orig.y - ct_orig.y;
 3153|      1|			end = gf_list_get(pts, cur_pt);
 3154|      1|			if (!end) goto err_exit;
  ------------------
  |  Branch (3154:8): [True: 0, False: 1]
  ------------------
 3155|      1|			gf_path_add_quadratic_to_vec(path, &ct_orig, end);
 3156|      1|			orig = *end;
 3157|      1|			break;
 3158|      2|		case LSR_PATH_COM_z:
  ------------------
  |  Branch (3158:3): [True: 2, False: 45]
  ------------------
 3159|      8|		case LSR_PATH_COM_Z:
  ------------------
  |  Branch (3159:3): [True: 6, False: 41]
  ------------------
 3160|      8|			gf_path_close(path);
 3161|      8|			break;
 3162|     47|		}
 3163|     42|		if (lsr->last_error) break;
  ------------------
  |  Branch (3163:7): [True: 1, False: 41]
  ------------------
 3164|     42|	}
 3165|      5|	goto exit;
 3166|       |
 3167|      5|err_exit:
 3168|      5|	lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
 3169|       |
 3170|     10|exit:
 3171|    157|	while (gf_list_count(pts)) {
  ------------------
  |  Branch (3171:9): [True: 147, False: 10]
  ------------------
 3172|    147|		end = (GF_Point2D*)gf_list_get(pts, 0);
 3173|    147|		gf_list_rem(pts, 0);
 3174|    147|		gf_free(end);
 3175|    147|	}
 3176|     10|	gf_list_del(pts);
 3177|       |
 3178|       |#else
 3179|       |	u32 i, count, c;
 3180|       |	if (!path) {
 3181|       |		lsr->last_error = GF_BAD_PARAM;
 3182|       |		return;
 3183|       |	}
 3184|       |	lsr_read_point_sequence(lsr, path->points, "seq");
 3185|       |	while (gf_list_count(path->commands)) {
 3186|       |		u8 *v = (u8 *)gf_list_last(path->commands);
 3187|       |		gf_list_rem_last(path->commands);
 3188|       |		gf_free(v);
 3189|       |	}
 3190|       |
 3191|       |	count = lsr_read_vluimsbf5(lsr, "nbOfTypes");
 3192|       |	for (i=0; i<count; i++) {
 3193|       |		u8 *type = (u8 *)gf_malloc(sizeof(u8));
 3194|       |		if (!type) {
 3195|       |			lsr->last_error = GF_OUT_OF_MEM;
 3196|       |			return;
 3197|       |		}
 3198|       |		GF_LSR_READ_INT(lsr, c, 5, name);
 3199|       |
 3200|       |		switch (c) {
 3201|       |		case LSR_PATH_COM_h:
 3202|       |		case LSR_PATH_COM_l:
 3203|       |		case LSR_PATH_COM_v:
 3204|       |		case LSR_PATH_COM_H:
 3205|       |		case LSR_PATH_COM_V:
 3206|       |		case LSR_PATH_COM_L:
 3207|       |			*type=SVG_PATHCOMMAND_L;
 3208|       |			break;
 3209|       |		case LSR_PATH_COM_m:
 3210|       |		case LSR_PATH_COM_M:
 3211|       |			*type=SVG_PATHCOMMAND_M;
 3212|       |			break;
 3213|       |		case LSR_PATH_COM_q:
 3214|       |		case LSR_PATH_COM_Q:
 3215|       |			*type=SVG_PATHCOMMAND_Q;
 3216|       |			break;
 3217|       |		case LSR_PATH_COM_c:
 3218|       |		case LSR_PATH_COM_C:
 3219|       |			*type=SVG_PATHCOMMAND_C;
 3220|       |			break;
 3221|       |		case LSR_PATH_COM_s:
 3222|       |		case LSR_PATH_COM_S:
 3223|       |			*type=SVG_PATHCOMMAND_S;
 3224|       |			break;
 3225|       |		case LSR_PATH_COM_t:
 3226|       |		case LSR_PATH_COM_T:
 3227|       |			*type=SVG_PATHCOMMAND_T;
 3228|       |			break;
 3229|       |		case LSR_PATH_COM_z:
 3230|       |		case LSR_PATH_COM_Z:
 3231|       |			*type=SVG_PATHCOMMAND_Z;
 3232|       |			break;
 3233|       |		}
 3234|       |		gf_list_add(path->commands, type);
 3235|       |	}
 3236|       |#endif
 3237|     10|}
lsr_dec.c:lsr_read_point_sequence:
 2995|     52|{
 2996|     52|	u32 flag, i, count;
 2997|       |
 2998|     52|	while (gf_list_count(pts)) {
  ------------------
  |  Branch (2998:9): [True: 0, False: 52]
  ------------------
 2999|      0|		SVG_Point *v = (SVG_Point *)gf_list_last(pts);
 3000|      0|		gf_list_rem_last(pts);
 3001|      0|		gf_free(v);
 3002|      0|	}
 3003|     52|	count = lsr_read_vluimsbf5(lsr, "nbPoints");
 3004|     52|	if (!count) return;
  ------------------
  |  Branch (3004:6): [True: 3, False: 49]
  ------------------
 3005|       |	/*TODO golomb coding*/
 3006|     49|	GF_LSR_READ_INT(lsr, flag, 1, "flag");
  ------------------
  |  |   34|     49|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     49|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 49]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     49|	} else {\
  |  |   39|     49|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     49|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     49|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 49]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     49|	}\
  |  |   42|     49|}
  ------------------
 3007|     49|	if (!flag) {
  ------------------
  |  Branch (3007:6): [True: 25, False: 24]
  ------------------
 3008|     25|		if (count < 3) {
  ------------------
  |  Branch (3008:7): [True: 1, False: 24]
  ------------------
 3009|      1|			u32 nb_bits, v;
 3010|      1|			GF_LSR_READ_INT(lsr, nb_bits, 5, "bits");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 3011|      2|			for (i=0; i<count; i++) {
  ------------------
  |  Branch (3011:14): [True: 1, False: 1]
  ------------------
 3012|      1|				SVG_Point *pt = (SVG_Point *)gf_malloc(sizeof(SVG_Point));
 3013|      1|				if (!pt) {
  ------------------
  |  Branch (3013:9): [True: 0, False: 1]
  ------------------
 3014|      0|					lsr->last_error = GF_OUT_OF_MEM;
 3015|      1|				} else {
 3016|      1|					gf_list_add(pts, pt);
 3017|      1|					GF_LSR_READ_INT(lsr, v, nb_bits, "x");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 3018|      1|					pt->x = lsr_translate_coords(lsr, v, nb_bits);
 3019|      1|					GF_LSR_READ_INT(lsr, v, nb_bits, "y");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 3020|      1|					pt->y = lsr_translate_coords(lsr, v, nb_bits);
 3021|      1|				}
 3022|      1|				if (lsr->last_error) return;
  ------------------
  |  Branch (3022:9): [True: 0, False: 1]
  ------------------
 3023|      1|			}
 3024|     24|		} else {
 3025|     24|			u32 nb_dx, nb_dy, k;
 3026|     24|			Fixed x, y;
 3027|     24|			SVG_Point *pt = (SVG_Point *)gf_malloc(sizeof(SVG_Point));
 3028|     24|			if (!pt) {
  ------------------
  |  Branch (3028:8): [True: 0, False: 24]
  ------------------
 3029|      0|				lsr->last_error = GF_OUT_OF_MEM;
 3030|      0|				return;
 3031|      0|			}
 3032|     24|			gf_list_add(pts, pt);
 3033|       |
 3034|     24|			GF_LSR_READ_INT(lsr, nb_dx, 5, "bits");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 3035|     24|			if (!nb_dx) {
  ------------------
  |  Branch (3035:8): [True: 0, False: 24]
  ------------------
 3036|      0|				lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
 3037|      0|				return;
 3038|      0|			}
 3039|     24|			GF_LSR_READ_INT(lsr, k, nb_dx, "x");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 3040|     24|			x = pt->x = lsr_translate_coords(lsr, k, nb_dx);
 3041|     24|			GF_LSR_READ_INT(lsr, k, nb_dx, "y");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 3042|     24|			y = pt->y = lsr_translate_coords(lsr, k, nb_dx);
 3043|       |
 3044|     24|			GF_LSR_READ_INT(lsr, nb_dx, 5, "bitsx");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 3045|     24|			GF_LSR_READ_INT(lsr, nb_dy, 5, "bitsy");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 3046|     24|			if (!nb_dx || !nb_dy) {
  ------------------
  |  Branch (3046:8): [True: 1, False: 23]
  |  Branch (3046:18): [True: 1, False: 22]
  ------------------
 3047|      2|				lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
 3048|      2|				return;
 3049|      2|			}
 3050|  4.21k|			for (i=1; i<count; i++) {
  ------------------
  |  Branch (3050:14): [True: 4.19k, False: 22]
  ------------------
 3051|  4.19k|				pt = (SVG_Point *)gf_malloc(sizeof(SVG_Point));
 3052|  4.19k|				if (!pt) {
  ------------------
  |  Branch (3052:9): [True: 0, False: 4.19k]
  ------------------
 3053|      0|					lsr->last_error = GF_OUT_OF_MEM;
 3054|  4.19k|				} else {
 3055|  4.19k|					gf_list_add(pts, pt);
 3056|  4.19k|					GF_LSR_READ_INT(lsr, k, nb_dx, "dx");
  ------------------
  |  |   34|  4.19k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  4.19k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4.19k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  4.19k|	} else {\
  |  |   39|  4.19k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  4.19k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  4.19k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  4.19k|	}\
  |  |   42|  4.19k|}
  ------------------
 3057|  4.19k|					pt->x = x + lsr_translate_coords(lsr, k, nb_dx);
 3058|  4.19k|					x = pt->x;
 3059|  4.19k|					GF_LSR_READ_INT(lsr, k, nb_dy, "dy");
  ------------------
  |  |   34|  4.19k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  4.19k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4.19k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  4.19k|	} else {\
  |  |   39|  4.19k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  4.19k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  4.19k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  4.19k|	}\
  |  |   42|  4.19k|}
  ------------------
 3060|  4.19k|					pt->y = y + lsr_translate_coords(lsr, k, nb_dy);
 3061|  4.19k|					y = pt->y;
 3062|  4.19k|				}
 3063|  4.19k|				if (lsr->last_error) return;
  ------------------
  |  Branch (3063:9): [True: 0, False: 4.19k]
  ------------------
 3064|  4.19k|			}
 3065|     22|		}
 3066|     25|	}
 3067|     49|}
lsr_dec.c:lsr_translate_anim_trans_value:
 2591|      5|{
 2592|      5|	SVG_Point_Angle *p;
 2593|      5|	Fixed *f;
 2594|      5|	u32 coded_type = val->type;
 2595|       |
 2596|      5|	switch(transform_type) {
 2597|      0|	case SVG_TRANSFORM_TRANSLATE:
  ------------------
  |  Branch (2597:2): [True: 0, False: 5]
  ------------------
 2598|      0|		val->type = SVG_Transform_Translate_datatype;
 2599|      0|		break;
 2600|      0|	case SVG_TRANSFORM_SCALE:
  ------------------
  |  Branch (2600:2): [True: 0, False: 5]
  ------------------
 2601|      0|		val->type = SVG_Transform_Scale_datatype;
 2602|      0|		break;
 2603|      3|	case SVG_TRANSFORM_ROTATE:
  ------------------
  |  Branch (2603:2): [True: 3, False: 2]
  ------------------
 2604|      3|		val->type = SVG_Transform_Rotate_datatype;
 2605|      3|		break;
 2606|      0|	case SVG_TRANSFORM_SKEWX:
  ------------------
  |  Branch (2606:2): [True: 0, False: 5]
  ------------------
 2607|      0|		val->type = SVG_Transform_SkewX_datatype;
 2608|      0|		break;
 2609|      2|	case SVG_TRANSFORM_SKEWY:
  ------------------
  |  Branch (2609:2): [True: 2, False: 3]
  ------------------
 2610|      2|		val->type = SVG_Transform_SkewY_datatype;
 2611|      2|		break;
 2612|      0|	case SVG_TRANSFORM_MATRIX:
  ------------------
  |  Branch (2612:2): [True: 0, False: 5]
  ------------------
 2613|      0|		val->type = SVG_Transform_datatype;
 2614|      0|		break;
 2615|      0|	default:
  ------------------
  |  Branch (2615:2): [True: 0, False: 5]
  ------------------
 2616|      0|		GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[LSR Parsing] unknown datatype for animate transform.\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 2617|      0|		lsr_delete_anim_value(lsr, val, coded_type);
 2618|      0|		return;
 2619|      5|	}
 2620|      5|	if (!val->value) return;
  ------------------
  |  Branch (2620:6): [True: 2, False: 3]
  ------------------
 2621|      3|	switch (transform_type) {
  ------------------
  |  Branch (2621:10): [True: 3, False: 0]
  ------------------
 2622|      2|	case SVG_TRANSFORM_ROTATE:
  ------------------
  |  Branch (2622:2): [True: 2, False: 1]
  ------------------
 2623|      2|		if (coded_type==8) {
  ------------------
  |  Branch (2623:7): [True: 0, False: 2]
  ------------------
 2624|      0|			p = (SVG_Point_Angle*)gf_malloc(sizeof(SVG_Point_Angle));
 2625|      0|			if (!p) {
  ------------------
  |  Branch (2625:8): [True: 0, False: 0]
  ------------------
 2626|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2627|      0|				break;
 2628|      0|			}
 2629|      0|			p->x = p->y = 0;
 2630|      0|			GF_List *l = (GF_List *)val->value;
 2631|      0|			f = (Fixed*)gf_list_get(l, 0);
 2632|      0|			if (f) p->angle = *f;
  ------------------
  |  Branch (2632:8): [True: 0, False: 0]
  ------------------
 2633|       |
 2634|      0|			f = (Fixed*)gf_list_get(l, 1);
 2635|      0|			if (f) p->x = *f;
  ------------------
  |  Branch (2635:8): [True: 0, False: 0]
  ------------------
 2636|       |
 2637|      0|			f = (Fixed*)gf_list_get(l, 2);
 2638|      0|			if (f) p->y = *f;
  ------------------
  |  Branch (2638:8): [True: 0, False: 0]
  ------------------
 2639|       |
 2640|      0|			while (gf_list_count(l)) {
  ------------------
  |  Branch (2640:11): [True: 0, False: 0]
  ------------------
 2641|      0|				f = gf_list_pop_back(l);
 2642|      0|				gf_free(f);
 2643|      0|			}
 2644|      0|			gf_list_del(l);
 2645|      0|			p->angle = gf_muldiv(p->angle, GF_PI, INT2FIX(180) );
  ------------------
  |  |  135|      0|#define gf_muldiv(_a, _b, _c)	(((_c != 0)) ? (_a)*(_b)/(_c) : GF_MAX_FLOAT)
  |  |  ------------------
  |  |  |  |  431|      0|#define GF_MAX_FLOAT		FLT_MAX
  |  |  ------------------
  |  |  |  Branch (135:32): [True: 0, Folded]
  |  |  ------------------
  ------------------
 2646|      0|			val->value = p;
 2647|      0|			return;
 2648|      2|		} else if ((coded_type==1) || (coded_type==4)) {
  ------------------
  |  Branch (2648:14): [True: 0, False: 2]
  |  Branch (2648:33): [True: 0, False: 2]
  ------------------
 2649|      0|			p = (SVG_Point_Angle*)gf_malloc(sizeof(SVG_Point_Angle));
 2650|      0|			if (!p) {
  ------------------
  |  Branch (2650:8): [True: 0, False: 0]
  ------------------
 2651|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2652|      0|				break;
 2653|      0|			}
 2654|      0|			p->x = p->y = 0;
 2655|      0|			p->angle = ((SVG_Number *)val->value)->value;
 2656|      0|			gf_free(val->value);
 2657|      0|			p->angle = gf_muldiv(p->angle, GF_PI, INT2FIX(180) );
  ------------------
  |  |  135|      0|#define gf_muldiv(_a, _b, _c)	(((_c != 0)) ? (_a)*(_b)/(_c) : GF_MAX_FLOAT)
  |  |  ------------------
  |  |  |  |  431|      0|#define GF_MAX_FLOAT		FLT_MAX
  |  |  ------------------
  |  |  |  Branch (135:32): [True: 0, Folded]
  |  |  ------------------
  ------------------
 2658|      0|			val->value = p;
 2659|      0|			return;
 2660|      0|		}
 2661|      2|		break;
 2662|      2|	case SVG_TRANSFORM_SCALE:
  ------------------
  |  Branch (2662:2): [True: 0, False: 3]
  ------------------
 2663|      0|		if (coded_type==8) {
  ------------------
  |  Branch (2663:7): [True: 0, False: 0]
  ------------------
 2664|      0|			SVG_Point *pt;
 2665|      0|			GF_List *l = (GF_List *)val->value;
 2666|      0|			GF_SAFEALLOC(pt , SVG_Point);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2667|      0|			if (!pt) {
  ------------------
  |  Branch (2667:8): [True: 0, False: 0]
  ------------------
 2668|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2669|      0|				break;
 2670|      0|			}
 2671|      0|			f = (Fixed*)gf_list_get(l, 0);
 2672|      0|			if (f) pt->x = *f;
  ------------------
  |  Branch (2672:8): [True: 0, False: 0]
  ------------------
 2673|      0|			f = (Fixed*)gf_list_get(l, 1);
 2674|      0|			if (f) pt->y = *f;
  ------------------
  |  Branch (2674:8): [True: 0, False: 0]
  ------------------
 2675|      0|			else pt->y = pt->x;
 2676|       |
 2677|      0|			while (gf_list_count(l)) {
  ------------------
  |  Branch (2677:11): [True: 0, False: 0]
  ------------------
 2678|      0|				f = gf_list_pop_back(l);
 2679|      0|				gf_free(f);
 2680|      0|			}
 2681|      0|			gf_list_del(l);
 2682|      0|			val->value = pt;
 2683|      0|			return;
 2684|      0|		}
 2685|      0|		break;
 2686|      0|	case SVG_TRANSFORM_SKEWX:
  ------------------
  |  Branch (2686:2): [True: 0, False: 3]
  ------------------
 2687|      1|	case SVG_TRANSFORM_SKEWY:
  ------------------
  |  Branch (2687:2): [True: 1, False: 2]
  ------------------
 2688|      1|		if ((coded_type==1) || (coded_type==4)) {
  ------------------
  |  Branch (2688:7): [True: 0, False: 1]
  |  Branch (2688:26): [True: 0, False: 1]
  ------------------
 2689|      0|			f = (Fixed*)gf_malloc(sizeof(Fixed));
 2690|      0|			if (!f) {
  ------------------
  |  Branch (2690:8): [True: 0, False: 0]
  ------------------
 2691|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2692|      0|				break;
 2693|      0|			}
 2694|      0|			*f = ((SVG_Number *)val->value)->value;
 2695|      0|			gf_free(val->value);
 2696|      0|			val->value = f;
 2697|      0|			return;
 2698|      0|		}
 2699|      1|		break;
 2700|      3|	}
 2701|       |	//not handled
 2702|      3|	lsr_delete_anim_value(lsr, val, coded_type);
 2703|      3|}
lsr_dec.c:lsr_read_calc_mode:
 1799|     11|{
 1800|     11|	u32 v;
 1801|       |	/*SMIL_CALCMODE_LINEAR is default and 0 in our code*/
 1802|     11|	GF_LSR_READ_INT(lsr, v, 1, "has_calcMode");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 1803|     11|	if (v) {
  ------------------
  |  Branch (1803:6): [True: 6, False: 5]
  ------------------
 1804|      6|		GF_FieldInfo info;
 1805|      6|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_calcMode, GF_TRUE, GF_FALSE, &info);
 1806|      6|		GF_LSR_READ_INT(lsr, *(SMIL_CalcMode*)info.far_ptr, 2, "calcMode");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 1807|      6|	}
 1808|     11|}
lsr_dec.c:lsr_read_fraction_12:
 2934|     22|{
 2935|     22|	GF_FieldInfo info;
 2936|     22|	u32 i, count;
 2937|     22|	GF_LSR_READ_INT(lsr, count, 1, name);
  ------------------
  |  |   34|     22|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     22|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 22]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     22|	} else {\
  |  |   39|     22|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     22|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     22|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     22|	}\
  |  |   42|     22|}
  ------------------
 2938|     22|	if (!count) return;
  ------------------
  |  Branch (2938:6): [True: 12, False: 10]
  ------------------
 2939|       |
 2940|     10|	lsr->last_error = gf_node_get_attribute_by_tag(elt, tag, GF_TRUE, 0, &info);
 2941|       |
 2942|     10|	count = lsr_read_vluimsbf5(lsr, "name");
 2943|  5.96k|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (2943:12): [True: 5.95k, False: 9]
  ------------------
 2944|  5.95k|		Fixed *f = lsr_read_fraction_12_item(lsr);
 2945|  5.95k|		gf_list_add( *((SMIL_KeyTimes*)info.far_ptr), f);
 2946|  5.95k|		if (lsr->last_error) return;
  ------------------
  |  Branch (2946:7): [True: 1, False: 5.95k]
  ------------------
 2947|  5.95k|	}
 2948|     10|}
lsr_dec.c:lsr_read_fraction_12_item:
 2912|  5.95k|{
 2913|  5.95k|	u32 flag;
 2914|  5.95k|	Fixed *f;
 2915|  5.95k|	GF_SAFEALLOC(f, Fixed);
  ------------------
  |  |  242|  5.95k|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|  5.95k|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|  5.95k|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 5.95k, False: 0]
  |  |  ------------------
  |  |  245|  5.95k|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|  5.95k|		}\
  |  |  247|  5.95k|	}
  ------------------
 2916|  5.95k|	if (!f) {
  ------------------
  |  Branch (2916:6): [True: 0, False: 5.95k]
  ------------------
 2917|      0|		lsr->last_error = GF_OUT_OF_MEM;
 2918|      0|		return NULL;
 2919|      0|	}
 2920|  5.95k|	GF_LSR_READ_INT(lsr, flag, 1, "hasShort");
  ------------------
  |  |   34|  5.95k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  5.95k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5.95k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  5.95k|	} else {\
  |  |   39|  5.95k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  5.95k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  5.95k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  5.95k|	}\
  |  |   42|  5.95k|}
  ------------------
 2921|  5.95k|	if (flag) {
  ------------------
  |  Branch (2921:6): [True: 2.76k, False: 3.19k]
  ------------------
 2922|  2.76k|		GF_LSR_READ_INT(lsr, flag, 1, "isZero");
  ------------------
  |  |   34|  2.76k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  2.76k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2.76k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|  2.76k|	} else {\
  |  |   39|  2.76k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  2.76k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  2.76k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2.76k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  2.76k|	}\
  |  |   42|  2.76k|}
  ------------------
 2923|  2.76k|		if (flag) *f = 0;
  ------------------
  |  Branch (2923:7): [True: 1.32k, False: 1.43k]
  ------------------
 2924|  1.43k|		else *f = FIX_ONE;
  ------------------
  |  |  118|  1.43k|#define FIX_ONE			1.0f
  ------------------
 2925|  3.19k|	} else {
 2926|  3.19k|		u32 v;
 2927|  3.19k|		GF_LSR_READ_INT(lsr, v, 12, "val");
  ------------------
  |  |   34|  3.19k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|  3.19k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 1, False: 3.19k]
  |  |  ------------------
  |  |   36|      1|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      1|		(_val) = 0;\
  |  |   38|  3.19k|	} else {\
  |  |   39|  3.19k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|  3.19k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|  3.19k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|  3.19k|	}\
  |  |   42|  3.19k|}
  ------------------
 2928|  3.19k|		*f = INT2FIX(v) / 4096/*(1<<12)*/;
  ------------------
  |  |  119|  3.19k|#define INT2FIX(v)		((Float) (v))
  ------------------
 2929|  3.19k|	}
 2930|  5.95k|	return f;
 2931|  5.95k|}
lsr_dec.c:lsr_read_anim_values_ex:
 2856|     11|{
 2857|     11|	u32 flag, i, count = 0;
 2858|     11|	u32 coded_type;
 2859|     11|	GF_FieldInfo info;
 2860|     11|	SMIL_AnimateValues *values;
 2861|       |
 2862|     11|	GF_LSR_READ_INT(lsr, flag, 1, "values");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 2863|     11|	if (!flag) return;
  ------------------
  |  Branch (2863:6): [True: 9, False: 2]
  ------------------
 2864|       |
 2865|      2|	lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_values, GF_TRUE, 0, &info);
 2866|      2|	values = (SMIL_AnimateValues *)info.far_ptr;
 2867|       |
 2868|      2|	GF_LSR_READ_INT(lsr, coded_type, 4, "type");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 2869|      2|	values->type = coded_type;
 2870|      2|	values->laser_strings = 0;
 2871|       |
 2872|      2|	count = lsr_read_vluimsbf5(lsr, "count");
 2873|     47|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (2873:12): [True: 46, False: 1]
  ------------------
 2874|     46|		void *att = lsr_read_an_anim_value(lsr, coded_type, "a_value");
 2875|     46|		if (att) {
  ------------------
  |  Branch (2875:7): [True: 46, False: 0]
  ------------------
 2876|     46|			gf_list_add(values->values, att);
 2877|     46|		}
 2878|       |
 2879|     46|		if (lsr->last_error) {
  ------------------
  |  Branch (2879:7): [True: 1, False: 45]
  ------------------
 2880|       |
 2881|     32|			while (gf_list_count(values->values)) {
  ------------------
  |  Branch (2881:11): [True: 31, False: 1]
  ------------------
 2882|     31|				SMIL_AnimateValue a_val;
 2883|     31|				a_val.type = 0;
 2884|     31|				a_val.value = gf_list_pop_back(values->values);
 2885|     31|				lsr_delete_anim_value(lsr, &a_val, coded_type);
 2886|     31|			}
 2887|      1|			return;
 2888|      1|		}
 2889|       |
 2890|     46|	}
 2891|      1|	if (tr_type) {
  ------------------
  |  Branch (2891:6): [True: 0, False: 1]
  ------------------
 2892|      0|		lsr_translate_anim_trans_values(lsr, info.far_ptr, *tr_type);
 2893|      1|	} else {
 2894|      1|		switch (coded_type) {
 2895|      0|			case 2:
  ------------------
  |  Branch (2895:4): [True: 0, False: 1]
  ------------------
 2896|      0|				values->type = SVG_PathData_datatype;
 2897|      0|				break;
 2898|      0|			case 3:
  ------------------
  |  Branch (2898:4): [True: 0, False: 1]
  ------------------
 2899|      0|				values->type = SVG_Points_datatype;
 2900|      0|				break;
 2901|      1|			default:
  ------------------
  |  Branch (2901:4): [True: 1, False: 0]
  ------------------
 2902|      1|				break;
 2903|      1|		}
 2904|       |
 2905|      1|	}
 2906|       |
 2907|      1|}
lsr_dec.c:lsr_read_attribute_type:
 3451|     12|{
 3452|     12|	GF_FieldInfo info;
 3453|     12|	u32 flag;
 3454|     12|	GF_LSR_READ_INT(lsr, flag, 1, "hasAttributeType");
  ------------------
  |  |   34|     12|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     12|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 12]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     12|	} else {\
  |  |   39|     12|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     12|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     12|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     12|	}\
  |  |   42|     12|}
  ------------------
 3455|     12|	if (!flag) return;
  ------------------
  |  Branch (3455:6): [True: 8, False: 4]
  ------------------
 3456|      4|	lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_attributeType, 1, 0, &info);
 3457|      4|	GF_LSR_READ_INT(lsr, *(SMIL_AttributeType*)info.far_ptr, 2, "attributeType");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 3458|      4|}
lsr_dec.c:lsr_read_duration:
 1426|     19|{
 1427|       |	lsr_read_duration_ex(lsr, n, TAG_SVG_ATT_dur, NULL, "dur", GF_TRUE);
 1428|     19|}
lsr_dec.c:lsr_read_anim_fill:
 2339|     12|{
 2340|     12|	u32 val;
 2341|       |
 2342|     12|	GF_LSR_READ_INT(lsr, val, 1, "has_smil_fill");
  ------------------
  |  |   34|     12|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     12|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 12]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     12|	} else {\
  |  |   39|     12|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     12|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     12|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     12|	}\
  |  |   42|     12|}
  ------------------
 2343|     12|	if (val) {
  ------------------
  |  Branch (2343:6): [True: 6, False: 6]
  ------------------
 2344|      6|		GF_FieldInfo info;
 2345|      6|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_smil_fill, GF_TRUE, 0, &info);
 2346|       |		/*enumeration freeze{0} remove{1}*/
 2347|      6|		GF_LSR_READ_INT(lsr, val, 1, "smil_fill");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 2348|      6|		*(SMIL_Fill*)info.far_ptr = val ? SMIL_FILL_REMOVE : SMIL_FILL_FREEZE;
  ------------------
  |  Branch (2348:31): [True: 2, False: 4]
  ------------------
 2349|      6|	}
 2350|     12|}
lsr_dec.c:lsr_read_anim_repeatCount:
 2352|     19|{
 2353|     19|	u32 val;
 2354|     19|	GF_LSR_READ_INT(lsr, val, 1, "has_repeatCount");
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 2355|     19|	if (val) {
  ------------------
  |  Branch (2355:6): [True: 8, False: 11]
  ------------------
 2356|      8|		GF_FieldInfo info;
 2357|      8|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_repeatCount, GF_TRUE, 0, &info);
 2358|      8|		GF_LSR_READ_INT(lsr, val, 1, "repeatCount");
  ------------------
  |  |   34|      8|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      8|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 8]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      8|	} else {\
  |  |   39|      8|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      8|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      8|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      8|	}\
  |  |   42|      8|}
  ------------------
 2359|      8|		if (val) ((SMIL_RepeatCount*)info.far_ptr)->type = SMIL_REPEATCOUNT_INDEFINITE;
  ------------------
  |  Branch (2359:7): [True: 3, False: 5]
  ------------------
 2360|      5|		else {
 2361|      5|			((SMIL_RepeatCount*)info.far_ptr)->type = SMIL_REPEATCOUNT_DEFINED;
 2362|      5|			((SMIL_RepeatCount*)info.far_ptr)->count = lsr_read_fixed_16_8(lsr, "repeatCount");
 2363|      5|		}
 2364|      8|	}
 2365|     19|}
lsr_dec.c:lsr_read_repeat_duration:
 2367|     19|{
 2368|     19|	u32 flag;
 2369|     19|	GF_LSR_READ_INT(lsr, flag, 1, "has_repeatDur");
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 2370|     19|	if (flag) {
  ------------------
  |  Branch (2370:6): [True: 7, False: 12]
  ------------------
 2371|      7|		GF_FieldInfo info;
 2372|      7|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_repeatDur, GF_TRUE, 0, &info);
 2373|      7|		GF_LSR_READ_INT(lsr, flag, 1, "choice");
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 2374|       |
 2375|      7|		if (flag) {
  ------------------
  |  Branch (2375:7): [True: 4, False: 3]
  ------------------
 2376|      4|			((SMIL_Duration *)info.far_ptr)->type = SMIL_DURATION_INDEFINITE;
 2377|      4|		} else {
 2378|      3|			((SMIL_Duration *)info.far_ptr)->clock_value = (Double) lsr_read_vluimsbf5(lsr, "value");
 2379|      3|			((SMIL_Duration *)info.far_ptr)->clock_value /= lsr->time_resolution;
 2380|      3|			((SMIL_Duration *)info.far_ptr)->type = SMIL_DURATION_DEFINED;
 2381|      3|		}
 2382|      7|	}
 2383|     19|}
lsr_dec.c:lsr_read_anim_restart:
 2385|     19|{
 2386|     19|	u32 val;
 2387|     19|	GF_LSR_READ_INT(lsr, val, 1, "has_restart");
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 2388|     19|	if (val) {
  ------------------
  |  Branch (2388:6): [True: 9, False: 10]
  ------------------
 2389|      9|		GF_FieldInfo info;
 2390|      9|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_restart, GF_TRUE, 0, &info);
 2391|       |		/*enumeration always{0} never{1} whenNotActive{2}*/
 2392|      9|		GF_LSR_READ_INT(lsr, *(SMIL_Restart*)info.far_ptr, 2, "restart");
  ------------------
  |  |   34|      9|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      9|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 9]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      9|	} else {\
  |  |   39|      9|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      9|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      9|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      9|	}\
  |  |   42|      9|}
  ------------------
 2393|      9|	}
 2394|     19|}
lsr_dec.c:lsr_read_group_content_post_init:
 4896|     10|{
 4897|     10|	u32 i, count;
 4898|     10|	if (lsr->last_error) return;
  ------------------
  |  Branch (4898:6): [True: 2, False: 8]
  ------------------
 4899|      8|	lsr_read_object_content(lsr, elt);
 4900|       |
 4901|      8|	GF_LSR_READ_INT(lsr, count, 1, "opt_group");
  ------------------
  |  |   34|      8|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      8|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 8]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      8|	} else {\
  |  |   39|      8|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      8|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      8|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 8]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      8|	}\
  |  |   42|      8|}
  ------------------
 4902|      8|	if (count) {
  ------------------
  |  Branch (4902:6): [True: 4, False: 4]
  ------------------
 4903|      4|		GF_ChildNodeItem *last = NULL;
 4904|      4|		count = lsr_read_vluimsbf5(lsr, "occ0");
 4905|     14|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (4905:13): [True: 14, False: 0]
  ------------------
 4906|     14|			GF_Node *n;
 4907|     14|			if (lsr->last_error) return;
  ------------------
  |  Branch (4907:8): [True: 4, False: 10]
  ------------------
 4908|     10|			n = lsr_read_scene_content_model(lsr, elt);
 4909|     10|			if (n) {
  ------------------
  |  Branch (4909:8): [True: 8, False: 2]
  ------------------
 4910|      8|				gf_node_register(n, (GF_Node*)elt);
 4911|      8|				gf_node_list_add_child_last(&elt->children, n, &last);
 4912|      8|				GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] ############## end %s ###########\n", gf_node_get_class_name(n)));
  ------------------
  |  | 1086|      8|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 8]
  |  |  ------------------
  ------------------
 4913|      8|			} else {
 4914|       |				/*either error or text content*/
 4915|      2|			}
 4916|     10|		}
 4917|      4|	}
 4918|      4|	if (!skip_init) gf_node_init((GF_Node*)elt);
  ------------------
  |  Branch (4918:6): [True: 0, False: 4]
  ------------------
 4919|      4|}
lsr_dec.c:lsr_read_animateMotion:
 3592|      2|{
 3593|      2|	Bool flag;
 3594|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_animateMotion);
 3595|      2|	lsr_read_id(lsr, elt);
 3596|      2|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      2|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3597|      2|	lsr_read_accumulate(lsr, elt);
 3598|      2|	lsr_read_additive(lsr, elt);
 3599|      2|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_by, "by");
  ------------------
  |  | 2908|      2|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 3600|      2|	lsr_read_calc_mode(lsr, elt);
 3601|      2|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_from, "from");
  ------------------
  |  | 2908|      2|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 3602|      2|	lsr_read_fraction_12(lsr, elt, TAG_SVG_ATT_keySplines, "keySplines");
 3603|      2|	lsr_read_fraction_12(lsr, elt, TAG_SVG_ATT_keyTimes, "keyTimes");
 3604|      2|	lsr_read_anim_values(lsr, elt);
  ------------------
  |  | 2909|      2|#define lsr_read_anim_values(_a, _b) lsr_read_anim_values_ex(_a, _b, NULL)
  ------------------
 3605|      2|	lsr_read_attribute_type(lsr, elt);
 3606|      2|	lsr_read_smil_times(lsr, elt, TAG_SVG_ATT_begin, NULL, "begin", 1);
 3607|      2|	lsr_read_duration(lsr, elt);
 3608|      2|	lsr_read_anim_fill(lsr, elt);
 3609|      2|	lsr_read_anim_repeatCount(lsr, elt);
 3610|      2|	lsr_read_repeat_duration(lsr, elt);
 3611|      2|	lsr_read_anim_restart(lsr, elt);
 3612|      2|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_to, "to");
  ------------------
  |  | 2908|      2|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 3613|      2|	lsr_read_float_list(lsr, elt, TAG_SVG_ATT_keyPoints, NULL, "keyPoints");
 3614|      2|	GF_LSR_READ_INT(lsr, flag, 1, "hasPath");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3615|      2|	if (flag) lsr_read_path_type(lsr, elt, TAG_SVG_ATT_path, NULL, "path");
  ------------------
  |  Branch (3615:6): [True: 1, False: 1]
  ------------------
 3616|       |
 3617|      2|	lsr_read_rotate_type(lsr, elt);
 3618|      2|	lsr_read_href(lsr, elt);
 3619|      2|	lsr_read_lsr_enabled(lsr, elt);
 3620|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3621|       |
 3622|      2|	if (!lsr_setup_smil_anim(lsr, (SVG_Element*)elt, parent)) {
  ------------------
  |  Branch (3622:6): [True: 0, False: 2]
  ------------------
 3623|      0|		gf_list_add(lsr->deferred_anims, elt);
 3624|      0|		lsr_read_group_content_post_init(lsr, (SVG_Element*)elt, 1);
 3625|      2|	} else {
 3626|      2|		lsr_read_group_content_post_init(lsr, (SVG_Element*)elt, 0);
 3627|      2|	}
 3628|      2|	return elt;
 3629|      2|}
lsr_dec.c:lsr_read_float_list:
 2950|      7|{
 2951|      7|	u32 i, count;
 2952|      7|	GF_LSR_READ_INT(lsr, count, 1, name);
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 2953|      7|	if (!count) return;
  ------------------
  |  Branch (2953:6): [True: 5, False: 2]
  ------------------
 2954|       |
 2955|      2|	if (!coords) {
  ------------------
  |  Branch (2955:6): [True: 2, False: 0]
  ------------------
 2956|      2|		GF_FieldInfo info;
 2957|      2|		lsr->last_error = gf_node_get_attribute_by_tag(n, tag, GF_TRUE, 0, &info);
 2958|      2|		coords = (SVG_Coordinates*)info.far_ptr;
 2959|      2|	} else {
 2960|      0|		while (gf_list_count(*coords)) {
  ------------------
  |  Branch (2960:10): [True: 0, False: 0]
  ------------------
 2961|      0|			Fixed *v = (Fixed *)gf_list_last(*coords);
 2962|      0|			gf_list_rem_last(*coords);
 2963|      0|			gf_free(v);
 2964|      0|		}
 2965|      0|	}
 2966|      2|	count = lsr_read_vluimsbf5(lsr, "count");
 2967|      2|	if (tag == TAG_SVG_ATT_text_rotate) {
  ------------------
  |  Branch (2967:6): [True: 2, False: 0]
  ------------------
 2968|    140|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (2968:13): [True: 138, False: 2]
  ------------------
 2969|    138|			SVG_Number *num = (SVG_Number *)gf_malloc(sizeof(SVG_Number));
 2970|    138|			if (!num) {
  ------------------
  |  Branch (2970:8): [True: 0, False: 138]
  ------------------
 2971|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2972|    138|			} else {
 2973|    138|				num->type = SVG_NUMBER_VALUE;
 2974|    138|				num->value = lsr_read_fixed_16_8(lsr, "val");
 2975|    138|				gf_list_add(*coords, num);
 2976|    138|			}
 2977|    138|			if (lsr->last_error) return;
  ------------------
  |  Branch (2977:8): [True: 0, False: 138]
  ------------------
 2978|    138|		}
 2979|      2|	}
 2980|      0|	else {
 2981|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (2981:13): [True: 0, False: 0]
  ------------------
 2982|      0|			Fixed *num = (Fixed *)gf_malloc(sizeof(Fixed));
 2983|      0|			if (!num) {
  ------------------
  |  Branch (2983:8): [True: 0, False: 0]
  ------------------
 2984|      0|				lsr->last_error = GF_OUT_OF_MEM;
 2985|      0|			} else {
 2986|      0|				*num = lsr_read_fixed_16_8(lsr, "val");
 2987|      0|			}
 2988|      0|			gf_list_add(*coords, num);
 2989|      0|			if (lsr->last_error) return;
  ------------------
  |  Branch (2989:8): [True: 0, False: 0]
  ------------------
 2990|      0|		}
 2991|      0|	}
 2992|      2|}
lsr_dec.c:lsr_read_rotate_type:
 3240|      2|{
 3241|      2|	u32 flag;
 3242|      2|	GF_LSR_READ_INT(lsr, flag, 1, "rotate");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3243|      2|	if (flag) {
  ------------------
  |  Branch (3243:6): [True: 0, False: 2]
  ------------------
 3244|      0|		GF_FieldInfo info;
 3245|      0|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_rotate, GF_TRUE, 0, &info);
 3246|      0|		GF_LSR_READ_INT(lsr, flag, 1, "choice");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 3247|       |
 3248|      0|		if (flag) {
  ------------------
  |  Branch (3248:7): [True: 0, False: 0]
  ------------------
 3249|      0|			GF_LSR_READ_INT(lsr, flag, 1, "rotate");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 3250|      0|			((SVG_Number *)info.far_ptr)->type = flag ? SVG_NUMBER_AUTO_REVERSE : SVG_NUMBER_AUTO;
  ------------------
  |  Branch (3250:41): [True: 0, False: 0]
  ------------------
 3251|      0|		} else {
 3252|      0|			((SVG_Number *)info.far_ptr)->value = lsr_read_fixed_16_8(lsr, "rotate");
 3253|      0|			((SVG_Number *)info.far_ptr)->type = SVG_NUMBER_VALUE;
 3254|      0|		}
 3255|      0|	}
 3256|      2|}
lsr_dec.c:lsr_read_animateTransform:
 3633|      2|{
 3634|      2|	u32 type;
 3635|      2|	u32 flag;
 3636|      2|	GF_FieldInfo info;
 3637|      2|	GF_Node *elt= gf_node_new(lsr->sg, TAG_SVG_animateTransform);
 3638|      2|	lsr_read_id(lsr, elt);
 3639|      2|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      2|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3640|      2|	lsr_read_attribute_name(lsr, elt);
 3641|       |
 3642|       |	/*enumeration rotate{0} scale{1} skewX{2} skewY{3} translate{4}*/
 3643|      2|	GF_LSR_READ_INT(lsr, flag, 3, "rotscatra");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3644|      2|	switch (flag) {
 3645|      0|	case 0:
  ------------------
  |  Branch (3645:2): [True: 0, False: 2]
  ------------------
 3646|      0|		type = SVG_TRANSFORM_ROTATE;
 3647|      0|		break;
 3648|      0|	case 1:
  ------------------
  |  Branch (3648:2): [True: 0, False: 2]
  ------------------
 3649|      0|		type = SVG_TRANSFORM_SCALE;
 3650|      0|		break;
 3651|      0|	case 2:
  ------------------
  |  Branch (3651:2): [True: 0, False: 2]
  ------------------
 3652|      0|		type = SVG_TRANSFORM_SKEWX;
 3653|      0|		break;
 3654|      1|	case 3:
  ------------------
  |  Branch (3654:2): [True: 1, False: 1]
  ------------------
 3655|      1|		type = SVG_TRANSFORM_SKEWY;
 3656|      1|		break;
 3657|      0|	case 4:
  ------------------
  |  Branch (3657:2): [True: 0, False: 2]
  ------------------
 3658|      0|		type = SVG_TRANSFORM_TRANSLATE;
 3659|      0|		break;
 3660|      1|	default:
  ------------------
  |  Branch (3660:2): [True: 1, False: 1]
  ------------------
 3661|      1|		type = SVG_TRANSFORM_ROTATE;
 3662|      1|		break;
 3663|      2|	}
 3664|      2|	if (gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_transform_type, 1, 0, &info)==GF_OK) {
  ------------------
  |  Branch (3664:6): [True: 2, False: 0]
  ------------------
 3665|      2|		*(SVG_TransformType *)info.far_ptr = type;
 3666|      2|	}
 3667|       |
 3668|      2|	lsr_read_accumulate(lsr, elt);
 3669|      2|	lsr_read_additive(lsr, elt);
 3670|      2|	lsr_read_anim_value_ex(lsr, elt, TAG_SVG_ATT_by, "by", &type);
 3671|      2|	lsr_read_calc_mode(lsr, elt);
 3672|      2|	lsr_read_anim_value_ex(lsr, elt, TAG_SVG_ATT_from, "from", &type);
 3673|      2|	lsr_read_fraction_12(lsr, elt, TAG_SVG_ATT_keySplines, "keySplines");
 3674|      2|	lsr_read_fraction_12(lsr, elt, TAG_SVG_ATT_keyTimes, "keyTimes");
 3675|      2|	lsr_read_anim_values_ex(lsr, elt, &type);
 3676|      2|	lsr_read_attribute_type(lsr, elt);
 3677|       |
 3678|      2|	lsr_read_smil_times(lsr, elt, TAG_SVG_ATT_begin, NULL, "begin", 1);
 3679|      2|	lsr_read_duration(lsr, elt);
 3680|      2|	lsr_read_anim_fill(lsr, elt);
 3681|      2|	lsr_read_anim_repeatCount(lsr, elt);
 3682|      2|	lsr_read_repeat_duration(lsr, elt);
 3683|      2|	lsr_read_anim_restart(lsr, elt);
 3684|      2|	lsr_read_anim_value_ex(lsr, elt, TAG_SVG_ATT_to, "to", &type);
 3685|       |
 3686|      2|	lsr_read_href(lsr, elt);
 3687|      2|	lsr_read_lsr_enabled(lsr, elt);
 3688|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3689|       |
 3690|      2|	if (!lsr_setup_smil_anim(lsr, (SVG_Element*)elt, parent)) {
  ------------------
  |  Branch (3690:6): [True: 2, False: 0]
  ------------------
 3691|      2|		gf_list_add(lsr->deferred_anims, elt);
 3692|      2|		lsr_read_group_content_post_init(lsr, (SVG_Element*)elt, 1);
 3693|      2|	} else {
 3694|      0|		lsr_read_group_content(lsr, elt, 0);
 3695|      0|	}
 3696|      2|	return elt;
 3697|      2|}
lsr_dec.c:lsr_read_audio:
 3700|      5|{
 3701|      5|	GF_Node *elt= gf_node_new(lsr->sg, TAG_SVG_audio);
 3702|      5|	lsr_read_id(lsr, elt);
 3703|      5|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      5|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3704|      5|	lsr_read_smil_times(lsr, elt, TAG_SVG_ATT_begin, NULL, "begin", 1);
 3705|      5|	lsr_read_duration(lsr, elt);
 3706|      5|	lsr_read_eRR(lsr, elt);
 3707|      5|	lsr_read_anim_repeatCount(lsr, elt);
 3708|      5|	lsr_read_repeat_duration(lsr, elt);
 3709|      5|	lsr_read_anim_restart(lsr, elt);
 3710|      5|	lsr_read_sync_behavior(lsr, elt);
 3711|      5|	lsr_read_sync_tolerance(lsr, elt);
 3712|      5|	lsr_read_content_type(lsr, elt);
 3713|      5|	lsr_read_href(lsr, elt);
 3714|       |
 3715|      5|	lsr_read_clip_time(lsr, elt, TAG_SVG_ATT_clipBegin, "clipBegin");
 3716|      5|	lsr_read_clip_time(lsr, elt, TAG_SVG_ATT_clipEnd, "clipEnd");
 3717|      5|	lsr_read_sync_reference(lsr, elt);
 3718|      5|	lsr_read_any_attribute(lsr, elt, 1);
 3719|      5|	lsr_read_group_content(lsr, elt, 0);
 3720|      5|	return elt;
 3721|      5|}
lsr_dec.c:lsr_read_sync_behavior:
 3258|      7|{
 3259|      7|	u32 flag;
 3260|      7|	GF_LSR_READ_INT(lsr, flag, 1, "syncBehavior");
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 3261|      7|	if (flag) {
  ------------------
  |  Branch (3261:6): [True: 4, False: 3]
  ------------------
 3262|      4|		GF_FieldInfo info;
 3263|      4|		GF_LSR_READ_INT(lsr, flag, 2, "syncBehavior");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 3264|      4|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_syncBehavior, GF_TRUE, 0, &info);
 3265|      4|		*(SMIL_SyncBehavior*)info.far_ptr = flag + 1;
 3266|      4|	}
 3267|      7|}
lsr_dec.c:lsr_read_sync_tolerance:
 3269|      7|{
 3270|      7|	u32 flag;
 3271|      7|	GF_LSR_READ_INT(lsr, flag, 1, "syncTolerance");
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 3272|      7|	if (flag) {
  ------------------
  |  Branch (3272:6): [True: 3, False: 4]
  ------------------
 3273|      3|		GF_FieldInfo info;
 3274|      3|		GF_LSR_READ_INT(lsr, flag, 1, "syncTolerance");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 3275|      3|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_syncTolerance, GF_TRUE, 0, &info);
 3276|      3|		if (flag) ((SMIL_SyncTolerance *)info.far_ptr)->type = SMIL_SYNCTOLERANCE_DEFAULT;
  ------------------
  |  Branch (3276:7): [True: 1, False: 2]
  ------------------
 3277|      2|		else {
 3278|      2|			u32 v = lsr_read_vluimsbf5(lsr, "value");
 3279|      2|			((SMIL_SyncTolerance *)info.far_ptr)->value = INT2FIX(v);
  ------------------
  |  |  119|      2|#define INT2FIX(v)		((Float) (v))
  ------------------
 3280|      2|			((SMIL_SyncTolerance *)info.far_ptr)->value /= lsr->time_resolution;
 3281|      2|		}
 3282|      3|	}
 3283|      7|}
lsr_dec.c:lsr_read_content_type:
 3363|      9|{
 3364|      9|	u32 flag;
 3365|      9|	GF_LSR_READ_INT(lsr, flag, 1, "hasType");
  ------------------
  |  |   34|      9|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      9|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 9]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      9|	} else {\
  |  |   39|      9|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      9|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      9|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 9]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      9|	}\
  |  |   42|      9|}
  ------------------
 3366|      9|	if (flag) {
  ------------------
  |  Branch (3366:6): [True: 2, False: 7]
  ------------------
 3367|      2|		GF_FieldInfo info;
 3368|      2|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_type, GF_TRUE, 0, &info);
 3369|      2|		lsr_read_byte_align_string(lsr, info.far_ptr, "type");
 3370|      2|	}
 3371|      9|}
lsr_dec.c:lsr_read_clip_time:
 3434|     14|{
 3435|     14|	GF_FieldInfo info;
 3436|     14|	u32 flag;
 3437|     14|	GF_LSR_READ_INT(lsr, flag, 1, name);
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 3438|     14|	if (flag) {
  ------------------
  |  Branch (3438:6): [True: 6, False: 8]
  ------------------
 3439|      6|		lsr->last_error = gf_node_get_attribute_by_tag(elt, tag, 1, 0, &info);
 3440|      6|		GF_LSR_READ_INT(lsr, flag, 1, "isEnum");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 3441|      6|		if (!flag) {
  ------------------
  |  Branch (3441:7): [True: 3, False: 3]
  ------------------
 3442|      3|			GF_LSR_READ_INT(lsr, flag, 1, "sign");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 3443|      3|			flag = lsr_read_vluimsbf5(lsr, "val");
 3444|      3|			*((SVG_Clock *)info.far_ptr) = flag;
 3445|      3|			*((SVG_Clock *)info.far_ptr) /= lsr->time_resolution;
 3446|      3|		}
 3447|      6|	}
 3448|     14|}
lsr_dec.c:lsr_read_sync_reference:
 3285|      7|{
 3286|      7|	u32 flag;
 3287|      7|	GF_LSR_READ_INT(lsr, flag, 1, "hasSyncReference");
  ------------------
  |  |   34|      7|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      7|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 7]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      7|	} else {\
  |  |   39|      7|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      7|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      7|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 7]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      7|	}\
  |  |   42|      7|}
  ------------------
 3288|      7|	if (flag) {
  ------------------
  |  Branch (3288:6): [True: 3, False: 4]
  ------------------
 3289|      3|		GF_FieldInfo info;
 3290|      3|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_syncReference, GF_TRUE, 0, &info);
 3291|      3|		lsr_read_any_uri(lsr, info.far_ptr, "syncReference");
 3292|      3|	}
 3293|      7|}
lsr_dec.c:lsr_read_circle:
 3723|      2|{
 3724|      2|	GF_Node *elt= gf_node_new(lsr->sg, TAG_SVG_circle);
 3725|      2|	lsr_read_id(lsr, elt);
 3726|      2|	lsr_read_rare_full(lsr, elt);
 3727|      2|	lsr_read_fill(lsr, elt);
 3728|      2|	lsr_read_stroke(lsr, elt);
 3729|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_cx, 1, "cx");
 3730|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_cy, 1, "cy");
 3731|      2|	lsr_read_coordinate_ptr(lsr, elt,TAG_SVG_ATT_r, 0, "r");
 3732|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3733|      2|	lsr_read_group_content(lsr, elt, 0);
 3734|      2|	return elt;
 3735|      2|}
lsr_dec.c:lsr_read_defs:
 3775|      2|{
 3776|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_defs);
 3777|      2|	lsr_read_id(lsr, elt);
 3778|      2|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      2|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3779|      2|	lsr_read_fill(lsr, elt);
 3780|      2|	lsr_read_stroke(lsr, elt);
 3781|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3782|      2|	lsr_read_group_content(lsr, elt, 0);
 3783|      2|	return elt;
 3784|      2|}
lsr_dec.c:lsr_read_data:
 3765|     45|{
 3766|     45|	GF_Node *elt = gf_node_new(lsr->sg, node_tag);
 3767|     45|	lsr_read_id(lsr, elt);
 3768|     45|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|     45|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3769|     45|	lsr_read_any_attribute(lsr, elt, 1);
 3770|     45|	lsr_read_group_content(lsr, elt, 0);
 3771|     45|	return elt;
 3772|     45|}
lsr_dec.c:lsr_read_ellipse:
 3786|      1|{
 3787|      1|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_ellipse);
 3788|      1|	lsr_read_id(lsr, elt);
 3789|      1|	lsr_read_rare_full(lsr, elt);
 3790|      1|	lsr_read_fill(lsr, elt);
 3791|      1|	lsr_read_stroke(lsr, elt);
 3792|      1|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_cx, 1, "cx");
 3793|      1|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_cy, 1, "cy");
 3794|      1|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_rx, 0, "rx");
 3795|      1|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_ry, 0, "ry");
 3796|      1|	lsr_read_any_attribute(lsr, elt, 1);
 3797|      1|	lsr_read_group_content(lsr, elt, 0);
 3798|      1|	return elt;
 3799|      1|}
lsr_dec.c:lsr_read_foreignObject:
 3801|      2|{
 3802|      2|	u32 flag;
 3803|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_foreignObject);
 3804|      2|	lsr_read_id(lsr, elt);
 3805|      2|	lsr_read_rare_full(lsr, elt);
 3806|      2|	lsr_read_fill(lsr, elt);
 3807|      2|	lsr_read_stroke(lsr, elt);
 3808|      2|	lsr_read_eRR(lsr, elt);
 3809|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_height, 0, "height");
 3810|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_width, 0, "width");
 3811|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x, 1, "x");
 3812|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 3813|       |
 3814|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3815|       |	/*	TODO
 3816|       |		bit(1) opt_group;
 3817|       |		if(opt_group) {
 3818|       |			vluimsbf5 occ1;
 3819|       |			for(int t=0;t<occ1;t++) {
 3820|       |				privateElementContainer child0[[t]];
 3821|       |			}
 3822|       |		}
 3823|       |	*/
 3824|      2|	GF_LSR_READ_INT(lsr, flag, 1, "opt_group");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3825|      2|	return elt;
 3826|      2|}
lsr_dec.c:lsr_read_g:
 3830|      5|{
 3831|      5|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_g);
 3832|      5|	if (is_same) {
  ------------------
  |  Branch (3832:6): [True: 2, False: 3]
  ------------------
 3833|      2|		if (lsr->prev_g) {
  ------------------
  |  Branch (3833:7): [True: 2, False: 0]
  ------------------
 3834|      2|			lsr_restore_base(lsr, (SVG_Element*) elt, lsr->prev_g, 0, 0);
 3835|      2|		} else {
 3836|      0|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] sameg coded in bitstream but no g defined !\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3837|      0|		}
 3838|      2|		lsr_read_id(lsr, elt);
 3839|      3|	} else {
 3840|      3|		lsr_read_id(lsr, elt);
 3841|      3|		lsr_read_rare_full(lsr, elt);
 3842|      3|		lsr_read_fill(lsr, elt);
 3843|      3|		lsr_read_stroke(lsr, elt);
 3844|      3|		lsr_read_eRR(lsr, elt);
 3845|      3|		lsr_read_any_attribute(lsr, elt, 1);
 3846|      3|		lsr->prev_g = (SVG_Element*)elt;
 3847|      3|	}
 3848|      5|	lsr_read_group_content(lsr, elt, is_same);
 3849|      5|	return elt;
 3850|      5|}
lsr_dec.c:lsr_restore_base:
  987|     20|{
  988|     20|	GF_Err e;
  989|     20|	GF_FieldInfo f_base, f_clone;
  990|     20|	SVGAttribute *att;
  991|       |
  992|       |	/*clone all propertie from base*/
  993|     20|	att = base->attributes;
  994|    154|	while (att) {
  ------------------
  |  Branch (994:9): [True: 134, False: 20]
  ------------------
  995|    134|		Bool is_fill, is_stroke;
  996|    134|		is_fill = is_stroke = GF_FALSE;
  997|    134|		switch (att->tag) {
  998|       |		/*for all properties*/
  999|     10|		case TAG_SVG_ATT_fill:
  ------------------
  |  Branch (999:3): [True: 10, False: 124]
  ------------------
 1000|     10|			is_fill = GF_TRUE;
 1001|     10|			break;
 1002|      5|		case TAG_SVG_ATT_stroke:
  ------------------
  |  Branch (1002:3): [True: 5, False: 129]
  ------------------
 1003|      5|			is_stroke = GF_TRUE;
 1004|      5|			break;
 1005|      2|		case TAG_SVG_ATT_audio_level:
  ------------------
  |  Branch (1005:3): [True: 2, False: 132]
  ------------------
 1006|      5|		case TAG_SVG_ATT_color:
  ------------------
  |  Branch (1006:3): [True: 3, False: 131]
  ------------------
 1007|      6|		case TAG_SVG_ATT_color_rendering:
  ------------------
  |  Branch (1007:3): [True: 1, False: 133]
  ------------------
 1008|      6|		case TAG_SVG_ATT_display:
  ------------------
  |  Branch (1008:3): [True: 0, False: 134]
  ------------------
 1009|      6|		case TAG_SVG_ATT_display_align:
  ------------------
  |  Branch (1009:3): [True: 0, False: 134]
  ------------------
 1010|      8|		case TAG_SVG_ATT_fill_opacity:
  ------------------
  |  Branch (1010:3): [True: 2, False: 132]
  ------------------
 1011|      8|		case TAG_SVG_ATT_fill_rule:
  ------------------
  |  Branch (1011:3): [True: 0, False: 134]
  ------------------
 1012|     10|		case TAG_SVG_ATT_font_family:
  ------------------
  |  Branch (1012:3): [True: 2, False: 132]
  ------------------
 1013|     11|		case TAG_SVG_ATT_font_size:
  ------------------
  |  Branch (1013:3): [True: 1, False: 133]
  ------------------
 1014|     12|		case TAG_SVG_ATT_font_style:
  ------------------
  |  Branch (1014:3): [True: 1, False: 133]
  ------------------
 1015|     12|		case TAG_SVG_ATT_font_variant:
  ------------------
  |  Branch (1015:3): [True: 0, False: 134]
  ------------------
 1016|     16|		case TAG_SVG_ATT_font_weight:
  ------------------
  |  Branch (1016:3): [True: 4, False: 130]
  ------------------
 1017|     22|		case TAG_SVG_ATT_image_rendering:
  ------------------
  |  Branch (1017:3): [True: 6, False: 128]
  ------------------
 1018|     22|		case TAG_SVG_ATT_line_increment:
  ------------------
  |  Branch (1018:3): [True: 0, False: 134]
  ------------------
 1019|     22|		case TAG_SVG_ATT_opacity:
  ------------------
  |  Branch (1019:3): [True: 0, False: 134]
  ------------------
 1020|     22|		case TAG_SVG_ATT_pointer_events:
  ------------------
  |  Branch (1020:3): [True: 0, False: 134]
  ------------------
 1021|     22|		case TAG_SVG_ATT_shape_rendering:
  ------------------
  |  Branch (1021:3): [True: 0, False: 134]
  ------------------
 1022|     27|		case TAG_SVG_ATT_solid_color:
  ------------------
  |  Branch (1022:3): [True: 5, False: 129]
  ------------------
 1023|     28|		case TAG_SVG_ATT_solid_opacity:
  ------------------
  |  Branch (1023:3): [True: 1, False: 133]
  ------------------
 1024|     30|		case TAG_SVG_ATT_stop_color:
  ------------------
  |  Branch (1024:3): [True: 2, False: 132]
  ------------------
 1025|     32|		case TAG_SVG_ATT_stop_opacity:
  ------------------
  |  Branch (1025:3): [True: 2, False: 132]
  ------------------
 1026|     32|		case TAG_SVG_ATT_stroke_dasharray:
  ------------------
  |  Branch (1026:3): [True: 0, False: 134]
  ------------------
 1027|     32|		case TAG_SVG_ATT_stroke_dashoffset:
  ------------------
  |  Branch (1027:3): [True: 0, False: 134]
  ------------------
 1028|     33|		case TAG_SVG_ATT_stroke_linecap:
  ------------------
  |  Branch (1028:3): [True: 1, False: 133]
  ------------------
 1029|     33|		case TAG_SVG_ATT_stroke_linejoin:
  ------------------
  |  Branch (1029:3): [True: 0, False: 134]
  ------------------
 1030|     34|		case TAG_SVG_ATT_stroke_miterlimit:
  ------------------
  |  Branch (1030:3): [True: 1, False: 133]
  ------------------
 1031|     35|		case TAG_SVG_ATT_stroke_opacity:
  ------------------
  |  Branch (1031:3): [True: 1, False: 133]
  ------------------
 1032|     37|		case TAG_SVG_ATT_stroke_width:
  ------------------
  |  Branch (1032:3): [True: 2, False: 132]
  ------------------
 1033|     37|		case TAG_SVG_ATT_text_align:
  ------------------
  |  Branch (1033:3): [True: 0, False: 134]
  ------------------
 1034|     42|		case TAG_SVG_ATT_text_anchor:
  ------------------
  |  Branch (1034:3): [True: 5, False: 129]
  ------------------
 1035|     45|		case TAG_SVG_ATT_text_rendering:
  ------------------
  |  Branch (1035:3): [True: 3, False: 131]
  ------------------
 1036|     47|		case TAG_SVG_ATT_vector_effect:
  ------------------
  |  Branch (1036:3): [True: 2, False: 132]
  ------------------
 1037|     50|		case TAG_SVG_ATT_viewport_fill:
  ------------------
  |  Branch (1037:3): [True: 3, False: 131]
  ------------------
 1038|     50|		case TAG_SVG_ATT_viewport_fill_opacity:
  ------------------
  |  Branch (1038:3): [True: 0, False: 134]
  ------------------
 1039|     52|		case TAG_SVG_ATT_visibility:
  ------------------
  |  Branch (1039:3): [True: 2, False: 132]
  ------------------
 1040|       |		/*and xml:_class*/
 1041|     52|		case TAG_SVG_ATT__class:
  ------------------
  |  Branch (1041:3): [True: 0, False: 134]
  ------------------
 1042|     52|		case TAG_SVG_ATT_externalResourcesRequired:
  ------------------
  |  Branch (1042:3): [True: 0, False: 134]
  ------------------
 1043|     52|			break;
 1044|       |
 1045|       |		/*pathLength for path*/
 1046|      1|		case TAG_SVG_ATT_pathLength:
  ------------------
  |  Branch (1046:3): [True: 1, False: 133]
  ------------------
 1047|      1|			break;
 1048|       |		/*rx & ry for rect*/
 1049|      2|		case TAG_SVG_ATT_rx:
  ------------------
  |  Branch (1049:3): [True: 2, False: 132]
  ------------------
 1050|      2|		case TAG_SVG_ATT_ry:
  ------------------
  |  Branch (1050:3): [True: 0, False: 134]
  ------------------
 1051|      2|			if (base->sgprivate->tag!=TAG_SVG_rect) {
  ------------------
  |  Branch (1051:8): [True: 0, False: 2]
  ------------------
 1052|      0|				att = att->next;
 1053|      0|				continue;
 1054|      0|			}
 1055|      2|			break;
 1056|       |		/*x & y for use*/
 1057|      4|		case TAG_SVG_ATT_x:
  ------------------
  |  Branch (1057:3): [True: 4, False: 130]
  ------------------
 1058|      8|		case TAG_SVG_ATT_y:
  ------------------
  |  Branch (1058:3): [True: 4, False: 130]
  ------------------
 1059|      8|			if (base->sgprivate->tag!=TAG_SVG_use) {
  ------------------
  |  Branch (1059:8): [True: 6, False: 2]
  ------------------
 1060|      6|				att = att->next;
 1061|      6|				continue;
 1062|      6|			}
 1063|      2|			break;
 1064|       |		/*editable & rotate for text*/
 1065|      4|		case TAG_SVG_ATT_editable:
  ------------------
  |  Branch (1065:3): [True: 4, False: 130]
  ------------------
 1066|      4|		case TAG_SVG_ATT_rotate:
  ------------------
  |  Branch (1066:3): [True: 0, False: 134]
  ------------------
 1067|      4|			if (base->sgprivate->tag!=TAG_SVG_text) {
  ------------------
  |  Branch (1067:8): [True: 0, False: 4]
  ------------------
 1068|      0|				att = att->next;
 1069|      0|				continue;
 1070|      0|			}
 1071|      4|			break;
 1072|      4|		case TAG_SVG_ATT_transform:
  ------------------
  |  Branch (1072:3): [True: 1, False: 133]
  ------------------
 1073|      1|			break;
 1074|     51|		default:
  ------------------
  |  Branch (1074:3): [True: 51, False: 83]
  ------------------
 1075|     51|			att = att->next;
 1076|     51|			continue;
 1077|    134|		}
 1078|       |		/*clone field*/
 1079|     77|		e = gf_node_get_attribute_by_tag((GF_Node*)elt, att->tag, GF_TRUE, GF_FALSE, &f_clone);
 1080|     77|		if (e) goto err_exit;
  ------------------
  |  Branch (1080:7): [True: 0, False: 77]
  ------------------
 1081|     77|		f_base.fieldIndex = att->tag;
 1082|     77|		f_base.fieldType = att->data_type;
 1083|     77|		f_base.far_ptr = att->data;
 1084|     77|		e = gf_svg_attributes_copy(&f_clone, &f_base, GF_FALSE);
 1085|     77|		if (e) goto err_exit;
  ------------------
  |  Branch (1085:7): [True: 0, False: 77]
  ------------------
 1086|       |
 1087|     77|		if (is_fill && reset_fill) {
  ------------------
  |  Branch (1087:7): [True: 10, False: 67]
  |  Branch (1087:18): [True: 1, False: 9]
  ------------------
 1088|      1|			SVG_Paint*p = (SVG_Paint*)f_clone.far_ptr;
 1089|      1|			if (p->iri.string) gf_free(p->iri.string);
  ------------------
  |  Branch (1089:8): [True: 0, False: 1]
  ------------------
 1090|      1|			memset(p, 0, sizeof(SVG_Paint));
 1091|      1|		}
 1092|     77|		if (is_stroke && reset_stroke) {
  ------------------
  |  Branch (1092:7): [True: 5, False: 72]
  |  Branch (1092:20): [True: 0, False: 5]
  ------------------
 1093|      0|			SVG_Paint*p = (SVG_Paint*)f_clone.far_ptr;
 1094|      0|			if (p->iri.string) gf_free(p->iri.string);
  ------------------
  |  Branch (1094:8): [True: 0, False: 0]
  ------------------
 1095|      0|			memset(p, 0, sizeof(SVG_Paint));
 1096|      0|		}
 1097|     77|		att = att->next;
 1098|     77|	}
 1099|     20|	return;
 1100|       |
 1101|     20|err_exit:
 1102|      0|	lsr->last_error = e;
 1103|      0|}
lsr_dec.c:lsr_read_image:
 3865|      2|{
 3866|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_image);
 3867|      2|	lsr_read_id(lsr, elt);
 3868|      2|	lsr_read_rare_full(lsr, elt);
 3869|      2|	lsr_read_eRR(lsr, elt);
 3870|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_height, 1, "height");
 3871|      2|	lsr_read_opacity(lsr, elt);
 3872|       |
 3873|      2|	lsr_read_preserve_aspect_ratio(lsr, elt);
 3874|      2|	lsr_read_content_type(lsr, elt);
 3875|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_width, 1, "width");
 3876|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x, 1, "x");
 3877|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 3878|      2|	lsr_read_href(lsr, elt);
 3879|      2|	lsr_read_transform_behavior(lsr, elt);
 3880|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3881|      2|	lsr_read_group_content(lsr, elt, 0);
 3882|      2|	return elt;
 3883|      2|}
lsr_dec.c:lsr_read_opacity:
 3853|      2|{
 3854|      2|	u32 flag;
 3855|      2|	GF_FieldInfo info;
 3856|      2|	GF_LSR_READ_INT(lsr, flag, 1, "opacity");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3857|      2|	if (flag) {
  ------------------
  |  Branch (3857:6): [True: 2, False: 0]
  ------------------
 3858|      2|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_opacity, 1, 0, &info);
 3859|      2|		((SVG_Number*)info.far_ptr)->type = SVG_NUMBER_VALUE;
 3860|      2|		((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_clamp(lsr, "opacity");
 3861|      2|	}
 3862|       |
 3863|      2|}
lsr_dec.c:lsr_read_preserve_aspect_ratio:
 3461|     18|{
 3462|     18|	GF_FieldInfo info;
 3463|     18|	u32 flag;
 3464|     18|	SVG_PreserveAspectRatio *par;
 3465|       |
 3466|     18|	GF_LSR_READ_INT(lsr, flag, 1, "hasPreserveAspectRatio");
  ------------------
  |  |   34|     18|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     18|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 18]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     18|	} else {\
  |  |   39|     18|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     18|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     18|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     18|	}\
  |  |   42|     18|}
  ------------------
 3467|     18|	if (!flag) return;
  ------------------
  |  Branch (3467:6): [True: 7, False: 11]
  ------------------
 3468|       |
 3469|     11|	lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_preserveAspectRatio, 1, 0, &info);
 3470|     11|	par = (SVG_PreserveAspectRatio *)info.far_ptr;
 3471|       |
 3472|     11|	GF_LSR_READ_INT(lsr, flag, 1, "choice (meetOrSlice)");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 3473|     11|	GF_LSR_READ_INT(lsr, par->defer, 1, "choice (defer)");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 3474|     11|	GF_LSR_READ_INT(lsr, flag, 4, "alignXandY");
  ------------------
  |  |   34|     11|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     11|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 11]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     11|	} else {\
  |  |   39|     11|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     11|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     11|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 11]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     11|	}\
  |  |   42|     11|}
  ------------------
 3475|     11|	switch (flag) {
 3476|      0|	case 1:
  ------------------
  |  Branch (3476:2): [True: 0, False: 11]
  ------------------
 3477|      0|		par->align = SVG_PRESERVEASPECTRATIO_XMAXYMAX;
 3478|      0|		break;
 3479|      1|	case 2:
  ------------------
  |  Branch (3479:2): [True: 1, False: 10]
  ------------------
 3480|      1|		par->align = SVG_PRESERVEASPECTRATIO_XMAXYMID;
 3481|      1|		break;
 3482|      0|	case 3:
  ------------------
  |  Branch (3482:2): [True: 0, False: 11]
  ------------------
 3483|      0|		par->align = SVG_PRESERVEASPECTRATIO_XMAXYMIN;
 3484|      0|		break;
 3485|      1|	case 4:
  ------------------
  |  Branch (3485:2): [True: 1, False: 10]
  ------------------
 3486|      1|		par->align = SVG_PRESERVEASPECTRATIO_XMIDYMAX;
 3487|      1|		break;
 3488|      0|	case 5:
  ------------------
  |  Branch (3488:2): [True: 0, False: 11]
  ------------------
 3489|      0|		par->align = SVG_PRESERVEASPECTRATIO_XMIDYMID;
 3490|      0|		break;
 3491|      3|	case 6:
  ------------------
  |  Branch (3491:2): [True: 3, False: 8]
  ------------------
 3492|      3|		par->align = SVG_PRESERVEASPECTRATIO_XMIDYMIN;
 3493|      3|		break;
 3494|      1|	case 7:
  ------------------
  |  Branch (3494:2): [True: 1, False: 10]
  ------------------
 3495|      1|		par->align = SVG_PRESERVEASPECTRATIO_XMINYMAX;
 3496|      1|		break;
 3497|      0|	case 8:
  ------------------
  |  Branch (3497:2): [True: 0, False: 11]
  ------------------
 3498|      0|		par->align = SVG_PRESERVEASPECTRATIO_XMINYMID;
 3499|      0|		break;
 3500|      0|	case 9:
  ------------------
  |  Branch (3500:2): [True: 0, False: 11]
  ------------------
 3501|      0|		par->align = SVG_PRESERVEASPECTRATIO_XMINYMIN;
 3502|      0|		break;
 3503|      5|	default:
  ------------------
  |  Branch (3503:2): [True: 5, False: 6]
  ------------------
 3504|      5|		par->align = SVG_PRESERVEASPECTRATIO_NONE;
 3505|      5|		break;
 3506|     11|	}
 3507|     11|}
lsr_dec.c:lsr_read_transform_behavior:
 3352|      4|{
 3353|      4|	GF_FieldInfo info;
 3354|      4|	u32 flag;
 3355|      4|	GF_LSR_READ_INT(lsr, flag, 1, "hasTransformBehavior");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 3356|      4|	if (flag) {
  ------------------
  |  Branch (3356:6): [True: 1, False: 3]
  ------------------
 3357|      1|		lsr->last_error = gf_node_get_attribute_by_tag(n, TAG_SVG_ATT_transformBehavior, GF_TRUE, 0, &info);
 3358|      1|		GF_LSR_READ_INT(lsr, *(SVG_TransformBehavior*)info.far_ptr, 4, "transformBehavior");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 3359|      1|	}
 3360|      4|}
lsr_dec.c:lsr_read_line:
 3885|      2|{
 3886|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_line);
 3887|       |
 3888|      2|	if (is_same) {
  ------------------
  |  Branch (3888:6): [True: 2, False: 0]
  ------------------
 3889|      2|		if (lsr->prev_line) {
  ------------------
  |  Branch (3889:7): [True: 0, False: 2]
  ------------------
 3890|      0|			lsr_restore_base(lsr, (SVG_Element*) elt, (SVG_Element *)lsr->prev_line, 0, 0);
 3891|      2|		} else {
 3892|      2|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] sameline coded in bitstream but no line defined !\n"));
  ------------------
  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3893|      2|		}
 3894|      2|		lsr_read_id(lsr, elt);
 3895|      2|	} else {
 3896|      0|		lsr_read_id(lsr, elt);
 3897|      0|		lsr_read_rare_full(lsr, elt);
 3898|      0|		lsr_read_fill(lsr, elt);
 3899|      0|		lsr_read_stroke(lsr, elt);
 3900|      0|	}
 3901|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x1, 1, "x1");
 3902|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x2, 0, "x2");
 3903|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y1, 1, "y1");
 3904|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y2, 0, "y2");
 3905|      2|	if (!is_same) {
  ------------------
  |  Branch (3905:6): [True: 0, False: 2]
  ------------------
 3906|      0|		lsr_read_any_attribute(lsr, elt, 1);
 3907|      0|		lsr->prev_line = (SVG_Element*)elt;
 3908|      0|	}
 3909|      2|	lsr_read_group_content(lsr, elt, is_same);
 3910|      2|	return elt;
 3911|      2|}
lsr_dec.c:lsr_read_linearGradient:
 3924|      2|{
 3925|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_linearGradient);
 3926|      2|	lsr_read_id(lsr, elt);
 3927|      2|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      2|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3928|      2|	lsr_read_fill(lsr, elt);
 3929|      2|	lsr_read_stroke(lsr, elt);
 3930|      2|	lsr_read_gradient_units(lsr, elt);
 3931|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x1, 1, "x1");
 3932|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x2, 1, "x2");
 3933|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y1, 1, "y1");
 3934|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y2, 1, "y2");
 3935|      2|	lsr_read_any_attribute(lsr, elt, 1);
 3936|      2|	lsr_read_group_content(lsr, elt, 0);
 3937|      2|	return elt;
 3938|      2|}
lsr_dec.c:lsr_read_gradient_units:
 3914|      4|{
 3915|      4|	u32 flag;
 3916|      4|	GF_FieldInfo info;
 3917|      4|	GF_LSR_READ_INT(lsr, flag, 1, "hasGradientUnits");
  ------------------
  |  |   34|      4|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      4|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 4]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      4|	} else {\
  |  |   39|      4|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      4|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      4|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 4]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      4|	}\
  |  |   42|      4|}
  ------------------
 3918|      4|	if (flag) {
  ------------------
  |  Branch (3918:6): [True: 2, False: 2]
  ------------------
 3919|      2|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_gradientUnits, 1, 0, &info);
 3920|      2|		GF_LSR_READ_INT(lsr, *(SVG_GradientUnit*)info.far_ptr, 1, "gradientUnits");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 3921|      2|	}
 3922|      4|}
lsr_dec.c:lsr_read_mpath:
 3940|      1|{
 3941|      1|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_mpath);
 3942|      1|	lsr_read_id(lsr, elt);
 3943|      1|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      1|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 3944|      1|	lsr_read_href(lsr, elt);
 3945|      1|	lsr_read_any_attribute(lsr, elt, 1);
 3946|      1|	lsr_read_group_content(lsr, elt, 0);
 3947|      1|	return elt;
 3948|      1|}
lsr_dec.c:lsr_read_path:
 3950|      7|{
 3951|      7|	u32 flag;
 3952|      7|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_path);
 3953|       |
 3954|      7|	if (same_type) {
  ------------------
  |  Branch (3954:6): [True: 4, False: 3]
  ------------------
 3955|      4|		if (lsr->prev_path) {
  ------------------
  |  Branch (3955:7): [True: 2, False: 2]
  ------------------
 3956|      2|			lsr_restore_base(lsr, (SVG_Element*)elt, (SVG_Element *)lsr->prev_path, (same_type==2) ? 1 : 0, 0);
  ------------------
  |  Branch (3956:76): [True: 1, False: 1]
  ------------------
 3957|      2|		} else {
 3958|      2|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] samepath coded in bitstream but no path defined !\n"));
  ------------------
  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3959|      2|		}
 3960|      4|		lsr_read_id(lsr, elt);
 3961|      4|		if (same_type==2) lsr_read_fill(lsr, elt);
  ------------------
  |  Branch (3961:7): [True: 3, False: 1]
  ------------------
 3962|      4|		lsr_read_path_type(lsr, elt, TAG_SVG_ATT_d, NULL, "d");
 3963|      4|	} else {
 3964|      3|		lsr_read_id(lsr, elt);
 3965|      3|		lsr_read_rare_full(lsr, elt);
 3966|      3|		lsr_read_fill(lsr, elt);
 3967|      3|		lsr_read_stroke(lsr, elt);
 3968|      3|		lsr_read_path_type(lsr, elt, TAG_SVG_ATT_d, NULL, "d");
 3969|      3|		GF_LSR_READ_INT(lsr, flag, 1, "hasPathLength");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 3970|      3|		if (flag) {
  ------------------
  |  Branch (3970:7): [True: 1, False: 2]
  ------------------
 3971|      1|			GF_FieldInfo info;
 3972|      1|			lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_pathLength, 1, 0, &info);
 3973|      1|			((SVG_Number*)info.far_ptr)->value = lsr_read_fixed_16_8(lsr, "pathLength");
 3974|      1|		}
 3975|      3|		lsr_read_any_attribute(lsr, elt, 1);
 3976|      3|		lsr->prev_path = (SVG_Element*)elt;
 3977|      3|	}
 3978|      7|	lsr_read_group_content(lsr, elt, same_type);
 3979|      7|	return elt;
 3980|      7|}
lsr_dec.c:lsr_read_polygon:
 3982|     11|{
 3983|     11|	GF_FieldInfo info;
 3984|     11|	GF_Node *elt = gf_node_new(lsr->sg, is_polyline ? TAG_SVG_polyline : TAG_SVG_polygon);
  ------------------
  |  Branch (3984:38): [True: 6, False: 5]
  ------------------
 3985|       |
 3986|     11|	lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_points, 1, 0, &info);
 3987|       |
 3988|     11|	if (same_type) {
  ------------------
  |  Branch (3988:6): [True: 8, False: 3]
  ------------------
 3989|      8|		if (lsr->prev_polygon) {
  ------------------
  |  Branch (3989:7): [True: 6, False: 2]
  ------------------
 3990|      6|			lsr_restore_base(lsr, (SVG_Element*)elt, (SVG_Element *)lsr->prev_polygon, /*(same_type==2) ? 1 : */ 0, /*(same_type==3) ? 1 : */ 0);
 3991|      6|		} else {
 3992|      2|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] samepolyXXX coded in bitstream but no polyXXX defined !\n"));
  ------------------
  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 3993|      2|		}
 3994|      8|		lsr_read_id(lsr, elt);
 3995|      8|		if (same_type==2) lsr_read_fill(lsr, elt);
  ------------------
  |  Branch (3995:7): [True: 2, False: 6]
  ------------------
 3996|      6|		else if (same_type==3) lsr_read_stroke(lsr, elt);
  ------------------
  |  Branch (3996:12): [True: 2, False: 4]
  ------------------
 3997|      8|		lsr_read_point_sequence(lsr, *(GF_List**)info.far_ptr, "points");
 3998|      8|	} else {
 3999|      3|		lsr_read_id(lsr, elt);
 4000|      3|		lsr_read_rare_full(lsr, elt);
 4001|      3|		lsr_read_fill(lsr, elt);
 4002|      3|		lsr_read_stroke(lsr, elt);
 4003|      3|		lsr_read_point_sequence(lsr, *(GF_List**)info.far_ptr, "points");
 4004|      3|		lsr_read_any_attribute(lsr, elt, 1);
 4005|      3|		lsr->prev_polygon = (SVG_Element*)elt;
 4006|      3|	}
 4007|     11|	lsr_read_group_content(lsr, elt, same_type);
 4008|     11|	return elt;
 4009|     11|}
lsr_dec.c:lsr_read_radialGradient:
 4011|      2|{
 4012|      2|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_radialGradient);
 4013|      2|	lsr_read_id(lsr, elt);
 4014|      2|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      2|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 4015|      2|	lsr_read_fill(lsr, elt);
 4016|      2|	lsr_read_stroke(lsr, elt);
 4017|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_cx, 1, "cx");
 4018|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_cy, 1, "cy");
 4019|      2|	lsr_read_gradient_units(lsr, elt);
 4020|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_r, 1, "r");
 4021|      2|	lsr_read_any_attribute(lsr, elt, 1);
 4022|      2|	lsr_read_group_content(lsr, elt, 0);
 4023|      2|	return elt;
 4024|      2|}
lsr_dec.c:lsr_read_rect:
 4026|     15|{
 4027|     15|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_rect);
 4028|       |
 4029|     15|	if (same_type) {
  ------------------
  |  Branch (4029:6): [True: 10, False: 5]
  ------------------
 4030|     10|		if (lsr->prev_rect) {
  ------------------
  |  Branch (4030:7): [True: 5, False: 5]
  ------------------
 4031|      5|			lsr_restore_base(lsr, (SVG_Element*)elt, (SVG_Element *)lsr->prev_rect, (same_type==2) ? 1 : 0, 0);
  ------------------
  |  Branch (4031:76): [True: 0, False: 5]
  ------------------
 4032|      5|		} else {
 4033|      5|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] samerect coded in bitstream but no rect defined !\n"));
  ------------------
  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  ------------------
  ------------------
 4034|      5|		}
 4035|     10|		lsr_read_id(lsr, elt);
 4036|     10|		if (same_type==2) lsr_read_fill(lsr, elt);
  ------------------
  |  Branch (4036:7): [True: 1, False: 9]
  ------------------
 4037|     10|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_height, 0, "height");
 4038|     10|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_width, 0, "width");
 4039|     10|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x, 1, "x");
 4040|     10|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 4041|     10|	} else {
 4042|      5|		lsr_read_id(lsr, elt);
 4043|      5|		lsr_read_rare_full(lsr, elt);
 4044|      5|		lsr_read_fill(lsr, elt);
 4045|      5|		lsr_read_stroke(lsr, elt);
 4046|      5|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_height, 0, "height");
 4047|      5|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_rx, 1, "rx");
 4048|      5|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_ry, 1, "ry");
 4049|      5|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_width, 0, "width");
 4050|      5|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x, 1, "x");
 4051|      5|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 4052|      5|		lsr_read_any_attribute(lsr, elt, 1);
 4053|      5|		lsr->prev_rect = (SVG_Element*)elt;
 4054|      5|	}
 4055|     15|	lsr_read_group_content(lsr, elt, same_type);
 4056|     15|	return elt;
 4057|     15|}
lsr_dec.c:lsr_read_set:
 4123|      1|{
 4124|      1|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_set);
 4125|      1|	lsr_read_id(lsr, elt);
 4126|      1|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      1|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 4127|      1|	lsr_read_attribute_name(lsr, elt);
 4128|      1|	lsr_read_attribute_type(lsr, elt);
 4129|       |
 4130|      1|	lsr_read_smil_times(lsr, elt, TAG_SVG_ATT_begin, NULL, "begin", 1);
 4131|      1|	lsr_read_duration(lsr, elt);
 4132|      1|	lsr_read_anim_fill(lsr, elt);
 4133|      1|	lsr_read_anim_repeatCount(lsr, elt);
 4134|      1|	lsr_read_repeat_duration(lsr, elt);
 4135|      1|	lsr_read_anim_restart(lsr, elt);
 4136|      1|	lsr_read_anim_value(lsr, elt, TAG_SVG_ATT_to, "to");
  ------------------
  |  | 2908|      1|#define lsr_read_anim_value(_a, _b, _c, _d) lsr_read_anim_value_ex(_a, _b, _c, _d, NULL)
  ------------------
 4137|      1|	lsr_read_href(lsr, elt);
 4138|      1|	lsr_read_lsr_enabled(lsr, elt);
 4139|      1|	lsr_read_any_attribute(lsr, elt, 1);
 4140|       |
 4141|      1|	if (!lsr_setup_smil_anim(lsr, (SVG_Element*)elt, parent)) {
  ------------------
  |  Branch (4141:6): [True: 1, False: 0]
  ------------------
 4142|      1|		gf_list_add(lsr->deferred_anims, elt);
 4143|      1|		lsr_read_group_content_post_init(lsr, (SVG_Element*)elt, 1);
 4144|      1|	} else {
 4145|      0|		lsr_read_group_content(lsr, elt, 0);
 4146|      0|	}
 4147|      1|	return elt;
 4148|      1|}
lsr_dec.c:lsr_read_switch:
 4289|      3|{
 4290|      3|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_switch);
 4291|      3|	lsr_read_id(lsr, elt);
 4292|      3|	lsr_read_rare_full(lsr, elt);
 4293|      3|	lsr_read_fill(lsr, elt);
 4294|      3|	lsr_read_stroke(lsr, elt);
 4295|      3|	lsr_read_eRR(lsr, elt);
 4296|      3|	lsr_read_any_attribute(lsr, elt, 1);
 4297|      3|	lsr_read_group_content(lsr, elt, 0);
 4298|      3|	return elt;
 4299|      3|}
lsr_dec.c:lsr_read_text:
 4303|     10|{
 4304|     10|	u32 flag;
 4305|     10|	GF_FieldInfo info;
 4306|     10|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_text);
 4307|     10|	if (same_type) {
  ------------------
  |  Branch (4307:6): [True: 5, False: 5]
  ------------------
 4308|      5|		if (lsr->prev_text) {
  ------------------
  |  Branch (4308:7): [True: 4, False: 1]
  ------------------
 4309|      4|			lsr_restore_base(lsr, (SVG_Element *)elt, (SVG_Element *)lsr->prev_text, (same_type==2) ? 1 : 0, 0);
  ------------------
  |  Branch (4309:77): [True: 1, False: 3]
  ------------------
 4310|      4|		} else {
 4311|      1|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] sametext coded in bitstream but no text defined !\n"));
  ------------------
  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  ------------------
  ------------------
 4312|      1|		}
 4313|      5|		lsr_read_id(lsr, elt);
 4314|      5|		if (same_type==2) lsr_read_fill(lsr, elt);
  ------------------
  |  Branch (4314:7): [True: 1, False: 4]
  ------------------
 4315|      5|		lsr_read_coord_list(lsr, elt, TAG_SVG_ATT_text_x, "x");
 4316|      5|		lsr_read_coord_list(lsr, elt, TAG_SVG_ATT_text_y, "y");
 4317|      5|	} else {
 4318|      5|		lsr_read_id(lsr, elt);
 4319|      5|		lsr_read_rare_full(lsr, elt);
 4320|      5|		lsr_read_fill(lsr, elt);
 4321|      5|		lsr_read_stroke(lsr, elt);
 4322|       |
 4323|      5|		GF_LSR_READ_INT(lsr, flag, 1, "editable");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 4324|      5|		if (flag) {
  ------------------
  |  Branch (4324:7): [True: 4, False: 1]
  ------------------
 4325|      4|			lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_editable, 1, 0, &info);
 4326|      4|			*(SVG_Boolean*)info.far_ptr = flag;
 4327|      4|		}
 4328|       |		lsr_read_float_list(lsr, elt, TAG_SVG_ATT_text_rotate, NULL, "rotate");
 4329|      5|		lsr_read_coord_list(lsr, elt, TAG_SVG_ATT_text_x, "x");
 4330|      5|		lsr_read_coord_list(lsr, elt, TAG_SVG_ATT_text_y, "y");
 4331|      5|		lsr_read_any_attribute(lsr, elt, 1);
 4332|      5|		lsr->prev_text = (SVG_Element*)elt;
 4333|      5|	}
 4334|     10|	lsr_read_group_content(lsr, elt, same_type);
 4335|     10|	return elt;
 4336|     10|}
lsr_dec.c:lsr_read_coord_list:
 3326|     20|{
 3327|     20|	GF_FieldInfo info;
 3328|     20|	u32 i, count;
 3329|     20|	GF_LSR_READ_INT(lsr, count, 1, name);
  ------------------
  |  |   34|     20|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     20|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 20]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     20|	} else {\
  |  |   39|     20|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     20|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     20|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 20]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     20|	}\
  |  |   42|     20|}
  ------------------
 3330|     20|	if (!count) return;
  ------------------
  |  Branch (3330:6): [True: 11, False: 9]
  ------------------
 3331|      9|	count = lsr_read_vluimsbf5(lsr, "nb_coords");
 3332|      9|	if (!count || !lsr->coord_bits) return;
  ------------------
  |  Branch (3332:6): [True: 0, False: 9]
  |  Branch (3332:16): [True: 9, False: 0]
  ------------------
 3333|       |
 3334|      0|	lsr->last_error = gf_node_get_attribute_by_tag(elt, tag, GF_TRUE, 0, &info);
 3335|       |
 3336|      0|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (3336:12): [True: 0, False: 0]
  ------------------
 3337|      0|		u32 res;
 3338|      0|		SVG_Coordinate *f;
 3339|      0|		GF_SAFEALLOC(f, SVG_Coordinate );
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3340|      0|		if (!f) {
  ------------------
  |  Branch (3340:7): [True: 0, False: 0]
  ------------------
 3341|      0|			lsr->last_error = GF_OUT_OF_MEM;
 3342|      0|			return;
 3343|      0|		}
 3344|      0|		GF_LSR_READ_INT(lsr, res, lsr->coord_bits, name);
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 3345|      0|		f->value = lsr_translate_coords(lsr, res, lsr->coord_bits);
 3346|      0|		gf_list_add(*(SVG_Coordinates*)info.far_ptr, f);
 3347|      0|		if (lsr->last_error) return;
  ------------------
  |  Branch (3347:7): [True: 0, False: 0]
  ------------------
 3348|      0|	}
 3349|      0|}
lsr_dec.c:lsr_read_use:
 4351|      5|{
 4352|      5|	GF_FieldInfo info;
 4353|      5|	u32 flag;
 4354|      5|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_use);
 4355|      5|	if (is_same) {
  ------------------
  |  Branch (4355:6): [True: 3, False: 2]
  ------------------
 4356|      3|		if (lsr->prev_use) {
  ------------------
  |  Branch (4356:7): [True: 1, False: 2]
  ------------------
 4357|      1|			lsr_restore_base(lsr, (SVG_Element *)elt, lsr->prev_use, 0, 0);
 4358|      2|		} else {
 4359|      2|			GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[LASeR] sameuse coded in bitstream but no use defined !\n"));
  ------------------
  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  ------------------
  ------------------
 4360|      2|		}
 4361|      3|		lsr_read_id(lsr, elt);
 4362|      3|		lsr_read_href(lsr, elt);
 4363|      3|	} else {
 4364|      2|		lsr_read_id(lsr, elt);
 4365|      2|		lsr_read_rare_full(lsr, elt);
 4366|      2|		lsr_read_fill(lsr, elt);
 4367|      2|		lsr_read_stroke(lsr, elt);
 4368|      2|		lsr_read_eRR(lsr, elt);
 4369|       |
 4370|      2|		GF_LSR_READ_INT(lsr, flag, 1, "hasOverflow");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 4371|      2|		if (flag) {
  ------------------
  |  Branch (4371:7): [True: 1, False: 1]
  ------------------
 4372|      1|			lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_overflow, 1, 0, &info);
 4373|      1|			GF_LSR_READ_INT(lsr, *(SVG_Overflow*)info.far_ptr, 2, "overflow");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4374|      1|		}
 4375|      2|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x, 1, "x");
 4376|      2|		lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 4377|      2|		lsr_read_href(lsr, elt);
 4378|      2|		lsr_read_any_attribute(lsr, elt, 1);
 4379|      2|		lsr->prev_use = (SVG_Element*)elt;
 4380|      2|	}
 4381|      5|	lsr_read_group_content(lsr, elt, is_same);
 4382|      5|	return elt;
 4383|      5|}
lsr_dec.c:lsr_read_video:
 4386|      2|{
 4387|      2|	GF_FieldInfo info;
 4388|      2|	u32 flag;
 4389|      2|	GF_Node*elt = gf_node_new(lsr->sg, TAG_SVG_video);
 4390|      2|	lsr_read_id(lsr, elt);
 4391|      2|	lsr_read_rare_full(lsr, elt);
 4392|      2|	lsr_read_smil_times(lsr, elt, TAG_SVG_ATT_begin, NULL, "begin", 1);
 4393|      2|	lsr_read_duration(lsr, elt);
 4394|      2|	lsr_read_eRR(lsr, elt);
 4395|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_height, 1, "height");
 4396|      2|	GF_LSR_READ_INT(lsr, flag, 1, "hasOverlay");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 4397|      2|	if (flag) {
  ------------------
  |  Branch (4397:6): [True: 2, False: 0]
  ------------------
 4398|      2|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_overlay, 1, 1, &info);
 4399|      2|		GF_LSR_READ_INT(lsr, flag, 1, "choice");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 4400|      2|		if (flag) {
  ------------------
  |  Branch (4400:7): [True: 0, False: 2]
  ------------------
 4401|      0|			GF_LSR_READ_INT(lsr, *(SVG_Overlay*)info.far_ptr, 1, "choice");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 4402|      2|		} else {
 4403|      2|			char *str = NULL;
 4404|      2|			lsr_read_byte_align_string(lsr, & str, "overlayExt");
 4405|      2|			if (str) gf_free(str);
  ------------------
  |  Branch (4405:8): [True: 2, False: 0]
  ------------------
 4406|      2|		}
 4407|      2|	}
 4408|      2|	lsr_read_preserve_aspect_ratio(lsr, elt);
 4409|      2|	lsr_read_anim_repeatCount(lsr, elt);
 4410|      2|	lsr_read_repeat_duration(lsr, elt);
 4411|      2|	lsr_read_anim_restart(lsr, elt);
 4412|      2|	lsr_read_sync_behavior(lsr, elt);
 4413|      2|	lsr_read_sync_tolerance(lsr, elt);
 4414|      2|	lsr_read_transform_behavior(lsr, elt);
 4415|      2|	lsr_read_content_type(lsr, elt);
 4416|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_width, 1, "width");
 4417|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_x, 1, "x");
 4418|      2|	lsr_read_coordinate_ptr(lsr, elt, TAG_SVG_ATT_y, 1, "y");
 4419|      2|	lsr_read_href(lsr, elt);
 4420|       |
 4421|      2|	lsr_read_clip_time(lsr, elt, TAG_SVG_ATT_clipBegin, "clipBegin");
 4422|      2|	lsr_read_clip_time(lsr, elt, TAG_SVG_ATT_clipEnd, "clipEnd");
 4423|       |
 4424|      2|	GF_LSR_READ_INT(lsr, flag, 1, "hasFullscreen");
  ------------------
  |  |   34|      2|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      2|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 2]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      2|	} else {\
  |  |   39|      2|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      2|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      2|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 2]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      2|	}\
  |  |   42|      2|}
  ------------------
 4425|      2|	if (flag) {
  ------------------
  |  Branch (4425:6): [True: 0, False: 2]
  ------------------
 4426|      0|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_fullscreen, 1, 0, &info);
 4427|      0|		GF_LSR_READ_INT(lsr, *(SVG_Boolean *)info.far_ptr, 1, "fullscreen");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 4428|      0|	}
 4429|       |
 4430|      2|	lsr_read_sync_reference(lsr, elt);
 4431|      2|	lsr_read_any_attribute(lsr, elt, 1);
 4432|      2|	lsr_read_group_content(lsr, elt, 0);
 4433|      2|	return elt;
 4434|      2|}
lsr_dec.c:lsr_read_listener:
 4437|      1|{
 4438|      1|	u32 flag;
 4439|      1|	GF_FieldInfo info;
 4440|      1|	XMLEV_Event *ev = NULL;
 4441|      1|	XMLRI *observer, *target, *handler;
 4442|      1|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_listener);
 4443|       |
 4444|      1|	observer = target = handler = NULL;
 4445|       |
 4446|      1|	lsr_read_id(lsr, elt);
 4447|      1|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|      1|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 4448|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasDefaultAction");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4449|      1|	if (flag) {
  ------------------
  |  Branch (4449:6): [True: 1, False: 0]
  ------------------
 4450|      1|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_defaultAction, 1, 0, &info);
 4451|      1|		GF_LSR_READ_INT(lsr, *(XMLEV_DefaultAction*)info.far_ptr, 1, "defaultAction");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4452|      1|	}
 4453|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasEvent");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4454|      1|	if (flag) {
  ------------------
  |  Branch (4454:6): [True: 1, False: 0]
  ------------------
 4455|      1|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_event, 1, 0, &info);
 4456|      1|		lsr_read_event_type(lsr, info.far_ptr);
 4457|      1|		ev = info.far_ptr;
 4458|      1|	}
 4459|       |	/*create default handler but UNINITIALIZED*/
 4460|      1|	lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_handler, 1, 0, &info);
 4461|      1|	handler = info.far_ptr;
 4462|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasHandler");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4463|      1|	if (flag) {
  ------------------
  |  Branch (4463:6): [True: 1, False: 0]
  ------------------
 4464|      1|		lsr_read_any_uri(lsr, info.far_ptr, "handler");
 4465|      1|	}
 4466|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasObserver");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4467|       |	/*TODO double check spec here*/
 4468|      1|	if (flag) {
  ------------------
  |  Branch (4468:6): [True: 1, False: 0]
  ------------------
 4469|      1|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_observer, 1, 0, &info);
 4470|      1|		lsr_read_codec_IDREF(lsr, info.far_ptr, "observer");
 4471|      1|		observer = info.far_ptr;
 4472|      1|	}
 4473|       |
 4474|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasPhase");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4475|      1|	if (flag) {
  ------------------
  |  Branch (4475:6): [True: 0, False: 1]
  ------------------
 4476|      0|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_phase, 1, 0, &info);
 4477|      0|		GF_LSR_READ_INT(lsr, *(XMLEV_Phase*)info.far_ptr, 1, "phase");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 4478|      0|	}
 4479|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasPropagate");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4480|      1|	if (flag) {
  ------------------
  |  Branch (4480:6): [True: 0, False: 1]
  ------------------
 4481|      0|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_propagate, 1, 0, &info);
 4482|      0|		GF_LSR_READ_INT(lsr, *(XMLEV_Propagate*)info.far_ptr, 1, "propagate");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 4483|      0|	}
 4484|      1|	GF_LSR_READ_INT(lsr, flag, 1, "hasTarget");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 4485|      1|	if (flag) {
  ------------------
  |  Branch (4485:6): [True: 1, False: 0]
  ------------------
 4486|      1|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_XMLEV_ATT_target, 1, 0, &info);
 4487|      1|		lsr_read_codec_IDREF(lsr, info.far_ptr, "target");
 4488|      1|		target = info.far_ptr;
 4489|      1|	}
 4490|       |
 4491|      1|	lsr_read_lsr_enabled(lsr, elt);
 4492|      1|	lsr_read_any_attribute(lsr, elt, 1);
 4493|      1|	lsr_read_group_content(lsr, elt, 0);
 4494|       |
 4495|       |	/*register listener element*/
 4496|      1|	{
 4497|      1|		Bool post_pone = 0;
 4498|      1|		SVG_Element *par = NULL;
 4499|      1|		if (observer && observer->type == XMLRI_ELEMENTID) {
  ------------------
  |  Branch (4499:7): [True: 1, False: 0]
  |  Branch (4499:19): [True: 1, False: 0]
  ------------------
 4500|      1|			if (observer->target) par = observer->target;
  ------------------
  |  Branch (4500:8): [True: 0, False: 1]
  ------------------
 4501|      1|		}
 4502|      1|		if (!par && target && (target->type == XMLRI_ELEMENTID)) {
  ------------------
  |  Branch (4502:7): [True: 1, False: 0]
  |  Branch (4502:15): [True: 1, False: 0]
  |  Branch (4502:25): [True: 1, False: 0]
  ------------------
 4503|      1|			if (!target->target) post_pone = 1;
  ------------------
  |  Branch (4503:8): [True: 1, False: 0]
  ------------------
 4504|      0|			else par = target->target;
 4505|      1|		}
 4506|      1|		if (!handler->target && !handler->string) {
  ------------------
  |  Branch (4506:7): [True: 1, False: 0]
  |  Branch (4506:27): [True: 0, False: 1]
  ------------------
 4507|      0|			handler->type = XMLRI_ELEMENTID;
 4508|      0|			handler->target = parent;
 4509|      0|		}
 4510|       |		/*FIXME - double check with XML events*/
 4511|      1|		if (!par && !observer) {
  ------------------
  |  Branch (4511:7): [True: 1, False: 0]
  |  Branch (4511:15): [True: 0, False: 1]
  ------------------
 4512|       |			/*all non-UI get attched to root*/
 4513|      0|			if (ev && (ev->type > GF_EVENT_MOUSEWHEEL)
  ------------------
  |  Branch (4513:8): [True: 0, False: 0]
  |  Branch (4513:14): [True: 0, False: 0]
  ------------------
 4514|      0|				&& (ev->type!=GF_EVENT_MOUSEOUT)
  ------------------
  |  Branch (4514:8): [True: 0, False: 0]
  ------------------
 4515|      0|				&& (ev->type!=GF_EVENT_MOUSEOVER)
  ------------------
  |  Branch (4515:8): [True: 0, False: 0]
  ------------------
 4516|      0|			) {
 4517|      0|				par = (SVG_Element*) lsr->current_root;
 4518|      0|			}
 4519|      0|			else if (parent) par = parent;
  ------------------
  |  Branch (4519:13): [True: 0, False: 0]
  ------------------
 4520|      0|			else par = (SVG_Element*) lsr->current_root;
 4521|      0|		}
 4522|      1|		if (!par) post_pone = 1;
  ------------------
  |  Branch (4522:7): [True: 1, False: 0]
  ------------------
 4523|       |
 4524|      1|		if (post_pone) {
  ------------------
  |  Branch (4524:7): [True: 1, False: 0]
  ------------------
 4525|      1|			gf_list_add(lsr->deferred_listeners, elt);
 4526|      1|		} else {
 4527|      0|			if (!par) par = parent;
  ------------------
  |  Branch (4527:8): [True: 0, False: 0]
  ------------------
 4528|      0|			gf_node_dom_listener_add((GF_Node *)par, elt);
 4529|      0|		}
 4530|      1|	}
 4531|      1|	return elt;
 4532|      1|}
lsr_dec.c:lsr_read_value_with_units:
 3398|     28|{
 3399|     28|	s32 val;
 3400|     28|	GF_LSR_READ_INT(lsr, val, 32, name);
  ------------------
  |  |   34|     28|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     28|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 28]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     28|	} else {\
  |  |   39|     28|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     28|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     28|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     28|	}\
  |  |   42|     28|}
  ------------------
 3401|       |#ifdef GPAC_FIXED_POINT
 3402|       |	n->value = val << 8;
 3403|       |#else
 3404|     28|	n->value = INT2FIX(val) / (1<<8);
  ------------------
  |  |  119|     28|#define INT2FIX(v)		((Float) (v))
  ------------------
 3405|     28|#endif
 3406|     28|	GF_LSR_READ_INT(lsr, val, 3, "units");
  ------------------
  |  |   34|     28|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     28|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 28]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     28|	} else {\
  |  |   39|     28|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     28|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     28|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     28|	}\
  |  |   42|     28|}
  ------------------
 3407|     28|	switch (val) {
 3408|      1|	case 1:
  ------------------
  |  Branch (3408:2): [True: 1, False: 27]
  ------------------
 3409|      1|		n->type = SVG_NUMBER_IN;
 3410|      1|		break;
 3411|      3|	case 2:
  ------------------
  |  Branch (3411:2): [True: 3, False: 25]
  ------------------
 3412|      3|		n->type = SVG_NUMBER_CM;
 3413|      3|		break;
 3414|      0|	case 3:
  ------------------
  |  Branch (3414:2): [True: 0, False: 28]
  ------------------
 3415|      0|		n->type = SVG_NUMBER_MM;
 3416|      0|		break;
 3417|      0|	case 4:
  ------------------
  |  Branch (3417:2): [True: 0, False: 28]
  ------------------
 3418|      0|		n->type = SVG_NUMBER_PT;
 3419|      0|		break;
 3420|      0|	case 5:
  ------------------
  |  Branch (3420:2): [True: 0, False: 28]
  ------------------
 3421|      0|		n->type = SVG_NUMBER_PC;
 3422|      0|		break;
 3423|      6|	case 6:
  ------------------
  |  Branch (3423:2): [True: 6, False: 22]
  ------------------
 3424|      6|		n->type = SVG_NUMBER_PERCENTAGE;
 3425|      6|		break;
 3426|     18|	default:
  ------------------
  |  Branch (3426:2): [True: 18, False: 10]
  ------------------
 3427|     18|		n->type = SVG_NUMBER_VALUE;
 3428|     18|		break;
 3429|     28|	}
 3430|     28|}
lsr_dec.c:lsr_read_delete:
 5764|      3|{
 5765|      3|	GF_FieldInfo info;
 5766|      3|	s32 idx, att_type;
 5767|      3|	u32 type, idref;
 5768|       |
 5769|      3|	att_type = lsr_get_attribute_name(lsr);
 5770|       |
 5771|      3|	idx = -2;
 5772|      3|	GF_LSR_READ_INT(lsr, type, 1, "has_index");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 5773|      3|	if (type) idx = (s32) lsr_read_vluimsbf5(lsr, "index");
  ------------------
  |  Branch (5773:6): [True: 0, False: 3]
  ------------------
 5774|      3|	idref = lsr_read_codec_IDREF_command(lsr, "ref");
 5775|       |
 5776|      3|	lsr_read_any_attribute(lsr, NULL, 1);
 5777|      3|	if (com_list) {
  ------------------
  |  Branch (5777:6): [True: 0, False: 3]
  ------------------
 5778|      0|		GF_Command *com;
 5779|      0|		com = gf_sg_command_new(lsr->sg, GF_SG_LSR_DELETE);
 5780|      0|		gf_list_add(com_list, com);
 5781|      0|		com->node = gf_sg_find_node(lsr->sg, idref);
 5782|      0|		if (!com->node) {
  ------------------
  |  Branch (5782:7): [True: 0, False: 0]
  ------------------
 5783|      0|			com->RouteID = idref;
 5784|      0|			gf_list_add(lsr->unresolved_commands, com);
 5785|      0|		} else {
 5786|      0|			gf_node_register(com->node, NULL);
 5787|      0|		}
 5788|       |
 5789|      0|		if ((idx>=0) || (att_type>=0)) {
  ------------------
  |  Branch (5789:7): [True: 0, False: 0]
  |  Branch (5789:19): [True: 0, False: 0]
  ------------------
 5790|      0|			GF_CommandField *field = gf_sg_command_field_new(com);
 5791|      0|			field->pos = idx;
 5792|      0|			if (att_type>=0) {
  ------------------
  |  Branch (5792:8): [True: 0, False: 0]
  ------------------
 5793|      0|				field->fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5794|      0|				if (!com->node) return GF_SG_UNKNOWN_NODE;
  ------------------
  |  Branch (5794:9): [True: 0, False: 0]
  ------------------
 5795|      0|				gf_node_get_field(com->node, field->fieldIndex, &info);
 5796|      0|				field->fieldType = info.fieldType;
 5797|      0|			}
 5798|      0|		}
 5799|      3|	} else {
 5800|      3|		SVG_Element *elt = (SVG_Element *) gf_sg_find_node(lsr->sg, idref);
 5801|      3|		if (!elt)
  ------------------
  |  Branch (5801:7): [True: 3, False: 0]
  ------------------
 5802|      3|			return GF_NON_COMPLIANT_BITSTREAM;
 5803|       |
 5804|      0|		if (att_type>=0) {
  ------------------
  |  Branch (5804:7): [True: 0, False: 0]
  ------------------
 5805|      0|			s32 fieldIndex = gf_lsr_anim_type_to_attribute(att_type);
 5806|      0|			gf_node_get_field((GF_Node*)elt, fieldIndex, &info);
 5807|       |			/*TODO implement*/
 5808|      0|		}
 5809|       |		/*node deletion*/
 5810|      0|		else if (idx>=0) {
  ------------------
  |  Branch (5810:12): [True: 0, False: 0]
  ------------------
 5811|      0|			GF_Node *c = (GF_Node *)gf_node_list_get_child(elt->children, idx);
 5812|      0|			if (c) {
  ------------------
  |  Branch (5812:8): [True: 0, False: 0]
  ------------------
 5813|      0|				if (!gf_node_list_del_child( & elt->children, c))
  ------------------
  |  Branch (5813:9): [True: 0, False: 0]
  ------------------
 5814|      0|					return GF_IO_ERR;
 5815|      0|				gf_node_unregister(c, (GF_Node*)elt);
 5816|      0|			}
 5817|      0|		} else {
 5818|      0|			gf_node_replace((GF_Node*)elt, NULL, 0);
 5819|      0|		}
 5820|      0|	}
 5821|      0|	return GF_OK;
 5822|      3|}
lsr_dec.c:lsr_read_any_attribute:
  384|    154|{
  385|    154|	u32 val = 1;
  386|    154|	if (skippable) GF_LSR_READ_INT(lsr, val, 1, "has_attrs");
  ------------------
  |  |   34|    154|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    154|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 154]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    154|	} else {\
  |  |   39|    154|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    154|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    154|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 154]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    154|	}\
  |  |   42|    154|}
  ------------------
  |  Branch (386:6): [True: 154, False: 0]
  ------------------
  387|    154|	if (val) {
  ------------------
  |  Branch (387:6): [True: 40, False: 114]
  ------------------
  388|     85|		do {
  389|     85|			GF_LSR_READ_INT(lsr, val, lsr->info->cfg.extensionIDBits, "reserved");
  ------------------
  |  |   34|     85|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     85|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 85]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     85|	} else {\
  |  |   39|     85|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     85|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     85|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 85]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     85|	}\
  |  |   42|     85|}
  ------------------
  390|     85|			val = lsr_read_vluimsbf5(lsr, "len");//len in BITS
  391|     85|			GF_LSR_READ_INT(lsr, val, val, "reserved_val");
  ------------------
  |  |   34|     85|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     85|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 1, False: 84]
  |  |  ------------------
  |  |   36|      1|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      1|		(_val) = 0;\
  |  |   38|     84|	} else {\
  |  |   39|     84|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     84|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     84|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 84]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     84|	}\
  |  |   42|     85|}
  ------------------
  392|     85|			GF_LSR_READ_INT(lsr, val, 1, "hasNextExtension");
  ------------------
  |  |   34|     85|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     85|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 85]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     85|	} else {\
  |  |   39|     85|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     85|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     85|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 85]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     85|	}\
  |  |   42|     85|}
  ------------------
  393|     85|			if (lsr->last_error) return;
  ------------------
  |  Branch (393:8): [True: 2, False: 83]
  ------------------
  394|     85|		} while (val);
  ------------------
  |  Branch (394:12): [True: 45, False: 38]
  ------------------
  395|     40|	}
  396|    154|}
lsr_dec.c:lsr_read_svg:
 4190|     14|{
 4191|     14|	GF_FieldInfo info;
 4192|     14|	SMIL_Duration snap;
 4193|     14|	u32 flag;
 4194|     14|	GF_Node *elt = gf_node_new(lsr->sg, TAG_SVG_svg);
 4195|     14|	lsr_read_id(lsr, elt);
 4196|     14|	lsr_read_rare(lsr, elt);
  ------------------
  |  | 1744|     14|#define lsr_read_rare(_a, _b) lsr_read_rare_full(_a, _b)
  ------------------
 4197|     14|	lsr_read_fill(lsr, elt);
 4198|     14|	lsr_read_stroke(lsr, elt);
 4199|     14|	lsr_read_string_attribute(lsr, elt, TAG_SVG_ATT_baseProfile, "baseProfile");
 4200|     14|	lsr_read_string_attribute(lsr, elt, TAG_SVG_ATT_contentScriptType, "contentScriptType");
 4201|     14|	lsr_read_eRR(lsr, elt);
 4202|     14|	lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_height, 1, 0, &info);
 4203|     14|	lsr_read_value_with_units(lsr, info.far_ptr, "height");
 4204|     14|	GF_LSR_READ_INT(lsr, flag, 1, "hasPlaybackOrder");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4205|     14|	if (flag) {
  ------------------
  |  Branch (4205:6): [True: 3, False: 11]
  ------------------
 4206|      3|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_playbackOrder, 1, 1, &info);
 4207|      3|		GF_LSR_READ_INT(lsr, flag, 1, "playbackOrder");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 4208|      3|		if (flag) *(SVG_PlaybackOrder*)info.far_ptr = SVG_PLAYBACKORDER_FORWARDONLY;
  ------------------
  |  Branch (4208:7): [True: 3, False: 0]
  ------------------
 4209|      3|	}
 4210|       |
 4211|     14|	lsr_read_preserve_aspect_ratio(lsr, elt);
 4212|       |
 4213|       |
 4214|     14|	GF_LSR_READ_INT(lsr, flag, 1, "has_snapshotTime");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4215|     14|	if (flag) {
  ------------------
  |  Branch (4215:6): [True: 0, False: 14]
  ------------------
 4216|      0|		lsr_read_duration_ex(lsr, NULL, 0, &snap, "snapshotTime", 0);
 4217|      0|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_snapshotTime, 1, 1, &info);
 4218|      0|		if (snap.type==SMIL_DURATION_DEFINED) *((SVG_Clock *)info.far_ptr) = snap.clock_value;
  ------------------
  |  Branch (4218:7): [True: 0, False: 0]
  ------------------
 4219|      0|	}
 4220|       |
 4221|     14|	GF_LSR_READ_INT(lsr, flag, 1, "hasSyncBehavior");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4222|     14|	if (flag) {
  ------------------
  |  Branch (4222:6): [True: 6, False: 8]
  ------------------
 4223|      6|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_syncBehaviorDefault, 1, 0, &info);
 4224|      6|		GF_LSR_READ_INT(lsr, flag, 2, "syncBehaviorDefault");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 4225|      6|		switch (flag) {
 4226|      2|		case 0:
  ------------------
  |  Branch (4226:3): [True: 2, False: 4]
  ------------------
 4227|      2|			*((SMIL_SyncBehavior*)info.far_ptr) = SMIL_SYNCBEHAVIOR_CANSLIP;
 4228|      2|			break;
 4229|      0|		case 1:
  ------------------
  |  Branch (4229:3): [True: 0, False: 6]
  ------------------
 4230|      0|			*((SMIL_SyncBehavior*)info.far_ptr) = SMIL_SYNCBEHAVIOR_INDEPENDENT;
 4231|      0|			break;
 4232|      1|		case 3:
  ------------------
  |  Branch (4232:3): [True: 1, False: 5]
  ------------------
 4233|      1|			*((SMIL_SyncBehavior*)info.far_ptr) = SMIL_SYNCBEHAVIOR_LOCKED;
 4234|      1|			break;
 4235|      3|		default:
  ------------------
  |  Branch (4235:3): [True: 3, False: 3]
  ------------------
 4236|      3|			*((SMIL_SyncBehavior*)info.far_ptr) = SMIL_SYNCBEHAVIOR_INHERIT;
 4237|      3|			break;
 4238|      6|		}
 4239|      6|	}
 4240|     14|	GF_LSR_READ_INT(lsr, flag, 1, "hasSyncToleranceDefault");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4241|     14|	if (flag) {
  ------------------
  |  Branch (4241:6): [True: 5, False: 9]
  ------------------
 4242|      5|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_syncToleranceDefault, 1, 0, &info);
 4243|      5|		((SMIL_SyncTolerance*)info.far_ptr)->type = SMIL_SYNCTOLERANCE_VALUE;
 4244|      5|		GF_LSR_READ_INT(lsr, flag, 1, "choice");
  ------------------
  |  |   34|      5|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      5|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 5]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      5|	} else {\
  |  |   39|      5|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      5|	}\
  |  |   42|      5|}
  ------------------
 4245|      5|		((SMIL_SyncTolerance*)info.far_ptr)->value = lsr_read_vluimsbf5(lsr, "value");
 4246|      5|		((SMIL_SyncTolerance*)info.far_ptr)->value /= lsr->time_resolution;
 4247|      5|	}
 4248|     14|	GF_LSR_READ_INT(lsr, flag, 1, "hasTimelineBegin");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4249|     14|	if (flag) {
  ------------------
  |  Branch (4249:6): [True: 6, False: 8]
  ------------------
 4250|      6|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_timelineBegin, 1, 0, &info);
 4251|      6|		GF_LSR_READ_INT(lsr, flag, 1, "timelineBegin");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
 4252|      6|		if (flag) *(SVG_TimelineBegin*)info.far_ptr = SVG_TIMELINEBEGIN_ONLOAD;
  ------------------
  |  Branch (4252:7): [True: 2, False: 4]
  ------------------
 4253|      6|	}
 4254|     14|	lsr_read_string_attribute(lsr, elt, TAG_SVG_ATT_version, "version");
 4255|       |
 4256|     14|	GF_LSR_READ_INT(lsr, flag, 1, "hasViewBox");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4257|     14|	if (flag) {
  ------------------
  |  Branch (4257:6): [True: 8, False: 6]
  ------------------
 4258|      8|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_viewBox, 1, 0, &info);
 4259|      8|		((SVG_ViewBox*)info.far_ptr)->x = lsr_read_fixed_16_8(lsr, "viewbox.x");
 4260|      8|		((SVG_ViewBox*)info.far_ptr)->y = lsr_read_fixed_16_8(lsr, "viewbox.y");
 4261|      8|		((SVG_ViewBox*)info.far_ptr)->width = lsr_read_fixed_16_8(lsr, "viewbox.width");
 4262|      8|		((SVG_ViewBox*)info.far_ptr)->height = lsr_read_fixed_16_8(lsr, "viewbox.height");
 4263|      8|		((SVG_ViewBox*)info.far_ptr)->is_set = 1;
 4264|      8|	}
 4265|       |
 4266|     14|	lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_width, 1, 0, &info);
 4267|     14|	lsr_read_value_with_units(lsr, info.far_ptr, "width");
 4268|       |
 4269|     14|	GF_LSR_READ_INT(lsr, flag, 1, "hasZoomAndPan");
  ------------------
  |  |   34|     14|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     14|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 14]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     14|	} else {\
  |  |   39|     14|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     14|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     14|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 14]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     14|	}\
  |  |   42|     14|}
  ------------------
 4270|     14|	if (flag) {
  ------------------
  |  Branch (4270:6): [True: 3, False: 11]
  ------------------
 4271|      3|		lsr->last_error = gf_node_get_attribute_by_tag(elt, TAG_SVG_ATT_zoomAndPan, 1, 0, &info);
 4272|      3|		GF_LSR_READ_INT(lsr, flag, 1, "zoomAndPan");
  ------------------
  |  |   34|      3|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      3|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 3]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      3|	} else {\
  |  |   39|      3|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      3|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      3|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 3]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      3|	}\
  |  |   42|      3|}
  ------------------
 4273|      3|		*((SVG_ZoomAndPan*)info.far_ptr) = flag ? SVG_ZOOMANDPAN_MAGNIFY : SVG_ZOOMANDPAN_DISABLE;
  ------------------
  |  Branch (4273:38): [True: 1, False: 2]
  ------------------
 4274|      3|	}
 4275|     14|	lsr_read_any_attribute(lsr, elt, 1);
 4276|       |	/*store current root for listeners with no focus target*/
 4277|     14|	lsr->current_root = elt;
 4278|       |
 4279|     14|	if (init_node) {
  ------------------
  |  Branch (4279:6): [True: 14, False: 0]
  ------------------
 4280|     14|		gf_node_register(elt, NULL);
 4281|     14|		gf_sg_set_root_node(lsr->sg, elt);
 4282|     14|	}
 4283|       |
 4284|     14|	lsr_read_group_content(lsr, elt, 0);
 4285|     14|	return elt;
 4286|     14|}
lsr_dec.c:lsr_read_string_attribute:
  758|     42|{
  759|     42|	u32 val;
  760|     42|	GF_LSR_READ_INT(lsr, val, 1, name);
  ------------------
  |  |   34|     42|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     42|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 42]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     42|	} else {\
  |  |   39|     42|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     42|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     42|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 42]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     42|	}\
  |  |   42|     42|}
  ------------------
  761|     42|	if (val) {
  ------------------
  |  Branch (761:6): [True: 16, False: 26]
  ------------------
  762|     16|		GF_FieldInfo info;
  763|     16|		lsr->last_error = gf_node_get_attribute_by_tag(elt, tag, GF_TRUE, GF_FALSE, &info);
  764|     16|		lsr_read_byte_align_string(lsr, info.far_ptr, name);
  765|     16|	}
  766|     42|}
lsr_dec.c:lsr_read_byte_align_string:
  508|  38.8k|{
  509|  38.8k|	u32 len;
  510|  38.8k|	gf_bs_align(lsr->bs);
  511|  38.8k|	len = lsr_read_vluimsbf8(lsr, "len");
  512|  38.8k|	if (str) {
  ------------------
  |  Branch (512:6): [True: 2.66k, False: 36.1k]
  ------------------
  513|  2.66k|		if (*str) gf_free(*str);
  ------------------
  |  Branch (513:7): [True: 15, False: 2.64k]
  ------------------
  514|  2.66k|		*str = NULL;
  515|  2.66k|		if (len) {
  ------------------
  |  Branch (515:7): [True: 2.66k, False: 1]
  ------------------
  516|  2.66k|			if (len > gf_bs_available(lsr->bs) ) {
  ------------------
  |  Branch (516:8): [True: 5, False: 2.65k]
  ------------------
  517|      5|				lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
  518|      5|				return;
  519|      5|			}
  520|  2.65k|			*str = (char*)gf_malloc(sizeof(char)*(len+1));
  521|  2.65k|			if (!*str) {
  ------------------
  |  Branch (521:8): [True: 0, False: 2.65k]
  ------------------
  522|      0|				lsr->last_error = GF_OUT_OF_MEM;
  523|      0|				return;
  524|      0|			}
  525|  2.65k|			gf_bs_read_data(lsr->bs, *str, len);
  526|  2.65k|			(*str) [len] = 0;
  527|  2.65k|		}
  528|  36.1k|	} else {
  529|  36.1k|		if (len > gf_bs_available(lsr->bs) ) {
  ------------------
  |  Branch (529:7): [True: 40, False: 36.1k]
  ------------------
  530|     40|			lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
  531|     40|			return;
  532|     40|		}
  533|  3.90M|		while (len) {
  ------------------
  |  Branch (533:10): [True: 3.86M, False: 36.1k]
  ------------------
  534|  3.86M|			gf_bs_read_int(lsr->bs, 8);
  535|  3.86M|			len--;
  536|  3.86M|		}
  537|  36.1k|	}
  538|  38.7k|	GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%s\n", name, 8*len, str ? *str : ""));
  ------------------
  |  | 1086|  38.7k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 38.7k]
  |  |  |  Branch (1086:143): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  539|  38.7k|}
lsr_dec.c:lsr_read_vluimsbf8:
  264|  38.8k|{
  265|  38.8k|	u32 nb_words = 0;
  266|  38.8k|	u32 nb_tot, nb_bits, val;
  267|       |
  268|  38.9k|	while (gf_bs_read_int(lsr->bs, 1)) nb_words++;
  ------------------
  |  Branch (268:9): [True: 69, False: 38.8k]
  ------------------
  269|  38.8k|	nb_words++;
  270|  38.8k|	nb_tot = nb_words;
  271|  38.8k|	nb_bits = nb_words*7;
  272|  38.8k|	nb_tot += nb_bits;
  273|  38.8k|	val = gf_bs_read_int(lsr->bs, nb_bits);
  274|  38.8k|	GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", name, nb_tot, val));
  ------------------
  |  | 1086|  38.8k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 38.8k]
  |  |  ------------------
  ------------------
  275|  38.8k|	return val;
  276|  38.8k|}
lsr_dec.c:lsr_read_send_event:
 5825|      1|{
 5826|      1|	u32 flag, idref;
 5827|      1|	s32 detail;
 5828|      1|	SVG_Number x, y;
 5829|      1|	XMLEV_Event event;
 5830|      1|	lsr_read_event_type(lsr, &event);
 5831|       |
 5832|      1|	detail = 0;
 5833|      1|	GF_LSR_READ_INT(lsr, flag, 1, "has_intvalue");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 5834|      1|	if (flag) {
  ------------------
  |  Branch (5834:6): [True: 0, False: 1]
  ------------------
 5835|      0|		GF_LSR_READ_INT(lsr, flag, 1, "sign");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 5836|      0|		detail = lsr_read_vluimsbf5(lsr, "value");
 5837|      0|		if (flag) detail = -detail;
  ------------------
  |  Branch (5837:7): [True: 0, False: 0]
  ------------------
 5838|       |
 5839|      0|		switch (event.type) {
 5840|      0|		case GF_EVENT_KEYDOWN:
  ------------------
  |  Branch (5840:3): [True: 0, False: 0]
  ------------------
 5841|      0|		case GF_EVENT_LONGKEYPRESS:
  ------------------
  |  Branch (5841:3): [True: 0, False: 0]
  ------------------
 5842|      0|		case GF_EVENT_REPEAT_KEY:
  ------------------
  |  Branch (5842:3): [True: 0, False: 0]
  ------------------
 5843|      0|		case GF_EVENT_SHORT_ACCESSKEY:
  ------------------
  |  Branch (5843:3): [True: 0, False: 0]
  ------------------
 5844|      0|			detail = lsr_to_dom_key(detail);
 5845|      0|			break;
 5846|      0|		default:
  ------------------
  |  Branch (5846:3): [True: 0, False: 0]
  ------------------
 5847|      0|			break;
 5848|      0|		}
 5849|      0|	}
 5850|      1|	x.value = y.value = 0;
 5851|      1|	GF_LSR_READ_INT(lsr, flag, 1, "has_pointvalue");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 5852|      1|	if (flag) {
  ------------------
  |  Branch (5852:6): [True: 0, False: 1]
  ------------------
 5853|      0|		lsr_read_coordinate(lsr, &x, 0, "x");
 5854|      0|		lsr_read_coordinate(lsr, &y, 0, "y");
 5855|      0|	}
 5856|      1|	idref = lsr_read_codec_IDREF_command(lsr, "idref");
 5857|       |
 5858|      1|	GF_LSR_READ_INT(lsr, flag, 1, "has_pointvalue");
  ------------------
  |  |   34|      1|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      1|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 1]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      1|	} else {\
  |  |   39|      1|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      1|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      1|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      1|	}\
  |  |   42|      1|}
  ------------------
 5859|      1|	if (flag) {
  ------------------
  |  Branch (5859:6): [True: 1, False: 0]
  ------------------
 5860|      1|		lsr_read_byte_align_string(lsr, NULL, "string");
 5861|      1|	}
 5862|      1|	lsr_read_any_attribute(lsr, NULL, 1);
 5863|       |
 5864|      1|	if (!com_list) {
  ------------------
  |  Branch (5864:6): [True: 1, False: 0]
  ------------------
 5865|      1|		GF_DOM_Event evt;
 5866|      1|		GF_Node *target = gf_sg_find_node(lsr->sg, idref);
 5867|      1|		if (!target) return GF_OK;
  ------------------
  |  Branch (5867:7): [True: 1, False: 0]
  ------------------
 5868|       |
 5869|      0|		memset(&evt, 0, sizeof(GF_DOM_Event));
 5870|      0|		evt.type = event.type;
 5871|      0|		evt.detail = detail ? detail : (s32) event.parameter;
  ------------------
  |  Branch (5871:16): [True: 0, False: 0]
  ------------------
 5872|      0|		evt.clientX = FIX2INT(x.value);
  ------------------
  |  |  121|      0|#define FIX2INT(v)		((s32)(v))
  ------------------
 5873|      0|		evt.clientY = FIX2INT(y.value);
  ------------------
  |  |  121|      0|#define FIX2INT(v)		((s32)(v))
  ------------------
 5874|      0|		gf_dom_event_fire(target, &evt);
 5875|       |
 5876|      0|	} else {
 5877|      0|		GF_Command *com = gf_sg_command_new(lsr->sg, GF_SG_LSR_SEND_EVENT);
 5878|      0|		gf_list_add(com_list, com);
 5879|      0|		com->node = gf_sg_find_node(lsr->sg, idref);
 5880|      0|		if (!com->node) {
  ------------------
  |  Branch (5880:7): [True: 0, False: 0]
  ------------------
 5881|      0|			com->RouteID = idref;
 5882|      0|			gf_list_add(lsr->unresolved_commands, com);
 5883|      0|		} else {
 5884|      0|			gf_node_register(com->node, NULL);
 5885|      0|		}
 5886|      0|		com->send_event_integer = detail ? detail : (s32) event.parameter;
  ------------------
  |  Branch (5886:29): [True: 0, False: 0]
  ------------------
 5887|      0|		com->send_event_name = event.type;
 5888|      0|		com->send_event_x = FIX2INT(x.value);
  ------------------
  |  |  121|      0|#define FIX2INT(v)		((s32)(v))
  ------------------
 5889|      0|		com->send_event_y = FIX2INT(y.value);
  ------------------
  |  |  121|      0|#define FIX2INT(v)		((s32)(v))
  ------------------
 5890|      0|	}
 5891|      0|	return GF_OK;
 5892|      1|}
lsr_dec.c:lsr_read_save:
 5895|      5|{
 5896|      5|	u32 i, count;
 5897|      5|	count = lsr_read_vluimsbf5(lsr, "nbIds");
 5898|   438k|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (5898:12): [True: 438k, False: 4]
  ------------------
 5899|   438k|		u32 flag;
 5900|   438k|		lsr_read_vluimsbf5(lsr, "ref[[i]]");
 5901|   438k|		GF_LSR_READ_INT(lsr, flag, 1, "reserved");
  ------------------
  |  |   34|   438k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   438k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 438k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|   438k|	} else {\
  |  |   39|   438k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   438k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   438k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 438k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   438k|	}\
  |  |   42|   438k|}
  ------------------
 5902|       |
 5903|   438k|		lsr_get_attribute_name(lsr);
 5904|   438k|		if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (5904:7): [True: 1, False: 438k]
  ------------------
 5905|   438k|	}
 5906|      4|	lsr_read_byte_align_string(lsr, NULL, "groupID");
 5907|       |	lsr_read_any_attribute(lsr, NULL, 1);
 5908|      4|	return GF_OK;
 5909|      5|}
lsr_dec.c:lsr_read_codec_IDREF_command:
  436|     34|{
  437|     34|	u32 flag;
  438|     34|	u32 nID = 1+lsr_read_vluimsbf5(lsr, name);
  439|       |
  440|     34|	GF_LSR_READ_INT(lsr, flag, 1, "reserved");
  ------------------
  |  |   34|     34|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     34|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 34]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     34|	} else {\
  |  |   39|     34|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     34|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     34|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     34|	}\
  |  |   42|     34|}
  ------------------
  441|     34|	if (flag) {
  ------------------
  |  Branch (441:6): [True: 6, False: 28]
  ------------------
  442|      6|		u32 len = lsr_read_vluimsbf5(lsr, "len");
  443|      6|		GF_LSR_READ_INT(lsr, flag, len, "reserved");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
  444|      6|	}
  445|     34|	return nID;
  446|     34|}
lsr_dec.c:lsr_read_private_element_container:
  316|      6|{
  317|      6|	u32 val, len;
  318|      6|	GF_LSR_READ_INT(lsr, val, 4, "ch4");
  ------------------
  |  |   34|      6|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      6|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 6]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      6|	} else {\
  |  |   39|      6|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      6|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      6|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      6|	}\
  |  |   42|      6|}
  ------------------
  319|      6|	switch (val) {
  320|       |	/*privateAnyXMLElement*/
  321|      0|	case 0:
  ------------------
  |  Branch (321:2): [True: 0, False: 6]
  ------------------
  322|      0|		len = lsr_read_vluimsbf5(lsr, "len");
  323|      0|		gf_bs_skip_bytes(lsr->bs, len);
  324|      0|		break;
  325|       |	/*privateOpaqueElement*/
  326|      1|	case 1:
  ------------------
  |  Branch (326:2): [True: 1, False: 5]
  ------------------
  327|      1|		len = lsr_read_vluimsbf5(lsr, "len");
  328|      1|		gf_bs_skip_bytes(lsr->bs, len);
  329|      1|		break;
  330|       |	/*element_any*/
  331|      0|	case 2:
  ------------------
  |  Branch (331:2): [True: 0, False: 6]
  ------------------
  332|      0|		lsr_read_extend_class(lsr, NULL, 0, "reserved");
  333|      0|		break;
  334|       |	/*attr_custom_extension*/
  335|      5|	default:
  ------------------
  |  Branch (335:2): [True: 5, False: 1]
  ------------------
  336|      5|		len = lsr_read_vluimsbf5(lsr, "len");
  337|      5|		gf_bs_skip_bytes(lsr->bs, len);
  338|      5|		break;
  339|      6|	}
  340|      6|}
lsr_dec.c:lsr_read_object_content:
  399|    127|{
  400|    127|	u32 val;
  401|    127|	GF_LSR_READ_INT(lsr, val, 1, "has_private_attr");
  ------------------
  |  |   34|    127|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    127|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 127]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    127|	} else {\
  |  |   39|    127|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    127|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    127|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 127]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    127|	}\
  |  |   42|    127|}
  ------------------
  402|    127|	if (val) lsr_read_private_attribute_container(lsr);
  ------------------
  |  Branch (402:6): [True: 48, False: 79]
  ------------------
  403|    127|}
lsr_dec.c:lsr_read_private_attribute_container:
  343|     48|{
  344|     48|	u32 val;
  345|     50|	do {
  346|     50|		u32 skip_len;
  347|     50|		GF_LSR_READ_INT(lsr, val, 2, "privateDataType");
  ------------------
  |  |   34|     50|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     50|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 50]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     50|	} else {\
  |  |   39|     50|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     50|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     50|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 50]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     50|	}\
  |  |   42|     50|}
  ------------------
  348|     50|		skip_len = lsr_read_vluimsbf5(lsr, "skipLen");
  349|     50|		gf_bs_align(lsr->bs);
  350|       |		/*just skip data*/
  351|     50|#if 1
  352|     50|		if (skip_len>gf_bs_available(lsr->bs)) {
  ------------------
  |  Branch (352:7): [True: 0, False: 50]
  ------------------
  353|      0|			lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
  354|      0|			return;
  355|      0|		}
  356|     50|		gf_bs_skip_bytes(lsr->bs, skip_len);
  357|       |#else
  358|       |		switch (val) {
  359|       |		/*private data of type "anyXML"*/
  360|       |		case 0:
  361|       |			count = lsr_read_vluimsbf5(lsr, "count");
  362|       |			for (i=0; i<count; i++) {
  363|       |				privateAttribute(0) attr[i];
  364|       |			}
  365|       |			break;
  366|       |		case 1:
  367|       |			/*TODO FIXME - nameSpaceIndexBits is not defined in the spec*/
  368|       |			uint(nameSpaceIndexBits) nameSpaceIndex;
  369|       |			gf_bs_align(lsr->bs);
  370|       |			byte[skipLen - ((nameSpaceIndexBits+7)%8)] data;
  371|       |			break;
  372|       |		default:
  373|       |			/*TODO - spec is wrong here (typo, "len" instead of "skipLen" )*/
  374|       |			gf_bs_skip_bytes(skipLen);
  375|       |			break;
  376|       |		}
  377|       |#endif
  378|     50|		gf_bs_align(lsr->bs);
  379|     50|		GF_LSR_READ_INT(lsr, val, 1, "hasMorePrivateData");
  ------------------
  |  |   34|     50|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     50|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 50]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     50|	} else {\
  |  |   39|     50|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     50|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     50|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 50]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     50|	}\
  |  |   42|     50|}
  ------------------
  380|     50|	} while (val);
  ------------------
  |  Branch (380:11): [True: 2, False: 48]
  ------------------
  381|     48|}
lsr_dec.c:lsr_decode_laser_unit:
 6110|     24|{
 6111|     24|	GF_Err e;
 6112|     24|	Bool reset_encoding_context;
 6113|     24|	u32 flag, i, count = 0, privateDataIdentifierIndexBits;
 6114|       |
 6115|     24|	lsr->last_error = GF_OK;
 6116|       |
 6117|       |	/*
 6118|       |	 *	1 - laser unit header
 6119|       |	 */
 6120|     24|	GF_LSR_READ_INT(lsr, reset_encoding_context, 1, "resetEncodingContext");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 6121|     24|	GF_LSR_READ_INT(lsr, flag, 1, "opt_group");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 6122|     24|	if (flag) lsr_read_extension(lsr, "ext");
  ------------------
  |  Branch (6122:6): [True: 20, False: 4]
  ------------------
 6123|       |
 6124|       |	/*clean all tables*/
 6125|     24|	if (reset_encoding_context) {
  ------------------
  |  Branch (6125:6): [True: 2, False: 22]
  ------------------
 6126|      2|		lsr->nb_cols = 0;
 6127|      2|		if (lsr->col_table) gf_free(lsr->col_table);
  ------------------
  |  Branch (6127:7): [True: 0, False: 2]
  ------------------
 6128|      2|		lsr->col_table = NULL;
 6129|      2|		while (gf_list_count(lsr->font_table)) {
  ------------------
  |  Branch (6129:10): [True: 0, False: 2]
  ------------------
 6130|      0|			char *ft = (char *)gf_list_last(lsr->font_table);
 6131|      0|			gf_free(ft);
 6132|      0|			gf_list_rem_last(lsr->font_table);
 6133|      0|		}
 6134|      2|		lsr->privateData_id_index = lsr->privateTag_index = 0;
 6135|      2|	}
 6136|       |
 6137|       |	/*
 6138|       |	 *	2 - codecInitialisations
 6139|       |	 */
 6140|       |
 6141|       |	/*
 6142|       |	 * 2.a - condecInitialization.color
 6143|       |	 */
 6144|     24|	GF_LSR_READ_INT(lsr, flag, 1, "colorInitialisation");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 6145|       |
 6146|     24|	if (flag) {
  ------------------
  |  Branch (6146:6): [True: 13, False: 11]
  ------------------
 6147|     13|		count = lsr_read_vluimsbf5(lsr, "count");
 6148|     13|		if (count>gf_bs_available(lsr->bs)) return lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
  ------------------
  |  Branch (6148:7): [True: 0, False: 13]
  ------------------
 6149|     13|		lsr->col_table = (LSRCol*)gf_realloc(lsr->col_table, sizeof(LSRCol)*(lsr->nb_cols+count));
 6150|     13|		if (!lsr->col_table)
  ------------------
  |  Branch (6150:7): [True: 0, False: 13]
  ------------------
 6151|      0|			return lsr->last_error = GF_OUT_OF_MEM;
 6152|   243k|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (6152:13): [True: 243k, False: 13]
  ------------------
 6153|   243k|			LSRCol c;
 6154|   243k|			GF_LSR_READ_INT(lsr, c.r, lsr->info->cfg.colorComponentBits, "red");
  ------------------
  |  |   34|   243k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   243k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 243k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|   243k|	} else {\
  |  |   39|   243k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   243k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   243k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 243k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   243k|	}\
  |  |   42|   243k|}
  ------------------
 6155|   243k|			GF_LSR_READ_INT(lsr, c.g, lsr->info->cfg.colorComponentBits, "green");
  ------------------
  |  |   34|   243k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   243k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 243k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|   243k|	} else {\
  |  |   39|   243k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   243k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   243k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 243k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   243k|	}\
  |  |   42|   243k|}
  ------------------
 6156|   243k|			GF_LSR_READ_INT(lsr, c.b, lsr->info->cfg.colorComponentBits, "blue");
  ------------------
  |  |   34|   243k|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|   243k|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 243k]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|   243k|	} else {\
  |  |   39|   243k|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|   243k|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|   243k|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 243k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|   243k|	}\
  |  |   42|   243k|}
  ------------------
 6157|   243k|			lsr->col_table[lsr->nb_cols+i] = c;
 6158|   243k|			if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6158:8): [True: 0, False: 243k]
  ------------------
 6159|   243k|		}
 6160|     13|		lsr->nb_cols += count;
 6161|     13|	}
 6162|     24|	lsr->colorIndexBits = gf_get_bit_size(lsr->nb_cols);
 6163|       |	/*
 6164|       |	 * 2.b - condecInitialization.fonts
 6165|       |	 */
 6166|     24|	GF_LSR_READ_INT(lsr, flag, 1, "fontInitialisation");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 6167|     24|	count = 0;
 6168|     24|	if (flag) {
  ------------------
  |  Branch (6168:6): [True: 10, False: 14]
  ------------------
 6169|     10|		count = lsr_read_vluimsbf5(lsr, "count");
 6170|    329|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (6170:13): [True: 319, False: 10]
  ------------------
 6171|    319|			char *ft = NULL;
 6172|    319|			lsr_read_byte_align_string(lsr, &ft, "font");
 6173|    319|			gf_list_add(lsr->font_table, ft);
 6174|    319|			if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6174:8): [True: 0, False: 319]
  ------------------
 6175|    319|		}
 6176|     10|	}
 6177|     24|	lsr->fontIndexBits = gf_get_bit_size(count);
 6178|       |	/*
 6179|       |	 * 2.c - condecInitialization.private
 6180|       |	 */
 6181|     24|	GF_LSR_READ_INT(lsr, flag, 1, "privateDataIdentifierInitialisation");
  ------------------
  |  |   34|     24|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     24|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 24]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     24|	} else {\
  |  |   39|     24|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     24|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     24|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 24]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     24|	}\
  |  |   42|     24|}
  ------------------
 6182|       |
 6183|     24|	if (flag) {
  ------------------
  |  Branch (6183:6): [True: 3, False: 21]
  ------------------
 6184|      3|		count = lsr_read_vluimsbf5(lsr, "nbPrivateDataIdentifiers");
 6185|     61|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (6185:13): [True: 60, False: 1]
  ------------------
 6186|     60|			lsr->privateData_id_index++;
 6187|     60|			lsr_read_byte_align_string(lsr, NULL, "privateDataIdentifier");
 6188|     60|			if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6188:8): [True: 2, False: 58]
  ------------------
 6189|     60|		}
 6190|      3|	}
 6191|       |	/*
 6192|       |	 * 2.d - condecInitialization.anyXML
 6193|       |	 */
 6194|     22|	GF_LSR_READ_INT(lsr, flag, 1, "anyXMLInitialisation");
  ------------------
  |  |   34|     22|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     22|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 22]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     22|	} else {\
  |  |   39|     22|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     22|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     22|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     22|	}\
  |  |   42|     22|}
  ------------------
 6195|       |
 6196|     22|	if (flag) {
  ------------------
  |  Branch (6196:6): [True: 7, False: 15]
  ------------------
 6197|      7|		privateDataIdentifierIndexBits = gf_get_bit_size(lsr->privateData_id_index);
 6198|      7|		count = lsr_read_vluimsbf5(lsr, "nbTags");
 6199|    168|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (6199:13): [True: 164, False: 4]
  ------------------
 6200|    164|			lsr->privateTag_index++;
 6201|    164|			if (i && privateDataIdentifierIndexBits) {
  ------------------
  |  Branch (6201:8): [True: 158, False: 6]
  |  Branch (6201:13): [True: 0, False: 158]
  ------------------
 6202|       |				/* uint(privateDataIdentifierIndexBits) = */
 6203|      0|				GF_LSR_READ_INT(lsr, flag, privateDataIdentifierIndexBits, "privateDataIdentifierIndex");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 6204|      0|				lsr_read_byte_align_string(lsr, NULL, "tag");
 6205|      0|			}
 6206|    164|			GF_LSR_READ_INT(lsr, flag, 1, "hasAttrs");
  ------------------
  |  |   34|    164|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|    164|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 164]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|    164|	} else {\
  |  |   39|    164|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|    164|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|    164|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 164]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|    164|	}\
  |  |   42|    164|}
  ------------------
 6207|    164|			if (flag) {
  ------------------
  |  Branch (6207:8): [True: 60, False: 104]
  ------------------
 6208|     60|				u32 k, c2 = lsr_read_vluimsbf5(lsr, "nbAttrNames");
 6209|  35.7k|				for (k=0; k<c2; k++) {
  ------------------
  |  Branch (6209:15): [True: 35.6k, False: 57]
  ------------------
 6210|  35.6k|					if (!i && privateDataIdentifierIndexBits) {
  ------------------
  |  Branch (6210:10): [True: 3.73k, False: 31.9k]
  |  Branch (6210:16): [True: 0, False: 3.73k]
  ------------------
 6211|       |						/* uint(privateDataIdentifierIndexBits) = */
 6212|      0|						GF_LSR_READ_INT(lsr, flag, privateDataIdentifierIndexBits, "privateDataIdentifierIndex");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 6213|      0|					}
 6214|  35.6k|					if (!gf_bs_available(lsr->bs)) {
  ------------------
  |  Branch (6214:10): [True: 3, False: 35.6k]
  ------------------
 6215|      3|						lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;
 6216|      3|						break;
 6217|      3|					}
 6218|  35.6k|					lsr_read_byte_align_string(lsr, NULL, "tag");
 6219|  35.6k|				}
 6220|     60|			}
 6221|    164|			if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6221:8): [True: 3, False: 161]
  ------------------
 6222|    164|		}
 6223|      7|	}
 6224|       |	/*
 6225|       |	 * 2.e - condecInitialization.extension
 6226|       |	 */
 6227|     19|	count = lsr_read_vluimsbf5(lsr, "countG");
 6228|    451|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (6228:12): [True: 432, False: 19]
  ------------------
 6229|    432|		/*u32 locID = */lsr_read_vluimsbf5(lsr, "binaryIdForThisStringID");
 6230|    432|		lsr_read_byte_align_string(lsr, NULL, "stringID");
 6231|    432|		if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6231:7): [True: 0, False: 432]
  ------------------
 6232|    432|	}
 6233|     19|	GF_LSR_READ_INT(lsr, flag, 1, "hasExtension");
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 6234|     19|	if (flag) {
  ------------------
  |  Branch (6234:6): [True: 0, False: 19]
  ------------------
 6235|      0|		u32 len = lsr_read_vluimsbf5(lsr, "len");
 6236|      0|		u32 pos = gf_bs_get_bit_offset(lsr->bs);
 6237|       |
 6238|      0|		count = lsr_read_vluimsbf5(lsr, "len");
 6239|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (6239:13): [True: 0, False: 0]
  ------------------
 6240|      0|			/*u32 locID = */lsr_read_vluimsbf5(lsr, "localStreamIdForThisGlobal");
 6241|      0|			lsr_read_byte_align_string(lsr, NULL, "globalName");
 6242|      0|			if (lsr->last_error) return lsr->last_error;
  ------------------
  |  Branch (6242:8): [True: 0, False: 0]
  ------------------
 6243|      0|		}
 6244|      0|		pos = gf_bs_get_bit_offset(lsr->bs) - pos;
 6245|      0|		if (len<pos)
  ------------------
  |  Branch (6245:7): [True: 0, False: 0]
  ------------------
 6246|      0|			return GF_NON_COMPLIANT_BITSTREAM;
 6247|       |
 6248|      0|		GF_LSR_READ_INT(lsr, flag, pos, "remainingData");
  ------------------
  |  |   34|      0|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|      0|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 0]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|      0|	} else {\
  |  |   39|      0|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|      0|	}\
  |  |   42|      0|}
  ------------------
 6249|      0|	}
 6250|       |
 6251|     19|	e = lsr_read_command_list(lsr, com_list, NULL, 1);
 6252|     19|	GF_LSR_READ_INT(lsr, flag, 1, "opt_group");
  ------------------
  |  |   34|     19|#define GF_LSR_READ_INT(_codec, _val, _nbBits, _str) {\
  |  |   35|     19|	if (_nbBits/8 > gf_bs_available(lsr->bs)) {\
  |  |  ------------------
  |  |  |  Branch (35:6): [True: 0, False: 19]
  |  |  ------------------
  |  |   36|      0|		lsr->last_error = GF_NON_COMPLIANT_BITSTREAM;\
  |  |   37|      0|		(_val) = 0;\
  |  |   38|     19|	} else {\
  |  |   39|     19|		(_val) = gf_bs_read_int(_codec->bs, _nbBits);	\
  |  |   40|     19|		GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[LASeR] %s\t\t%d\t\t%d\n", _str, _nbBits, _val)); \
  |  |  ------------------
  |  |  |  | 1086|     19|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1086:52): [True: 0, False: 19]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   41|     19|	}\
  |  |   42|     19|}
  ------------------
 6253|     19|	if (flag) lsr_read_extension(lsr, "ext");
  ------------------
  |  Branch (6253:6): [True: 5, False: 14]
  ------------------
 6254|     19|	return e;
 6255|     19|}

gf_lsr_anim_type_to_attribute:
  457|      5|s32 gf_lsr_anim_type_to_attribute(u32 tag) {
  458|      5|	switch(tag) {
  459|      0|	case 0:
  ------------------
  |  Branch (459:2): [True: 0, False: 5]
  ------------------
  460|      0|		return TAG_SVG_ATT_target;
  461|      0|	case 1:
  ------------------
  |  Branch (461:2): [True: 0, False: 5]
  ------------------
  462|      0|		return TAG_SVG_ATT_accumulate;
  463|      0|	case 2:
  ------------------
  |  Branch (463:2): [True: 0, False: 5]
  ------------------
  464|      0|		return TAG_SVG_ATT_additive;
  465|      0|	case 3:
  ------------------
  |  Branch (465:2): [True: 0, False: 5]
  ------------------
  466|      0|		return TAG_SVG_ATT_audio_level;
  467|      0|	case 4:
  ------------------
  |  Branch (467:2): [True: 0, False: 5]
  ------------------
  468|      0|		return TAG_SVG_ATT_bandwidth;
  469|      0|	case 5:
  ------------------
  |  Branch (469:2): [True: 0, False: 5]
  ------------------
  470|      0|		return TAG_SVG_ATT_begin;
  471|      0|	case 6:
  ------------------
  |  Branch (471:2): [True: 0, False: 5]
  ------------------
  472|      0|		return TAG_SVG_ATT_calcMode;
  473|      0|	case 7:
  ------------------
  |  Branch (473:2): [True: 0, False: 5]
  ------------------
  474|      0|		return TAG_LSR_ATT_children;
  475|      0|	case 8:
  ------------------
  |  Branch (475:2): [True: 0, False: 5]
  ------------------
  476|      0|		return TAG_SVG_ATT_choice;
  477|      0|	case 9:
  ------------------
  |  Branch (477:2): [True: 0, False: 5]
  ------------------
  478|      0|		return TAG_SVG_ATT_clipBegin;
  479|      0|	case 10:
  ------------------
  |  Branch (479:2): [True: 0, False: 5]
  ------------------
  480|      0|		return TAG_SVG_ATT_clipEnd;
  481|      0|	case 11:
  ------------------
  |  Branch (481:2): [True: 0, False: 5]
  ------------------
  482|      0|		return TAG_SVG_ATT_color;
  483|      0|	case 12:
  ------------------
  |  Branch (483:2): [True: 0, False: 5]
  ------------------
  484|      0|		return TAG_SVG_ATT_color_rendering;
  485|      0|	case 13:
  ------------------
  |  Branch (485:2): [True: 0, False: 5]
  ------------------
  486|      0|		return TAG_SVG_ATT_cx;
  487|      0|	case 14:
  ------------------
  |  Branch (487:2): [True: 0, False: 5]
  ------------------
  488|      0|		return TAG_SVG_ATT_cy;
  489|      0|	case 15:
  ------------------
  |  Branch (489:2): [True: 0, False: 5]
  ------------------
  490|      0|		return TAG_SVG_ATT_d;
  491|      0|	case 16:
  ------------------
  |  Branch (491:2): [True: 0, False: 5]
  ------------------
  492|      0|		return TAG_SVG_ATT_delta;
  493|      0|	case 17:
  ------------------
  |  Branch (493:2): [True: 0, False: 5]
  ------------------
  494|      0|		return TAG_SVG_ATT_display;
  495|      0|	case 18:
  ------------------
  |  Branch (495:2): [True: 0, False: 5]
  ------------------
  496|      0|		return TAG_SVG_ATT_display_align;
  497|      0|	case 19:
  ------------------
  |  Branch (497:2): [True: 0, False: 5]
  ------------------
  498|      0|		return TAG_SVG_ATT_dur;
  499|      0|	case 20:
  ------------------
  |  Branch (499:2): [True: 0, False: 5]
  ------------------
  500|      0|		return TAG_SVG_ATT_editable;
  501|      0|	case 21:
  ------------------
  |  Branch (501:2): [True: 0, False: 5]
  ------------------
  502|      0|		return TAG_LSR_ATT_enabled;
  503|      0|	case 22:
  ------------------
  |  Branch (503:2): [True: 0, False: 5]
  ------------------
  504|      0|		return TAG_SVG_ATT_end;
  505|      0|	case 23:
  ------------------
  |  Branch (505:2): [True: 0, False: 5]
  ------------------
  506|      0|		return TAG_XMLEV_ATT_event;
  507|      0|	case 24:
  ------------------
  |  Branch (507:2): [True: 0, False: 5]
  ------------------
  508|      0|		return TAG_SVG_ATT_externalResourcesRequired;
  509|      0|	case 25:
  ------------------
  |  Branch (509:2): [True: 0, False: 5]
  ------------------
  510|      0|		return TAG_SVG_ATT_fill;
  511|      0|	case 26:
  ------------------
  |  Branch (511:2): [True: 0, False: 5]
  ------------------
  512|      0|		return TAG_SVG_ATT_fill_opacity;
  513|      0|	case 27:
  ------------------
  |  Branch (513:2): [True: 0, False: 5]
  ------------------
  514|      0|		return TAG_SVG_ATT_fill_rule;
  515|      0|	case 28:
  ------------------
  |  Branch (515:2): [True: 0, False: 5]
  ------------------
  516|      0|		return TAG_SVG_ATT_focusable;
  517|      0|	case 29:
  ------------------
  |  Branch (517:2): [True: 0, False: 5]
  ------------------
  518|      0|		return TAG_SVG_ATT_font_family;
  519|      0|	case 30:
  ------------------
  |  Branch (519:2): [True: 0, False: 5]
  ------------------
  520|      0|		return TAG_SVG_ATT_font_size;
  521|      0|	case 31:
  ------------------
  |  Branch (521:2): [True: 0, False: 5]
  ------------------
  522|      0|		return TAG_SVG_ATT_font_style;
  523|      0|	case 32:
  ------------------
  |  Branch (523:2): [True: 0, False: 5]
  ------------------
  524|      0|		return TAG_SVG_ATT_font_variant;
  525|      0|	case 33:
  ------------------
  |  Branch (525:2): [True: 0, False: 5]
  ------------------
  526|      0|		return TAG_SVG_ATT_font_weight;
  527|      0|	case 34:
  ------------------
  |  Branch (527:2): [True: 0, False: 5]
  ------------------
  528|      0|		return TAG_SVG_ATT_fullscreen;
  529|      0|	case 35:
  ------------------
  |  Branch (529:2): [True: 0, False: 5]
  ------------------
  530|      0|		return TAG_SVG_ATT_gradientUnits;
  531|      0|	case 36:
  ------------------
  |  Branch (531:2): [True: 0, False: 5]
  ------------------
  532|      0|		return TAG_XMLEV_ATT_handler;
  533|      0|	case 37:
  ------------------
  |  Branch (533:2): [True: 0, False: 5]
  ------------------
  534|      0|		return TAG_SVG_ATT_height;
  535|      0|	case 38:
  ------------------
  |  Branch (535:2): [True: 0, False: 5]
  ------------------
  536|      0|		return TAG_SVG_ATT_image_rendering;
  537|      0|	case 39:
  ------------------
  |  Branch (537:2): [True: 0, False: 5]
  ------------------
  538|      0|		return TAG_SVG_ATT_keyPoints;
  539|      0|	case 40:
  ------------------
  |  Branch (539:2): [True: 0, False: 5]
  ------------------
  540|      0|		return TAG_SVG_ATT_keySplines;
  541|      0|	case 41:
  ------------------
  |  Branch (541:2): [True: 0, False: 5]
  ------------------
  542|      0|		return TAG_SVG_ATT_keyTimes;
  543|      0|	case 42:
  ------------------
  |  Branch (543:2): [True: 0, False: 5]
  ------------------
  544|      0|		return TAG_SVG_ATT_line_increment;
  545|      0|	case 43:
  ------------------
  |  Branch (545:2): [True: 0, False: 5]
  ------------------
  546|      0|		return TAG_XMLEV_ATT_target;
  547|      0|	case 44:
  ------------------
  |  Branch (547:2): [True: 0, False: 5]
  ------------------
  548|      0|		return TAG_SVG_ATT_mediaCharacterEncoding;
  549|      0|	case 45:
  ------------------
  |  Branch (549:2): [True: 0, False: 5]
  ------------------
  550|      0|		return TAG_SVG_ATT_mediaContentEncodings;
  551|      0|	case 46:
  ------------------
  |  Branch (551:2): [True: 0, False: 5]
  ------------------
  552|      0|		return TAG_SVG_ATT_mediaSize;
  553|      0|	case 47:
  ------------------
  |  Branch (553:2): [True: 0, False: 5]
  ------------------
  554|      0|		return TAG_SVG_ATT_mediaTime;
  555|      0|	case 48:
  ------------------
  |  Branch (555:2): [True: 0, False: 5]
  ------------------
  556|      0|		return TAG_SVG_ATT_nav_down;
  557|      0|	case 49:
  ------------------
  |  Branch (557:2): [True: 0, False: 5]
  ------------------
  558|      0|		return TAG_SVG_ATT_nav_down_left;
  559|      0|	case 50:
  ------------------
  |  Branch (559:2): [True: 0, False: 5]
  ------------------
  560|      0|		return TAG_SVG_ATT_nav_down_right;
  561|      0|	case 51:
  ------------------
  |  Branch (561:2): [True: 0, False: 5]
  ------------------
  562|      0|		return TAG_SVG_ATT_nav_left;
  563|      0|	case 52:
  ------------------
  |  Branch (563:2): [True: 0, False: 5]
  ------------------
  564|      0|		return TAG_SVG_ATT_nav_next;
  565|      0|	case 53:
  ------------------
  |  Branch (565:2): [True: 0, False: 5]
  ------------------
  566|      0|		return TAG_SVG_ATT_nav_prev;
  567|      0|	case 54:
  ------------------
  |  Branch (567:2): [True: 0, False: 5]
  ------------------
  568|      0|		return TAG_SVG_ATT_nav_right;
  569|      0|	case 55:
  ------------------
  |  Branch (569:2): [True: 0, False: 5]
  ------------------
  570|      0|		return TAG_SVG_ATT_nav_up;
  571|      0|	case 56:
  ------------------
  |  Branch (571:2): [True: 0, False: 5]
  ------------------
  572|      0|		return TAG_SVG_ATT_nav_up_left;
  573|      0|	case 57:
  ------------------
  |  Branch (573:2): [True: 0, False: 5]
  ------------------
  574|      0|		return TAG_SVG_ATT_nav_up_right;
  575|      0|	case 58:
  ------------------
  |  Branch (575:2): [True: 0, False: 5]
  ------------------
  576|      0|		return TAG_XMLEV_ATT_observer;
  577|      0|	case 59:
  ------------------
  |  Branch (577:2): [True: 0, False: 5]
  ------------------
  578|      0|		return TAG_SVG_ATT_offset;
  579|      0|	case 60:
  ------------------
  |  Branch (579:2): [True: 0, False: 5]
  ------------------
  580|      0|		return TAG_SVG_ATT_opacity;
  581|      0|	case 61:
  ------------------
  |  Branch (581:2): [True: 0, False: 5]
  ------------------
  582|      0|		return TAG_SVG_ATT_overflow;
  583|      0|	case 62:
  ------------------
  |  Branch (583:2): [True: 0, False: 5]
  ------------------
  584|      0|		return TAG_SVG_ATT_overlay;
  585|      0|	case 63:
  ------------------
  |  Branch (585:2): [True: 0, False: 5]
  ------------------
  586|      0|		return TAG_SVG_ATT_path;
  587|      0|	case 64:
  ------------------
  |  Branch (587:2): [True: 0, False: 5]
  ------------------
  588|      0|		return TAG_SVG_ATT_pathLength;
  589|      0|	case 65:
  ------------------
  |  Branch (589:2): [True: 0, False: 5]
  ------------------
  590|      0|		return TAG_SVG_ATT_pointer_events;
  591|      0|	case 66:
  ------------------
  |  Branch (591:2): [True: 0, False: 5]
  ------------------
  592|      0|		return TAG_SVG_ATT_points;
  593|      0|	case 67:
  ------------------
  |  Branch (593:2): [True: 0, False: 5]
  ------------------
  594|      0|		return TAG_SVG_ATT_preserveAspectRatio;
  595|      0|	case 68:
  ------------------
  |  Branch (595:2): [True: 0, False: 5]
  ------------------
  596|      0|		return TAG_SVG_ATT_r;
  597|      0|	case 69:
  ------------------
  |  Branch (597:2): [True: 0, False: 5]
  ------------------
  598|      0|		return TAG_SVG_ATT_repeatCount;
  599|      0|	case 70:
  ------------------
  |  Branch (599:2): [True: 0, False: 5]
  ------------------
  600|      0|		return TAG_SVG_ATT_repeatDur;
  601|      0|	case 71:
  ------------------
  |  Branch (601:2): [True: 0, False: 5]
  ------------------
  602|      0|		return TAG_SVG_ATT_requiredExtensions;
  603|      0|	case 72:
  ------------------
  |  Branch (603:2): [True: 0, False: 5]
  ------------------
  604|      0|		return TAG_SVG_ATT_requiredFeatures;
  605|      0|	case 73:
  ------------------
  |  Branch (605:2): [True: 0, False: 5]
  ------------------
  606|      0|		return TAG_SVG_ATT_requiredFormats;
  607|      0|	case 74:
  ------------------
  |  Branch (607:2): [True: 0, False: 5]
  ------------------
  608|      0|		return TAG_SVG_ATT_restart;
  609|      1|	case 75:
  ------------------
  |  Branch (609:2): [True: 1, False: 4]
  ------------------
  610|      1|		return TAG_SVG_ATT_rotate;
  611|      0|	case 76:
  ------------------
  |  Branch (611:2): [True: 0, False: 5]
  ------------------
  612|      0|		return TAG_LSR_ATT_rotation;
  613|      0|	case 77:
  ------------------
  |  Branch (613:2): [True: 0, False: 5]
  ------------------
  614|      0|		return TAG_SVG_ATT_rx;
  615|      0|	case 78:
  ------------------
  |  Branch (615:2): [True: 0, False: 5]
  ------------------
  616|      0|		return TAG_SVG_ATT_ry;
  617|      0|	case 79:
  ------------------
  |  Branch (617:2): [True: 0, False: 5]
  ------------------
  618|      0|		return TAG_LSR_ATT_scale;
  619|      0|	case 80:
  ------------------
  |  Branch (619:2): [True: 0, False: 5]
  ------------------
  620|      0|		return TAG_SVG_ATT_shape_rendering;
  621|      0|	case 81:
  ------------------
  |  Branch (621:2): [True: 0, False: 5]
  ------------------
  622|      0|		return TAG_SVG_ATT_size;
  623|      0|	case 82:
  ------------------
  |  Branch (623:2): [True: 0, False: 5]
  ------------------
  624|      0|		return TAG_SVG_ATT_solid_color;
  625|      0|	case 83:
  ------------------
  |  Branch (625:2): [True: 0, False: 5]
  ------------------
  626|      0|		return TAG_SVG_ATT_solid_opacity;
  627|      0|	case 84:
  ------------------
  |  Branch (627:2): [True: 0, False: 5]
  ------------------
  628|      0|		return TAG_SVG_ATT_stop_color;
  629|      0|	case 85:
  ------------------
  |  Branch (629:2): [True: 0, False: 5]
  ------------------
  630|      0|		return TAG_SVG_ATT_stop_opacity;
  631|      0|	case 86:
  ------------------
  |  Branch (631:2): [True: 0, False: 5]
  ------------------
  632|      0|		return TAG_SVG_ATT_stroke;
  633|      0|	case 87:
  ------------------
  |  Branch (633:2): [True: 0, False: 5]
  ------------------
  634|      0|		return TAG_SVG_ATT_stroke_dasharray;
  635|      0|	case 88:
  ------------------
  |  Branch (635:2): [True: 0, False: 5]
  ------------------
  636|      0|		return TAG_SVG_ATT_stroke_dashoffset;
  637|      0|	case 89:
  ------------------
  |  Branch (637:2): [True: 0, False: 5]
  ------------------
  638|      0|		return TAG_SVG_ATT_stroke_linecap;
  639|      0|	case 90:
  ------------------
  |  Branch (639:2): [True: 0, False: 5]
  ------------------
  640|      0|		return TAG_SVG_ATT_stroke_linejoin;
  641|      0|	case 91:
  ------------------
  |  Branch (641:2): [True: 0, False: 5]
  ------------------
  642|      0|		return TAG_SVG_ATT_stroke_miterlimit;
  643|      0|	case 92:
  ------------------
  |  Branch (643:2): [True: 0, False: 5]
  ------------------
  644|      0|		return TAG_SVG_ATT_stroke_opacity;
  645|      0|	case 93:
  ------------------
  |  Branch (645:2): [True: 0, False: 5]
  ------------------
  646|      0|		return TAG_SVG_ATT_stroke_width;
  647|      0|	case 94:
  ------------------
  |  Branch (647:2): [True: 0, False: 5]
  ------------------
  648|      0|		return TAG_LSR_ATT_svg_height;
  649|      0|	case 95:
  ------------------
  |  Branch (649:2): [True: 0, False: 5]
  ------------------
  650|      0|		return TAG_LSR_ATT_svg_width;
  651|      0|	case 96:
  ------------------
  |  Branch (651:2): [True: 0, False: 5]
  ------------------
  652|      0|		return TAG_SVG_ATT_syncBehavior;
  653|      0|	case 97:
  ------------------
  |  Branch (653:2): [True: 0, False: 5]
  ------------------
  654|      0|		return TAG_SVG_ATT_syncBehaviorDefault;
  655|      0|	case 98:
  ------------------
  |  Branch (655:2): [True: 0, False: 5]
  ------------------
  656|      0|		return TAG_SVG_ATT_syncReference;
  657|      0|	case 99:
  ------------------
  |  Branch (657:2): [True: 0, False: 5]
  ------------------
  658|      0|		return TAG_SVG_ATT_syncTolerance;
  659|      0|	case 100:
  ------------------
  |  Branch (659:2): [True: 0, False: 5]
  ------------------
  660|      0|		return TAG_SVG_ATT_syncToleranceDefault;
  661|      0|	case 101:
  ------------------
  |  Branch (661:2): [True: 0, False: 5]
  ------------------
  662|      0|		return TAG_SVG_ATT_systemLanguage;
  663|      0|	case 102:
  ------------------
  |  Branch (663:2): [True: 0, False: 5]
  ------------------
  664|      0|		return TAG_SVG_ATT_text_align;
  665|      0|	case 103:
  ------------------
  |  Branch (665:2): [True: 0, False: 5]
  ------------------
  666|      0|		return TAG_SVG_ATT_text_anchor;
  667|      0|	case 104:
  ------------------
  |  Branch (667:2): [True: 0, False: 5]
  ------------------
  668|      0|		return TAG_SVG_ATT_text_decoration;
  669|      0|	case 105:
  ------------------
  |  Branch (669:2): [True: 0, False: 5]
  ------------------
  670|      0|		return TAG_LSR_ATT_text_display;
  671|      0|	case 106:
  ------------------
  |  Branch (671:2): [True: 0, False: 5]
  ------------------
  672|      0|		return TAG_SVG_ATT_text_rendering;
  673|      0|	case 107:
  ------------------
  |  Branch (673:2): [True: 0, False: 5]
  ------------------
  674|      0|		return TAG_LSR_ATT_textContent;
  675|      0|	case 108:
  ------------------
  |  Branch (675:2): [True: 0, False: 5]
  ------------------
  676|      0|		return TAG_SVG_ATT_transform;
  677|      0|	case 109:
  ------------------
  |  Branch (677:2): [True: 0, False: 5]
  ------------------
  678|      0|		return TAG_SVG_ATT_transformBehavior;
  679|      0|	case 110:
  ------------------
  |  Branch (679:2): [True: 0, False: 5]
  ------------------
  680|      0|		return TAG_LSR_ATT_translation;
  681|      0|	case 111:
  ------------------
  |  Branch (681:2): [True: 0, False: 5]
  ------------------
  682|      0|		return TAG_SVG_ATT_vector_effect;
  683|      0|	case 112:
  ------------------
  |  Branch (683:2): [True: 0, False: 5]
  ------------------
  684|      0|		return TAG_SVG_ATT_viewBox;
  685|      0|	case 113:
  ------------------
  |  Branch (685:2): [True: 0, False: 5]
  ------------------
  686|      0|		return TAG_SVG_ATT_viewport_fill;
  687|      0|	case 114:
  ------------------
  |  Branch (687:2): [True: 0, False: 5]
  ------------------
  688|      0|		return TAG_SVG_ATT_viewport_fill_opacity;
  689|      0|	case 115:
  ------------------
  |  Branch (689:2): [True: 0, False: 5]
  ------------------
  690|      0|		return TAG_SVG_ATT_visibility;
  691|      0|	case 116:
  ------------------
  |  Branch (691:2): [True: 0, False: 5]
  ------------------
  692|      0|		return TAG_SVG_ATT_width;
  693|      0|	case 117:
  ------------------
  |  Branch (693:2): [True: 0, False: 5]
  ------------------
  694|      0|		return TAG_SVG_ATT_x;
  695|      0|	case 118:
  ------------------
  |  Branch (695:2): [True: 0, False: 5]
  ------------------
  696|      0|		return TAG_SVG_ATT_x1;
  697|      0|	case 119:
  ------------------
  |  Branch (697:2): [True: 0, False: 5]
  ------------------
  698|      0|		return TAG_SVG_ATT_x2;
  699|      0|	case 120:
  ------------------
  |  Branch (699:2): [True: 0, False: 5]
  ------------------
  700|      0|		return TAG_XLINK_ATT_actuate;
  701|      0|	case 121:
  ------------------
  |  Branch (701:2): [True: 0, False: 5]
  ------------------
  702|      0|		return TAG_XLINK_ATT_arcrole;
  703|      0|	case 122:
  ------------------
  |  Branch (703:2): [True: 0, False: 5]
  ------------------
  704|      0|		return TAG_XLINK_ATT_href;
  705|      0|	case 123:
  ------------------
  |  Branch (705:2): [True: 0, False: 5]
  ------------------
  706|      0|		return TAG_XLINK_ATT_role;
  707|      0|	case 124:
  ------------------
  |  Branch (707:2): [True: 0, False: 5]
  ------------------
  708|      0|		return TAG_XLINK_ATT_show;
  709|      0|	case 125:
  ------------------
  |  Branch (709:2): [True: 0, False: 5]
  ------------------
  710|      0|		return TAG_XLINK_ATT_title;
  711|      0|	case 126:
  ------------------
  |  Branch (711:2): [True: 0, False: 5]
  ------------------
  712|      0|		return TAG_XLINK_ATT_type;
  713|      0|	case 127:
  ------------------
  |  Branch (713:2): [True: 0, False: 5]
  ------------------
  714|      0|		return TAG_XML_ATT_base;
  715|      0|	case 128:
  ------------------
  |  Branch (715:2): [True: 0, False: 5]
  ------------------
  716|      0|		return TAG_XML_ATT_lang;
  717|      0|	case 129:
  ------------------
  |  Branch (717:2): [True: 0, False: 5]
  ------------------
  718|      0|		return TAG_SVG_ATT_y;
  719|      0|	case 130:
  ------------------
  |  Branch (719:2): [True: 0, False: 5]
  ------------------
  720|      0|		return TAG_SVG_ATT_y1;
  721|      0|	case 131:
  ------------------
  |  Branch (721:2): [True: 0, False: 5]
  ------------------
  722|      0|		return TAG_SVG_ATT_y2;
  723|      0|	case 132:
  ------------------
  |  Branch (723:2): [True: 0, False: 5]
  ------------------
  724|      0|		return TAG_SVG_ATT_zoomAndPan;
  725|      4|	default:
  ------------------
  |  Branch (725:2): [True: 4, False: 1]
  ------------------
  726|      4|		return -1;
  727|      5|	}
  728|      5|}
gf_lsr_rare_type_to_attribute:
  732|    810|s32 gf_lsr_rare_type_to_attribute(u32 tag) {
  733|    810|	switch(tag) {
  734|      2|	case 0:
  ------------------
  |  Branch (734:2): [True: 2, False: 808]
  ------------------
  735|      2|		return TAG_SVG_ATT__class;
  736|     15|	case 1:
  ------------------
  |  Branch (736:2): [True: 15, False: 795]
  ------------------
  737|     15|		return TAG_SVG_ATT_audio_level;
  738|     15|	case 2:
  ------------------
  |  Branch (738:2): [True: 15, False: 795]
  ------------------
  739|     15|		return TAG_SVG_ATT_color;
  740|     13|	case 3:
  ------------------
  |  Branch (740:2): [True: 13, False: 797]
  ------------------
  741|     13|		return TAG_SVG_ATT_color_rendering;
  742|      5|	case 4:
  ------------------
  |  Branch (742:2): [True: 5, False: 805]
  ------------------
  743|      5|		return TAG_SVG_ATT_display;
  744|      6|	case 5:
  ------------------
  |  Branch (744:2): [True: 6, False: 804]
  ------------------
  745|      6|		return TAG_SVG_ATT_display_align;
  746|     22|	case 6:
  ------------------
  |  Branch (746:2): [True: 22, False: 788]
  ------------------
  747|     22|		return TAG_SVG_ATT_fill_opacity;
  748|      6|	case 7:
  ------------------
  |  Branch (748:2): [True: 6, False: 804]
  ------------------
  749|      6|		return TAG_SVG_ATT_fill_rule;
  750|     21|	case 8:
  ------------------
  |  Branch (750:2): [True: 21, False: 789]
  ------------------
  751|     21|		return TAG_SVG_ATT_image_rendering;
  752|      9|	case 9:
  ------------------
  |  Branch (752:2): [True: 9, False: 801]
  ------------------
  753|      9|		return TAG_SVG_ATT_line_increment;
  754|      5|	case 10:
  ------------------
  |  Branch (754:2): [True: 5, False: 805]
  ------------------
  755|      5|		return TAG_SVG_ATT_pointer_events;
  756|      7|	case 11:
  ------------------
  |  Branch (756:2): [True: 7, False: 803]
  ------------------
  757|      7|		return TAG_SVG_ATT_shape_rendering;
  758|     12|	case 12:
  ------------------
  |  Branch (758:2): [True: 12, False: 798]
  ------------------
  759|     12|		return TAG_SVG_ATT_solid_color;
  760|      8|	case 13:
  ------------------
  |  Branch (760:2): [True: 8, False: 802]
  ------------------
  761|      8|		return TAG_SVG_ATT_solid_opacity;
  762|     18|	case 14:
  ------------------
  |  Branch (762:2): [True: 18, False: 792]
  ------------------
  763|     18|		return TAG_SVG_ATT_stop_color;
  764|      8|	case 15:
  ------------------
  |  Branch (764:2): [True: 8, False: 802]
  ------------------
  765|      8|		return TAG_SVG_ATT_stop_opacity;
  766|     11|	case 16:
  ------------------
  |  Branch (766:2): [True: 11, False: 799]
  ------------------
  767|     11|		return TAG_SVG_ATT_stroke_dasharray;
  768|     14|	case 17:
  ------------------
  |  Branch (768:2): [True: 14, False: 796]
  ------------------
  769|     14|		return TAG_SVG_ATT_stroke_dashoffset;
  770|      8|	case 18:
  ------------------
  |  Branch (770:2): [True: 8, False: 802]
  ------------------
  771|      8|		return TAG_SVG_ATT_stroke_linecap;
  772|      9|	case 19:
  ------------------
  |  Branch (772:2): [True: 9, False: 801]
  ------------------
  773|      9|		return TAG_SVG_ATT_stroke_linejoin;
  774|      3|	case 20:
  ------------------
  |  Branch (774:2): [True: 3, False: 807]
  ------------------
  775|      3|		return TAG_SVG_ATT_stroke_miterlimit;
  776|     10|	case 21:
  ------------------
  |  Branch (776:2): [True: 10, False: 800]
  ------------------
  777|     10|		return TAG_SVG_ATT_stroke_opacity;
  778|      9|	case 22:
  ------------------
  |  Branch (778:2): [True: 9, False: 801]
  ------------------
  779|      9|		return TAG_SVG_ATT_stroke_width;
  780|      5|	case 23:
  ------------------
  |  Branch (780:2): [True: 5, False: 805]
  ------------------
  781|      5|		return TAG_SVG_ATT_text_anchor;
  782|     30|	case 24:
  ------------------
  |  Branch (782:2): [True: 30, False: 780]
  ------------------
  783|     30|		return TAG_SVG_ATT_text_rendering;
  784|     34|	case 25:
  ------------------
  |  Branch (784:2): [True: 34, False: 776]
  ------------------
  785|     34|		return TAG_SVG_ATT_viewport_fill;
  786|     10|	case 26:
  ------------------
  |  Branch (786:2): [True: 10, False: 800]
  ------------------
  787|     10|		return TAG_SVG_ATT_viewport_fill_opacity;
  788|     40|	case 27:
  ------------------
  |  Branch (788:2): [True: 40, False: 770]
  ------------------
  789|     40|		return TAG_SVG_ATT_vector_effect;
  790|     27|	case 28:
  ------------------
  |  Branch (790:2): [True: 27, False: 783]
  ------------------
  791|     27|		return TAG_SVG_ATT_visibility;
  792|     25|	case 29:
  ------------------
  |  Branch (792:2): [True: 25, False: 785]
  ------------------
  793|     25|		return TAG_SVG_ATT_requiredExtensions;
  794|      4|	case 30:
  ------------------
  |  Branch (794:2): [True: 4, False: 806]
  ------------------
  795|      4|		return TAG_SVG_ATT_requiredFeatures;
  796|      1|	case 31:
  ------------------
  |  Branch (796:2): [True: 1, False: 809]
  ------------------
  797|      1|		return TAG_SVG_ATT_requiredFormats;
  798|     23|	case 32:
  ------------------
  |  Branch (798:2): [True: 23, False: 787]
  ------------------
  799|     23|		return TAG_SVG_ATT_systemLanguage;
  800|     17|	case 33:
  ------------------
  |  Branch (800:2): [True: 17, False: 793]
  ------------------
  801|     17|		return TAG_XML_ATT_base;
  802|      4|	case 34:
  ------------------
  |  Branch (802:2): [True: 4, False: 806]
  ------------------
  803|      4|		return TAG_XML_ATT_lang;
  804|     18|	case 35:
  ------------------
  |  Branch (804:2): [True: 18, False: 792]
  ------------------
  805|     18|		return TAG_XML_ATT_space;
  806|      7|	case 36:
  ------------------
  |  Branch (806:2): [True: 7, False: 803]
  ------------------
  807|      7|		return TAG_SVG_ATT_nav_next;
  808|      9|	case 37:
  ------------------
  |  Branch (808:2): [True: 9, False: 801]
  ------------------
  809|      9|		return TAG_SVG_ATT_nav_up;
  810|      8|	case 38:
  ------------------
  |  Branch (810:2): [True: 8, False: 802]
  ------------------
  811|      8|		return TAG_SVG_ATT_nav_up_left;
  812|      9|	case 39:
  ------------------
  |  Branch (812:2): [True: 9, False: 801]
  ------------------
  813|      9|		return TAG_SVG_ATT_nav_up_right;
  814|     11|	case 40:
  ------------------
  |  Branch (814:2): [True: 11, False: 799]
  ------------------
  815|     11|		return TAG_SVG_ATT_nav_prev;
  816|     15|	case 41:
  ------------------
  |  Branch (816:2): [True: 15, False: 795]
  ------------------
  817|     15|		return TAG_SVG_ATT_nav_down;
  818|      5|	case 42:
  ------------------
  |  Branch (818:2): [True: 5, False: 805]
  ------------------
  819|      5|		return TAG_SVG_ATT_nav_down_left;
  820|      3|	case 43:
  ------------------
  |  Branch (820:2): [True: 3, False: 807]
  ------------------
  821|      3|		return TAG_SVG_ATT_nav_down_right;
  822|     21|	case 44:
  ------------------
  |  Branch (822:2): [True: 21, False: 789]
  ------------------
  823|     21|		return TAG_SVG_ATT_nav_left;
  824|      5|	case 45:
  ------------------
  |  Branch (824:2): [True: 5, False: 805]
  ------------------
  825|      5|		return TAG_SVG_ATT_focusable;
  826|     14|	case 46:
  ------------------
  |  Branch (826:2): [True: 14, False: 796]
  ------------------
  827|     14|		return TAG_SVG_ATT_nav_right;
  828|      5|	case 47:
  ------------------
  |  Branch (828:2): [True: 5, False: 805]
  ------------------
  829|      5|		return TAG_SVG_ATT_transform;
  830|     18|	case 48:
  ------------------
  |  Branch (830:2): [True: 18, False: 792]
  ------------------
  831|     18|		return TAG_SVG_ATT_text_decoration;
  832|     32|	case 50:
  ------------------
  |  Branch (832:2): [True: 32, False: 778]
  ------------------
  833|     32|		return TAG_SVG_ATT_font_variant;
  834|     21|	case 51:
  ------------------
  |  Branch (834:2): [True: 21, False: 789]
  ------------------
  835|     21|		return TAG_SVG_ATT_font_family;
  836|     20|	case 52:
  ------------------
  |  Branch (836:2): [True: 20, False: 790]
  ------------------
  837|     20|		return TAG_SVG_ATT_font_size;
  838|      4|	case 53:
  ------------------
  |  Branch (838:2): [True: 4, False: 806]
  ------------------
  839|      4|		return TAG_SVG_ATT_font_style;
  840|      8|	case 54:
  ------------------
  |  Branch (840:2): [True: 8, False: 802]
  ------------------
  841|      8|		return TAG_SVG_ATT_font_weight;
  842|     22|	case 55:
  ------------------
  |  Branch (842:2): [True: 22, False: 788]
  ------------------
  843|     22|		return TAG_XLINK_ATT_title;
  844|      2|	case 56:
  ------------------
  |  Branch (844:2): [True: 2, False: 808]
  ------------------
  845|      2|		return TAG_XLINK_ATT_type;
  846|     30|	case 57:
  ------------------
  |  Branch (846:2): [True: 30, False: 780]
  ------------------
  847|     30|		return TAG_XLINK_ATT_role;
  848|     20|	case 58:
  ------------------
  |  Branch (848:2): [True: 20, False: 790]
  ------------------
  849|     20|		return TAG_XLINK_ATT_arcrole;
  850|      7|	case 59:
  ------------------
  |  Branch (850:2): [True: 7, False: 803]
  ------------------
  851|      7|		return TAG_XLINK_ATT_actuate;
  852|      3|	case 60:
  ------------------
  |  Branch (852:2): [True: 3, False: 807]
  ------------------
  853|      3|		return TAG_XLINK_ATT_show;
  854|      1|	case 61:
  ------------------
  |  Branch (854:2): [True: 1, False: 809]
  ------------------
  855|      1|		return TAG_SVG_ATT_end;
  856|      2|	case 62:
  ------------------
  |  Branch (856:2): [True: 2, False: 808]
  ------------------
  857|      2|		return TAG_SVG_ATT_max;
  858|     34|	case 63:
  ------------------
  |  Branch (858:2): [True: 34, False: 776]
  ------------------
  859|     34|		return TAG_SVG_ATT_min;
  860|      0|	default:
  ------------------
  |  Branch (860:2): [True: 0, False: 810]
  ------------------
  861|      0|		return -1;
  862|    810|	}
  863|    810|}

gf_sg_new:
   51|     29|{
   52|     29|	GF_SceneGraph *tmp;
   53|     29|	GF_SAFEALLOC(tmp, GF_SceneGraph);
  ------------------
  |  |  242|     29|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     29|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     29|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 29, False: 0]
  |  |  ------------------
  |  |  245|     29|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     29|		}\
  |  |  247|     29|	}
  ------------------
   54|     29|	if (!tmp) return NULL;
  ------------------
  |  Branch (54:6): [True: 0, False: 29]
  ------------------
   55|       |
   56|     29|	tmp->exported_nodes = gf_list_new();
   57|       |
   58|     29|#ifndef GPAC_DISABLE_VRML
   59|     29|	tmp->protos = gf_list_new();
   60|     29|	tmp->unregistered_protos = gf_list_new();
   61|     29|	tmp->Routes = gf_list_new();
   62|     29|	tmp->routes_to_activate = gf_list_new();
   63|     29|	tmp->routes_to_destroy = gf_list_new();
   64|     29|#endif
   65|       |
   66|     29|#ifndef GPAC_DISABLE_SVG
   67|     29|	tmp->dom_evt_mx = gf_mx_new("DOMEvent");
   68|     29|	tmp->dom_evt = gf_dom_event_target_new(GF_DOM_EVENT_TARGET_DOCUMENT, tmp);
   69|     29|	tmp->xlink_hrefs = gf_list_new();
   70|     29|	tmp->smil_timed_elements = gf_list_new();
   71|     29|	tmp->modified_smil_timed_elements = gf_list_new();
   72|     29|	tmp->listeners_to_add = gf_list_new();
   73|     29|#endif
   74|       |
   75|     29|#ifdef GPAC_HAS_QJS
   76|     29|	tmp->scripts = gf_list_new();
   77|     29|	tmp->objects = gf_list_new();
   78|     29|#endif
   79|     29|	tmp->on_node_modified = node_modif_stub;
   80|       |
   81|       |	//test some functions only used in weird smil anim or dom JS, and not addressed in test suite
   82|       |#ifdef GPAC_ENABLE_COVERAGE
   83|       |	if (gf_sys_is_cov_mode()) {
   84|       |		node_modif_stub(NULL, NULL, NULL, NULL);
   85|       |		gf_node_remove_id(NULL);
   86|       |		gf_node_list_get_child(NULL, 0);
   87|       |		gf_node_get_parent_count(NULL);
   88|       |		gf_node_get_num_instances(NULL);
   89|       |		gf_node_get_log_name(NULL);
   90|       |		gf_sg_get_namespace(NULL, 0);
   91|       |		gf_node_parent_of(NULL, NULL);
   92|       |		gf_sg_get_parent(tmp);
   93|       |		gf_node_get_attribute_count(NULL);
   94|       |		gf_sg_xml_node_clone(NULL, NULL, NULL, NULL, 0);
   95|       |		gf_dom_flatten_textContent(NULL);
   96|       |		gf_smil_timing_pause(NULL);
   97|       |		gf_smil_timing_resume(NULL);
   98|       |		gf_smil_get_media_duration(NULL);
   99|       |	}
  100|       |#endif
  101|     29|	return tmp;
  102|     29|}
gf_node_get_scene_time:
  144|      2|{
  145|      2|	if (!node || !node->sgprivate->scenegraph->GetSceneTime) return 0.0;
  ------------------
  |  Branch (145:6): [True: 0, False: 2]
  |  Branch (145:15): [True: 2, False: 0]
  ------------------
  146|      0|	return node->sgprivate->scenegraph->GetSceneTime(node->sgprivate->scenegraph->userpriv);
  147|      2|}
gf_sg_del:
  152|     29|{
  153|     29|	if (!sg) return;
  ------------------
  |  Branch (153:6): [True: 0, False: 29]
  ------------------
  154|     29|	if (sg->destroy_cookie)
  ------------------
  |  Branch (154:6): [True: 0, False: 29]
  ------------------
  155|      0|		*sg->destroy_cookie = GF_TRUE;
  156|       |
  157|     29|#ifndef GPAC_DISABLE_VRML
  158|     29|	if (sg->global_qp) {
  ------------------
  |  Branch (158:6): [True: 0, False: 29]
  ------------------
  159|      0|		gf_node_unregister(sg->global_qp, NULL);
  160|      0|		sg->global_qp = NULL;
  161|      0|	}
  162|     29|#endif
  163|       |
  164|     29|	gf_sg_reset(sg);
  165|       |
  166|     29|#ifndef GPAC_DISABLE_SVG
  167|       |
  168|     29|	gf_dom_event_target_del(sg->dom_evt);
  169|     29|	gf_list_del(sg->xlink_hrefs);
  170|     29|	gf_list_del(sg->smil_timed_elements);
  171|     29|	gf_list_del(sg->modified_smil_timed_elements);
  172|     29|	gf_list_del(sg->listeners_to_add);
  173|     29|	gf_mx_del(sg->dom_evt_mx);
  174|     29|#endif
  175|       |
  176|     29|#ifdef GPAC_HAS_QJS
  177|     29|	gf_list_del(sg->scripts);
  178|     29|	sg->scripts = NULL;
  179|     29|	gf_list_del(sg->objects);
  180|     29|	sg->objects = NULL;
  181|     29|#ifndef GPAC_DISABLE_SVG
  182|     29|	if (sg->svg_js) {
  ------------------
  |  Branch (182:6): [True: 0, False: 29]
  ------------------
  183|      0|		void gf_svg_script_context_del(void *svg_js, GF_SceneGraph *scenegraph);
  184|      0|		gf_svg_script_context_del(sg->svg_js, sg);
  185|      0|	}
  186|     29|#endif
  187|       |
  188|     29|#endif //GPAC_HAS_QJS
  189|       |
  190|     29|#ifndef GPAC_DISABLE_VRML
  191|     29|	gf_list_del(sg->Routes);
  192|     29|	gf_list_del(sg->protos);
  193|     29|	gf_list_del(sg->unregistered_protos);
  194|     29|	gf_list_del(sg->routes_to_activate);
  195|     29|	gf_list_del(sg->routes_to_destroy);
  196|     29|#endif
  197|     29|	gf_list_del(sg->exported_nodes);
  198|     29|	gf_free(sg);
  199|     29|}
gf_sg_reset:
  329|     43|{
  330|     43|	GF_SceneGraph *par;
  331|     43|	GF_List *gc;
  332|     43|#ifndef GPAC_DISABLE_SVG
  333|     43|	u32 type;
  334|     43|#endif
  335|     43|	u32 count;
  336|     43|	NodeIDedItem *reg_node;
  337|     43|	if (!sg) return;
  ------------------
  |  Branch (337:6): [True: 0, False: 43]
  ------------------
  338|       |
  339|     43|	GF_LOG(GF_LOG_DEBUG, GF_LOG_SCENE, ("[SceneGraph] resetting scene graph\n"));
  ------------------
  |  | 1086|     43|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 43]
  |  |  ------------------
  ------------------
  340|       |#if 0
  341|       |	/*inline graph, remove any of this graph nodes from the parent graph*/
  342|       |	if (!sg->pOwningProto && sg->parent_scene) {
  343|       |		GF_SceneGraph *par = sg->parent_scene;
  344|       |		while (par->parent_scene) par = par->parent_scene;
  345|       |		if (par->RootNode) SG_GraphRemoved(par->RootNode, sg);
  346|       |	}
  347|       |#endif
  348|       |
  349|     43|	gc = gf_list_new();
  350|     43|#ifdef GPAC_HAS_QJS
  351|       |	/*scripts are the first source of cylic references in the graph. In order to clean properly
  352|       |	force a remove of all script nodes, this will release all references to nodes in JS*/
  353|     43|	while (gf_list_count(sg->scripts)) {
  ------------------
  |  Branch (353:9): [True: 0, False: 43]
  ------------------
  354|      0|		GF_Node *n = gf_list_get(sg->scripts, 0);
  355|      0|		gf_list_rem(sg->scripts, 0);
  356|       |		/*prevent destroy*/
  357|      0|		gf_node_register(n, NULL);
  358|       |		/*remove from all parents*/
  359|      0|		gf_node_replace(n, NULL, 0);
  360|       |		/*FORCE destroy in case the script refers to itself*/
  361|      0|		n->sgprivate->num_instances=1;
  362|      0|		gf_node_unregister(n, NULL);
  363|       |		/*remember this script was forced to be destroyed*/
  364|      0|		gf_list_add(gc, n);
  365|      0|	}
  366|     43|#endif
  367|       |
  368|     43|#ifndef GPAC_DISABLE_SVG
  369|       |
  370|     43|	gf_mx_p(sg->dom_evt_mx);
  371|       |	/*remove listeners attached to the doc*/
  372|     43|	gf_dom_event_remove_all_listeners(sg->dom_evt, sg);
  373|       |	/*flush any pending add_listener*/
  374|     43|	gf_dom_listener_reset_deferred(sg);
  375|     43|	gf_mx_v(sg->dom_evt_mx);
  376|     43|#endif
  377|       |
  378|     43|#ifndef GPAC_DISABLE_VRML
  379|     43|	while (gf_list_count(sg->routes_to_activate)) {
  ------------------
  |  Branch (379:9): [True: 0, False: 43]
  ------------------
  380|      0|		gf_list_rem(sg->routes_to_activate, 0);
  381|      0|	}
  382|       |
  383|       |	/*destroy all routes*/
  384|     43|	while (gf_list_count(sg->Routes)) {
  ------------------
  |  Branch (384:9): [True: 0, False: 43]
  ------------------
  385|      0|		GF_Route *r = (GF_Route*)gf_list_get(sg->Routes, 0);
  386|       |		/*this will unregister the route from the graph, so don't delete the chain entry*/
  387|      0|		gf_sg_route_del(r);
  388|       |
  389|      0|	}
  390|     43|#endif
  391|       |
  392|       |
  393|       |	/*reset all exported symbols */
  394|     43|	while (gf_list_count(sg->exported_nodes)) {
  ------------------
  |  Branch (394:9): [True: 0, False: 43]
  ------------------
  395|      0|		GF_Node *n = gf_list_get(sg->exported_nodes, 0);
  396|      0|		gf_list_rem(sg->exported_nodes, 0);
  397|      0|		gf_node_replace(n, NULL, 0);
  398|      0|	}
  399|       |	/*reassign the list of exported nodes to our garbage collected nodes*/
  400|     43|	gf_list_del(sg->exported_nodes);
  401|     43|	sg->exported_nodes = gc;
  402|       |
  403|       |	/*reset the main tree*/
  404|     43|	if (sg->RootNode) gf_node_unregister(sg->RootNode, NULL);
  ------------------
  |  Branch (404:6): [True: 14, False: 29]
  ------------------
  405|     43|	sg->RootNode = NULL;
  406|       |
  407|     43|#ifndef GPAC_DISABLE_VRML
  408|     43|	if (!sg->pOwningProto && gf_list_count(sg->protos) && sg->GetExternProtoLib)
  ------------------
  |  Branch (408:6): [True: 43, False: 0]
  |  Branch (408:27): [True: 0, False: 43]
  |  Branch (408:56): [True: 0, False: 0]
  ------------------
  409|      0|		sg->GetExternProtoLib(sg->userpriv, NULL);
  410|     43|#endif
  411|       |
  412|       |	/*WATCHOUT: we may have cyclic dependencies due to
  413|       |	1- a node referencing itself (forbidden in VRML)
  414|       |	2- nodes referred to in commands of conditionals children of this node (MPEG-4 is mute about that)
  415|       |	we recursively preocess from last declared DEF node to first one
  416|       |	*/
  417|     43|restart:
  418|     43|	reg_node = sg->id_node;
  419|     43|	while (reg_node) {
  ------------------
  |  Branch (419:9): [True: 0, False: 43]
  ------------------
  420|       |#if 0
  421|       |		Bool ignore = 0;
  422|       |#endif
  423|      0|		GF_ParentList *nlist;
  424|       |
  425|      0|		GF_Node *node = reg_node->node;
  426|      0|		if (!node
  ------------------
  |  Branch (426:7): [True: 0, False: 0]
  ------------------
  427|      0|#ifndef GPAC_DISABLE_VRML
  428|      0|		        || (node==sg->global_qp)
  ------------------
  |  Branch (428:14): [True: 0, False: 0]
  ------------------
  429|      0|#endif
  430|      0|		   ) {
  431|      0|			reg_node = reg_node->next;
  432|      0|			continue;
  433|      0|		}
  434|       |
  435|       |		/*first replace all instances in parents by NULL WITHOUT UNREGISTERING (to avoid destroying the node).
  436|       |		This will take care of nodes referencing themselves*/
  437|      0|		nlist = node->sgprivate->parents;
  438|      0|#ifndef GPAC_DISABLE_SVG
  439|      0|		type = (node->sgprivate->tag>GF_NODE_RANGE_LAST_VRML) ? 1 : 0;
  ------------------
  |  Branch (439:10): [True: 0, False: 0]
  ------------------
  440|      0|#endif
  441|      0|		while (nlist) {
  ------------------
  |  Branch (441:10): [True: 0, False: 0]
  ------------------
  442|      0|			GF_ParentList *next = nlist->next;
  443|       |#if 0
  444|       |			/*parent is a DEF'ed node, try to clean-up properly?*/
  445|       |			if ((nlist->node!=node) && SG_SearchForNode(sg, nlist->node) != NULL) {
  446|       |				ignore = 1;
  447|       |				break;
  448|       |			}
  449|       |#endif
  450|       |
  451|      0|#ifndef GPAC_DISABLE_SVG
  452|      0|			if (type) {
  ------------------
  |  Branch (452:8): [True: 0, False: 0]
  ------------------
  453|      0|				ReplaceIRINode(nlist->node, node, NULL);
  454|      0|			} else
  455|      0|#endif
  456|      0|				ReplaceDEFNode(nlist->node, reg_node->node, NULL, 0);
  457|       |
  458|       |			/*direct cyclic reference to ourselves, make sure we update the parentList to the next entry before freeing it
  459|       |			since the next parent node could be reg_node again (reg_node->reg_node)*/
  460|      0|			if (nlist->node==node) {
  ------------------
  |  Branch (460:8): [True: 0, False: 0]
  ------------------
  461|      0|				node->sgprivate->parents = next;
  462|      0|			}
  463|       |
  464|      0|			gf_free(nlist);
  465|      0|			nlist = next;
  466|       |#if 0
  467|       |			if (ignore) {
  468|       |				node->sgprivate->parents = nlist;
  469|       |				continue;
  470|       |			}
  471|       |#endif
  472|      0|		}
  473|       |
  474|      0|		node->sgprivate->parents = NULL;
  475|       |
  476|       |		//sg->node_registry[i-1] = NULL;
  477|      0|		count = get_num_id_nodes(sg);
  478|      0|		node->sgprivate->num_instances = 1;
  479|       |		/*remember this node was forced to be destroyed*/
  480|      0|		gf_list_add(sg->exported_nodes, node);
  481|      0|		gf_node_unregister(node, NULL);
  482|      0|		if (count != get_num_id_nodes(sg)) goto restart;
  ------------------
  |  Branch (482:7): [True: 0, False: 0]
  ------------------
  483|      0|		reg_node = reg_node->next;
  484|      0|	}
  485|       |
  486|       |	/*reset the forced destroy ndoes*/
  487|     43|	gf_list_reset(sg->exported_nodes);
  488|       |
  489|     43|#ifndef GPAC_DISABLE_VRML
  490|       |	/*destroy all proto*/
  491|     43|	while (gf_list_count(sg->protos)) {
  ------------------
  |  Branch (491:9): [True: 0, False: 43]
  ------------------
  492|      0|		GF_Proto *p = (GF_Proto *)gf_list_get(sg->protos, 0);
  493|       |		/*this will unregister the proto from the graph, so don't delete the chain entry*/
  494|      0|		gf_sg_proto_del(p);
  495|      0|	}
  496|       |	/*destroy all unregistered proto*/
  497|     43|	while (gf_list_count(sg->unregistered_protos)) {
  ------------------
  |  Branch (497:9): [True: 0, False: 43]
  ------------------
  498|      0|		GF_Proto *p = (GF_Proto *)gf_list_get(sg->unregistered_protos, 0);
  499|       |		/*this will unregister the proto from the graph, so don't delete the chain entry*/
  500|      0|		gf_sg_proto_del(p);
  501|      0|	}
  502|       |
  503|       |	/*last destroy all routes*/
  504|     43|	gf_sg_destroy_routes(sg);
  505|     43|	sg->simulation_tick = 0;
  506|       |
  507|     43|#endif /*GPAC_DISABLE_VRML*/
  508|       |
  509|     43|	while (gf_list_count(sg->ns)) {
  ------------------
  |  Branch (509:9): [True: 0, False: 43]
  ------------------
  510|      0|		GF_XMLNS *ns = gf_list_get(sg->ns, 0);
  511|      0|		gf_list_rem(sg->ns, 0);
  512|      0|		if (ns->name) gf_free(ns->name);
  ------------------
  |  Branch (512:7): [True: 0, False: 0]
  ------------------
  513|      0|		if (ns->qname) gf_free(ns->qname);
  ------------------
  |  Branch (513:7): [True: 0, False: 0]
  ------------------
  514|      0|		gf_free(ns);
  515|      0|	}
  516|     43|	gf_list_del(sg->ns);
  517|     43|	sg->ns = 0;
  518|       |
  519|     43|	par = sg;
  520|     43|	while (par->parent_scene) par = par->parent_scene;
  ------------------
  |  Branch (520:9): [True: 0, False: 43]
  ------------------
  521|       |
  522|     43|#ifndef GPAC_DISABLE_SVG
  523|     43|	if (par != sg) {
  ------------------
  |  Branch (523:6): [True: 0, False: 43]
  ------------------
  524|      0|		u32 i;
  525|      0|		count = gf_list_count(par->smil_timed_elements);
  526|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (526:13): [True: 0, False: 0]
  ------------------
  527|      0|			SMIL_Timing_RTI *rti = gf_list_get(par->smil_timed_elements, i);
  528|      0|			if (rti->timed_elt->sgprivate->scenegraph == sg) {
  ------------------
  |  Branch (528:8): [True: 0, False: 0]
  ------------------
  529|      0|				gf_list_rem(par->smil_timed_elements, i);
  530|      0|				i--;
  531|      0|				count--;
  532|      0|			}
  533|      0|		}
  534|      0|	}
  535|     43|#endif
  536|       |
  537|       |#ifdef GF_SELF_REPLACE_ENABLE
  538|       |	sg->graph_has_been_reset = 1;
  539|       |#endif
  540|     43|	GF_LOG(GF_LOG_DEBUG, GF_LOG_SCENE, ("[SceneGraph] Scene graph has been reset\n"));
  ------------------
  |  | 1086|     43|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 43]
  |  |  ------------------
  ------------------
  541|     43|}
gf_sg_set_scene_size_info:
  583|     17|{
  584|     17|	if (!sg) return;
  ------------------
  |  Branch (584:6): [True: 0, False: 17]
  ------------------
  585|     17|	if (width && height) {
  ------------------
  |  Branch (585:6): [True: 0, False: 17]
  |  Branch (585:15): [True: 0, False: 0]
  ------------------
  586|      0|		sg->width = width;
  587|      0|		sg->height = height;
  588|     17|	} else {
  589|     17|		sg->width = sg->height = 0;
  590|     17|	}
  591|     17|	sg->usePixelMetrics = usePixelMetrics;
  592|     17|}
gf_sg_set_root_node:
  624|     14|{
  625|     14|	if (sg) sg->RootNode = node;
  ------------------
  |  Branch (625:6): [True: 14, False: 0]
  ------------------
  626|     14|}
remove_node_id:
  629|     57|{
  630|     57|	NodeIDedItem *reg_node = sg->id_node;
  631|     57|	if (!reg_node) return;
  ------------------
  |  Branch (631:6): [True: 0, False: 57]
  ------------------
  632|       |
  633|     57|	if (reg_node->node==node) {
  ------------------
  |  Branch (633:6): [True: 14, False: 43]
  ------------------
  634|     14|		sg->id_node = reg_node->next;
  635|     14|		if (sg->id_node_last==reg_node)
  ------------------
  |  Branch (635:7): [True: 6, False: 8]
  ------------------
  636|      6|			sg->id_node_last = reg_node->next;
  637|     14|		if (reg_node->NodeName) gf_free(reg_node->NodeName);
  ------------------
  |  Branch (637:7): [True: 0, False: 14]
  ------------------
  638|     14|		gf_free(reg_node);
  639|     43|	} else {
  640|     43|		NodeIDedItem *to_del;
  641|    218|		while (reg_node->next) {
  ------------------
  |  Branch (641:10): [True: 218, False: 0]
  ------------------
  642|    218|			if (reg_node->next->node!=node) {
  ------------------
  |  Branch (642:8): [True: 175, False: 43]
  ------------------
  643|    175|				reg_node = reg_node->next;
  644|    175|				continue;
  645|    175|			}
  646|     43|			to_del = reg_node->next;
  647|     43|			reg_node->next = to_del->next;
  648|     43|			if (sg->id_node_last==to_del) {
  ------------------
  |  Branch (648:8): [True: 12, False: 31]
  ------------------
  649|     12|				sg->id_node_last = reg_node->next ? reg_node->next : reg_node;
  ------------------
  |  Branch (649:24): [True: 0, False: 12]
  ------------------
  650|     12|			}
  651|     43|			if (to_del->NodeName) gf_free(to_del->NodeName);
  ------------------
  |  Branch (651:8): [True: 0, False: 43]
  ------------------
  652|       |			to_del->NodeName = NULL;
  653|     43|			gf_free(to_del);
  654|     43|			break;
  655|    218|		}
  656|     43|	}
  657|     57|}
gf_node_unregister:
  670|    169|{
  671|    169|#ifndef GPAC_DISABLE_VRML
  672|    169|	u32 j;
  673|    169|#endif
  674|    169|#ifdef GPAC_HAS_QJS
  675|    169|	Bool detach=0;
  676|    169|#endif
  677|    169|	GF_SceneGraph *pSG;
  678|       |
  679|    169|	if (!pNode) return GF_OK;
  ------------------
  |  Branch (679:6): [True: 0, False: 169]
  ------------------
  680|    169|	pSG = pNode->sgprivate->scenegraph;
  681|       |
  682|    169|	if (parentNode) {
  ------------------
  |  Branch (682:6): [True: 155, False: 14]
  ------------------
  683|    155|		GF_ParentList *nlist = pNode->sgprivate->parents;
  684|    155|		if (nlist) {
  ------------------
  |  Branch (684:7): [True: 155, False: 0]
  ------------------
  685|    155|			GF_ParentList *prev = NULL;
  686|    155|			while (nlist) {
  ------------------
  |  Branch (686:11): [True: 155, False: 0]
  ------------------
  687|    155|				if (nlist->node != parentNode) {
  ------------------
  |  Branch (687:9): [True: 0, False: 155]
  ------------------
  688|      0|					prev = nlist;
  689|      0|					nlist = nlist->next;
  690|      0|					continue;
  691|      0|				}
  692|    155|				if (prev) prev->next = nlist->next;
  ------------------
  |  Branch (692:9): [True: 0, False: 155]
  ------------------
  693|    155|				else pNode->sgprivate->parents = nlist->next;
  694|    155|				gf_free(nlist);
  695|    155|#ifdef GPAC_HAS_QJS
  696|    155|				if (pNode->sgprivate->parents==NULL) detach=1;
  ------------------
  |  Branch (696:9): [True: 155, False: 0]
  ------------------
  697|    155|#endif
  698|    155|				break;
  699|    155|			}
  700|    155|		}
  701|    155|		if (parentNode->sgprivate->scenegraph != pSG) {
  ------------------
  |  Branch (701:7): [True: 0, False: 155]
  ------------------
  702|      0|			gf_list_del_item(pSG->exported_nodes, pNode);
  703|      0|		}
  704|    155|	}
  705|       |
  706|    169|#ifndef GPAC_DISABLE_VRML
  707|       |	/*if this is a proto its is registered in its parent graph, not the current*/
  708|    169|	if (pSG && (pNode == (GF_Node*)pSG->pOwningProto)) pSG = pSG->parent_scene;
  ------------------
  |  Branch (708:6): [True: 169, False: 0]
  |  Branch (708:13): [True: 0, False: 169]
  ------------------
  709|    169|#endif
  710|       |
  711|       |	/*unregister the instance*/
  712|    169|	gf_assert(pNode->sgprivate->num_instances);
  713|    169|	pNode->sgprivate->num_instances -= 1;
  714|       |
  715|       |	/*this is just an instance removed*/
  716|    169|	if (pNode->sgprivate->num_instances) {
  ------------------
  |  Branch (716:6): [True: 0, False: 169]
  ------------------
  717|      0|#ifdef GPAC_HAS_QJS
  718|      0|		if (pNode->sgprivate->num_instances==1) detach=1;
  ------------------
  |  Branch (718:7): [True: 0, False: 0]
  ------------------
  719|      0|		if (pSG && pNode->sgprivate->scenegraph->on_node_modified && detach && pNode->sgprivate->interact && pNode->sgprivate->interact->js_binding) {
  ------------------
  |  Branch (719:7): [True: 0, False: 0]
  |  Branch (719:14): [True: 0, False: 0]
  |  Branch (719:64): [True: 0, False: 0]
  |  Branch (719:74): [True: 0, False: 0]
  |  Branch (719:104): [True: 0, False: 0]
  ------------------
  720|      0|			pNode->sgprivate->scenegraph->on_node_modified(pNode->sgprivate->scenegraph, pNode, NULL, NULL);
  721|      0|		}
  722|      0|#endif
  723|      0|		return GF_OK;
  724|      0|	}
  725|       |
  726|    169|	gf_assert(pNode->sgprivate->parents==NULL);
  727|       |
  728|    169|	if (pSG) {
  ------------------
  |  Branch (728:6): [True: 169, False: 0]
  ------------------
  729|       |		/*if def, remove from sg def table*/
  730|    169|		if (pNode->sgprivate->flags & GF_NODE_IS_DEF) {
  ------------------
  |  |   59|    169|#define GF_NODE_IS_DEF			0x80000000	// 1<<31
  ------------------
  |  Branch (730:7): [True: 57, False: 112]
  ------------------
  731|     57|			remove_node_id(pSG, pNode);
  732|     57|		}
  733|       |
  734|    169|#ifndef GPAC_DISABLE_VRML
  735|       |		/*check all routes from or to this node and destroy them - cf spec*/
  736|    169|		GF_Route *r;
  737|    169|		j=0;
  738|    169|		while ((r = (GF_Route *)gf_list_enum(pSG->Routes, &j))) {
  ------------------
  |  Branch (738:10): [True: 0, False: 169]
  ------------------
  739|      0|			if ( (r->ToNode == pNode) || (r->FromNode == pNode)) {
  ------------------
  |  Branch (739:9): [True: 0, False: 0]
  |  Branch (739:33): [True: 0, False: 0]
  ------------------
  740|      0|				gf_sg_route_del(r);
  741|      0|				j--;
  742|      0|			}
  743|      0|		}
  744|    169|#endif
  745|       |
  746|    169|#ifndef GPAC_DISABLE_SVG
  747|    169|		if (pSG->use_stack && (gf_list_del_item(pSG->use_stack, pNode)>=0)) {
  ------------------
  |  Branch (747:7): [True: 0, False: 169]
  |  Branch (747:25): [True: 0, False: 0]
  ------------------
  748|      0|			pSG->abort_bubbling = 1;
  749|      0|		}
  750|    169|#endif
  751|       |
  752|    169|	}
  753|       |	/*delete the node*/
  754|    169|	if (pNode->sgprivate->scenegraph && (pNode->sgprivate->scenegraph->RootNode==pNode)) {
  ------------------
  |  Branch (754:6): [True: 169, False: 0]
  |  Branch (754:38): [True: 14, False: 155]
  ------------------
  755|     14|		pSG = pNode->sgprivate->scenegraph;
  756|     14|		gf_node_del(pNode);
  757|     14|		pSG->RootNode = NULL;
  758|    155|	} else {
  759|    155|		gf_node_del(pNode);
  760|    155|	}
  761|    169|	return GF_OK;
  762|    169|}
gf_node_register:
  766|    169|{
  767|    169|	if (!node) return GF_OK;
  ------------------
  |  Branch (767:6): [True: 0, False: 169]
  ------------------
  768|       |
  769|    169|	node->sgprivate->num_instances ++;
  770|       |	/*parent may be NULL (top node and proto)*/
  771|    169|	if (parentNode) {
  ------------------
  |  Branch (771:6): [True: 155, False: 14]
  ------------------
  772|    155|		if (!node->sgprivate->parents) {
  ------------------
  |  Branch (772:7): [True: 155, False: 0]
  ------------------
  773|    155|			node->sgprivate->parents = (GF_ParentList*)gf_malloc(sizeof(GF_ParentList));
  774|    155|			node->sgprivate->parents->next = NULL;
  775|    155|			node->sgprivate->parents->node = parentNode;
  776|    155|		} else {
  777|      0|			GF_ParentList *item, *nlist = node->sgprivate->parents;
  778|      0|			while (nlist->next) nlist = nlist->next;
  ------------------
  |  Branch (778:11): [True: 0, False: 0]
  ------------------
  779|      0|			item = (GF_ParentList*)gf_malloc(sizeof(GF_ParentList));
  780|      0|			item->next = NULL;
  781|      0|			item->node = parentNode;
  782|      0|			nlist->next = item;
  783|      0|		}
  784|    155|		if (parentNode->sgprivate->scenegraph != node->sgprivate->scenegraph) {
  ------------------
  |  Branch (784:7): [True: 0, False: 155]
  ------------------
  785|      0|			gf_list_add(node->sgprivate->scenegraph->exported_nodes, node);
  786|      0|		}
  787|    155|	}
  788|    169|	return GF_OK;
  789|    169|}
gf_node_set_id:
 1023|     57|{
 1024|     57|	GF_SceneGraph *pSG;
 1025|     57|	if (!ID || !p || !p->sgprivate->scenegraph) return GF_BAD_PARAM;
  ------------------
  |  Branch (1025:6): [True: 0, False: 57]
  |  Branch (1025:13): [True: 0, False: 57]
  |  Branch (1025:19): [True: 0, False: 57]
  ------------------
 1026|       |
 1027|     57|	pSG = p->sgprivate->scenegraph;
 1028|     57|#ifndef GPAC_DISABLE_VRML
 1029|       |	/*if this is a proto register to the parent graph, not the current*/
 1030|     57|	if (p == (GF_Node*)pSG->pOwningProto) pSG = pSG->parent_scene;
  ------------------
  |  Branch (1030:6): [True: 0, False: 57]
  ------------------
 1031|     57|#endif
 1032|       |
 1033|       |	/*new DEF ID*/
 1034|     57|	if (!(p->sgprivate->flags & GF_NODE_IS_DEF) ) {
  ------------------
  |  |   59|     57|#define GF_NODE_IS_DEF			0x80000000	// 1<<31
  ------------------
  |  Branch (1034:6): [True: 57, False: 0]
  ------------------
 1035|     57|		p->sgprivate->flags |= GF_NODE_IS_DEF;
  ------------------
  |  |   59|     57|#define GF_NODE_IS_DEF			0x80000000	// 1<<31
  ------------------
 1036|     57|		insert_node_def(pSG, p, ID, name);
 1037|     57|	}
 1038|       |	/*reassigning ID, remove node def*/
 1039|      0|	else {
 1040|      0|		char *_name = gf_strdup(name);
 1041|      0|		remove_node_id(pSG, p);
 1042|      0|		insert_node_def(pSG, p, ID, _name);
 1043|      0|		gf_free(_name);
 1044|      0|	}
 1045|     57|	return GF_OK;
 1046|     57|}
gf_sg_find_node:
 1191|  3.66k|{
 1192|  3.66k|	NodeIDedItem *reg_node = sg->id_node;
 1193|  26.2k|	while (reg_node) {
  ------------------
  |  Branch (1193:9): [True: 23.0k, False: 3.24k]
  ------------------
 1194|  23.0k|		if (reg_node->NodeID == nodeID) return reg_node->node;
  ------------------
  |  Branch (1194:7): [True: 417, False: 22.6k]
  ------------------
 1195|  22.6k|		reg_node = reg_node->next;
 1196|  22.6k|	}
 1197|  3.24k|	return NULL;
 1198|  3.66k|}
gf_node_setup:
 1243|    169|{
 1244|    169|	if (!p) {
  ------------------
  |  Branch (1244:6): [True: 0, False: 169]
  ------------------
 1245|      0|		GF_LOG(GF_LOG_ERROR, GF_LOG_SCENE, ("[SceneGraph] Failed to setup NULL node\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1246|      0|		return;
 1247|      0|	}
 1248|    169|	GF_SAFEALLOC(p->sgprivate, NodePriv);
  ------------------
  |  |  242|    169|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|    169|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|    169|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 169, False: 0]
  |  |  ------------------
  |  |  245|    169|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|    169|		}\
  |  |  247|    169|	}
  ------------------
 1249|    169|	if (!p->sgprivate) {
  ------------------
  |  Branch (1249:6): [True: 0, False: 169]
  ------------------
 1250|      0|		GF_LOG(GF_LOG_ERROR, GF_LOG_SCENE, ("[SceneGraph] Failed to allocate node scenegraph private handler\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1251|      0|		return;
 1252|      0|	}
 1253|    169|	p->sgprivate->tag = tag;
 1254|    169|	p->sgprivate->flags = GF_SG_NODE_DIRTY;
 1255|    169|}
gf_sg_parent_setup:
 1361|    166|{
 1362|       |	((GF_ParentNode *)node)->children = NULL;
 1363|    166|	node->sgprivate->flags |= GF_SG_CHILD_DIRTY;
 1364|    166|}
gf_node_unregister_children:
 1368|    169|{
 1369|    324|	while (child) {
  ------------------
  |  Branch (1369:9): [True: 155, False: 169]
  ------------------
 1370|    155|		GF_ChildNodeItem *cur;
 1371|    155|		gf_node_unregister(child->node, container);
 1372|    155|		cur = child;
 1373|    155|		child = child->next;
 1374|    155|		gf_free(cur);
 1375|    155|	}
 1376|    169|}
gf_node_list_add_child_last:
 1487|    155|{
 1488|    155|	GF_ChildNodeItem *child, *cur;
 1489|       |
 1490|    155|	child = *list;
 1491|       |
 1492|    155|	cur = (GF_ChildNodeItem*) gf_malloc(sizeof(GF_ChildNodeItem));
 1493|    155|	if (!cur) return GF_OUT_OF_MEM;
  ------------------
  |  Branch (1493:6): [True: 0, False: 155]
  ------------------
 1494|    155|	cur->node = n;
 1495|    155|	cur->next = NULL;
 1496|    155|	if (child) {
  ------------------
  |  Branch (1496:6): [True: 97, False: 58]
  ------------------
 1497|     97|		if (last_child && (*last_child) ) {
  ------------------
  |  Branch (1497:7): [True: 97, False: 0]
  |  Branch (1497:21): [True: 94, False: 3]
  ------------------
 1498|     94|			while ((*last_child)->next) (*last_child) = (*last_child)->next;
  ------------------
  |  Branch (1498:11): [True: 0, False: 94]
  ------------------
 1499|     94|			(*last_child)->next = cur;
 1500|     94|			(*last_child) = (*last_child)->next;
 1501|     94|		} else {
 1502|      3|			while (child->next) child = child->next;
  ------------------
  |  Branch (1502:11): [True: 0, False: 3]
  ------------------
 1503|      3|			child->next = cur;
 1504|      3|			if (last_child) *last_child = child->next;
  ------------------
  |  Branch (1504:8): [True: 3, False: 0]
  ------------------
 1505|      3|		}
 1506|     97|	} else {
 1507|     58|		*list = cur;
 1508|     58|		if (last_child)
  ------------------
  |  Branch (1508:7): [True: 55, False: 3]
  ------------------
 1509|     55|			*last_child = *list;
 1510|     58|	}
 1511|    155|	return GF_OK;
 1512|    155|}
gf_sg_parent_reset:
 1583|    169|{
 1584|    169|	gf_node_unregister_children(node, ((GF_ParentNode *)node)->children);
 1585|       |	((GF_ParentNode *)node)->children = NULL;
 1586|    169|}
gf_node_free:
 1589|    169|{
 1590|    169|	if (!node) return;
  ------------------
  |  Branch (1590:6): [True: 0, False: 169]
  ------------------
 1591|       |
 1592|    169|	if (node->sgprivate->UserCallback) node->sgprivate->UserCallback(node, NULL, 1);
  ------------------
  |  Branch (1592:6): [True: 0, False: 169]
  ------------------
 1593|       |
 1594|    169|	if (node->sgprivate->scenegraph && node->sgprivate->scenegraph->NodeCallback)
  ------------------
  |  Branch (1594:6): [True: 169, False: 0]
  |  Branch (1594:37): [True: 0, False: 169]
  ------------------
 1595|      0|		node->sgprivate->scenegraph->NodeCallback(node->sgprivate->scenegraph->userpriv, GF_SG_CALLBACK_NODE_DESTROY, node, NULL);
 1596|       |
 1597|    169|	if (node->sgprivate->interact) {
  ------------------
  |  Branch (1597:6): [True: 0, False: 169]
  ------------------
 1598|      0|		if (node->sgprivate->interact->routes) {
  ------------------
  |  Branch (1598:7): [True: 0, False: 0]
  ------------------
 1599|      0|			gf_list_del(node->sgprivate->interact->routes);
 1600|      0|		}
 1601|      0|#ifndef GPAC_DISABLE_SVG
 1602|      0|		if (node->sgprivate->interact->dom_evt) {
  ------------------
  |  Branch (1602:7): [True: 0, False: 0]
  ------------------
 1603|      0|			gf_dom_event_remove_all_listeners(node->sgprivate->interact->dom_evt, node->sgprivate->scenegraph);
 1604|      0|			gf_dom_event_target_del(node->sgprivate->interact->dom_evt);
 1605|      0|		}
 1606|      0|		if (node->sgprivate->interact->animations) {
  ------------------
  |  Branch (1606:7): [True: 0, False: 0]
  ------------------
 1607|      0|			gf_list_del(node->sgprivate->interact->animations);
 1608|      0|		}
 1609|      0|#endif
 1610|      0|#ifdef GPAC_HAS_QJS
 1611|      0|		if (node->sgprivate->interact->js_binding) {
  ------------------
  |  Branch (1611:7): [True: 0, False: 0]
  ------------------
 1612|      0|			if (node->sgprivate->scenegraph && node->sgprivate->scenegraph->on_node_modified)
  ------------------
  |  Branch (1612:8): [True: 0, False: 0]
  |  Branch (1612:39): [True: 0, False: 0]
  ------------------
 1613|      0|				node->sgprivate->scenegraph->on_node_modified(node->sgprivate->scenegraph, node, NULL, NULL);
 1614|      0|			gf_list_del(node->sgprivate->interact->js_binding->fields);
 1615|      0|			gf_free(node->sgprivate->interact->js_binding);
 1616|      0|		}
 1617|      0|#endif
 1618|      0|		gf_free(node->sgprivate->interact);
 1619|      0|	}
 1620|    169|	gf_assert(! node->sgprivate->parents);
 1621|    169|	gf_free(node->sgprivate);
 1622|    169|	gf_free(node);
 1623|    169|}
gf_node_init:
 1785|    150|{
 1786|    150|	GF_SceneGraph *pSG = node->sgprivate->scenegraph;
 1787|    150|	gf_assert(pSG);
 1788|       |	/*no user-defined init, consider the scenegraph is only used for parsing/encoding/decoding*/
 1789|    150|	if (!pSG->NodeCallback) return;
  ------------------
  |  Branch (1789:6): [True: 150, False: 0]
  ------------------
 1790|       |	//some broken content may trigger twice an update
 1791|      0|	if (node->sgprivate->UserPrivate) return;
  ------------------
  |  Branch (1791:6): [True: 0, False: 0]
  ------------------
 1792|       |
 1793|       |	/*internal nodes*/
 1794|      0|#ifndef GPAC_DISABLE_VRML
 1795|      0|	if (gf_sg_vrml_node_init(node)) return;
  ------------------
  |  Branch (1795:6): [True: 0, False: 0]
  ------------------
 1796|      0|#endif
 1797|       |
 1798|      0|#ifndef GPAC_DISABLE_SVG
 1799|      0|	if (gf_svg_node_init(node)) return;
  ------------------
  |  Branch (1799:6): [True: 0, False: 0]
  ------------------
 1800|      0|#endif
 1801|       |
 1802|       |	/*user defined init*/
 1803|      0|	pSG->NodeCallback(pSG->userpriv, GF_SG_CALLBACK_INIT, node, NULL);
 1804|      0|}
gf_node_del:
 1871|    169|{
 1872|    169|	if (node->sgprivate->tag==TAG_UndefinedNode) gf_node_free(node);
  ------------------
  |  Branch (1872:6): [True: 0, False: 169]
  ------------------
 1873|    169|	else if (node->sgprivate->tag==TAG_DOMText) {
  ------------------
  |  Branch (1873:11): [True: 3, False: 166]
  ------------------
 1874|      3|		GF_DOMText *t = (GF_DOMText *)node;
 1875|      3|		if (t->textContent) gf_free(t->textContent);
  ------------------
  |  Branch (1875:7): [True: 3, False: 0]
  ------------------
 1876|      3|		gf_sg_parent_reset(node);
 1877|      3|		gf_node_free(node);
 1878|      3|	}
 1879|    166|	else if (node->sgprivate->tag==TAG_DOMUpdates) {
  ------------------
  |  Branch (1879:11): [True: 0, False: 166]
  ------------------
 1880|      0|		GF_DOMUpdates *up = (GF_DOMUpdates *)node;
 1881|      0|		if (up->data) gf_free(up->data);
  ------------------
  |  Branch (1881:7): [True: 0, False: 0]
  ------------------
 1882|      0|#ifndef GPAC_DISABLE_VRML
 1883|      0|		u32 i, count = gf_list_count(up->updates);
 1884|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (1884:13): [True: 0, False: 0]
  ------------------
 1885|      0|			GF_Command *com = gf_list_get(up->updates, i);
 1886|      0|			gf_sg_command_del(com);
 1887|      0|		}
 1888|      0|#endif
 1889|      0|		gf_list_del(up->updates);
 1890|      0|		gf_sg_parent_reset(node);
 1891|      0|		gf_node_free(node);
 1892|      0|	}
 1893|    166|	else if (node->sgprivate->tag == TAG_DOMFullNode) {
  ------------------
  |  Branch (1893:11): [True: 0, False: 166]
  ------------------
 1894|      0|		GF_DOMFullNode *n = (GF_DOMFullNode *)node;
 1895|      0|#ifndef GPAC_DISABLE_SVG
 1896|      0|		gf_node_delete_attributes(node);
 1897|      0|#endif
 1898|      0|		if (n->name) gf_free(n->name);
  ------------------
  |  Branch (1898:7): [True: 0, False: 0]
  ------------------
 1899|      0|		gf_sg_parent_reset(node);
 1900|      0|		gf_node_free(node);
 1901|      0|	}
 1902|    166|#ifndef GPAC_DISABLE_VRML
 1903|    166|	else if (node->sgprivate->tag == TAG_ProtoNode) gf_sg_proto_del_instance((GF_ProtoInstance *)node);
  ------------------
  |  Branch (1903:11): [True: 0, False: 166]
  ------------------
 1904|    166|#endif
 1905|    166|#ifndef GPAC_DISABLE_VRML
 1906|    166|	else if (node->sgprivate->tag<=GF_NODE_RANGE_LAST_MPEG4) gf_sg_mpeg4_node_del(node);
  ------------------
  |  Branch (1906:11): [True: 0, False: 166]
  ------------------
 1907|    166|#ifndef GPAC_DISABLE_X3D
 1908|    166|	else if (node->sgprivate->tag <= GF_NODE_RANGE_LAST_X3D) gf_sg_x3d_node_del(node);
  ------------------
  |  Branch (1908:11): [True: 0, False: 166]
  ------------------
 1909|    166|#endif
 1910|    166|#endif /*GPAC_DISABLE_VRML*/
 1911|       |
 1912|    166|#ifndef GPAC_DISABLE_SVG
 1913|    166|	else if (node->sgprivate->tag <= GF_NODE_RANGE_LAST_SVG) gf_svg_node_del(node);
  ------------------
  |  Branch (1913:11): [True: 166, False: 0]
  ------------------
 1914|      0|#endif
 1915|      0|	else gf_node_free(node);
 1916|    169|}
gf_node_new:
 1991|    166|{
 1992|    166|	GF_Node *node;
 1993|       |//	if (!inScene) return NULL;
 1994|       |	/*cannot create proto this way*/
 1995|    166|	if (tag==TAG_ProtoNode) return NULL;
  ------------------
  |  Branch (1995:6): [True: 0, False: 166]
  ------------------
 1996|    166|	else if (tag==TAG_UndefinedNode) node = gf_sg_new_base_node();
  ------------------
  |  Branch (1996:11): [True: 0, False: 166]
  ------------------
 1997|    166|#ifndef GPAC_DISABLE_VRML
 1998|    166|	else if (tag <= GF_NODE_RANGE_LAST_MPEG4) node = gf_sg_mpeg4_node_new(tag);
  ------------------
  |  Branch (1998:11): [True: 0, False: 166]
  ------------------
 1999|    166|#ifndef GPAC_DISABLE_X3D
 2000|    166|	else if (tag <= GF_NODE_RANGE_LAST_X3D) node = gf_sg_x3d_node_new(tag);
  ------------------
  |  Branch (2000:11): [True: 0, False: 166]
  ------------------
 2001|    166|#endif
 2002|    166|#endif
 2003|    166|	else if (tag == TAG_DOMText) {
  ------------------
  |  Branch (2003:11): [True: 0, False: 166]
  ------------------
 2004|      0|		GF_DOMText *n;
 2005|      0|		GF_SAFEALLOC(n, GF_DOMText);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2006|      0|		if (!n) return NULL;
  ------------------
  |  Branch (2006:7): [True: 0, False: 0]
  ------------------
 2007|      0|		node = (GF_Node*)n;
 2008|      0|		gf_node_setup(node, TAG_DOMText);
 2009|      0|	}
 2010|    166|	else if (tag == TAG_DOMFullNode) {
  ------------------
  |  Branch (2010:11): [True: 0, False: 166]
  ------------------
 2011|      0|		GF_DOMFullNode*n;
 2012|      0|		GF_SAFEALLOC(n, GF_DOMFullNode);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 2013|      0|		if (!n) return NULL;
  ------------------
  |  Branch (2013:7): [True: 0, False: 0]
  ------------------
 2014|      0|		node = (GF_Node*)n;
 2015|      0|		gf_node_setup(node, TAG_DOMFullNode);
 2016|      0|	}
 2017|    166|#ifndef GPAC_DISABLE_SVG
 2018|    166|	else if (tag <= GF_NODE_RANGE_LAST_SVG) node = (GF_Node *) gf_svg_create_node(tag);
  ------------------
  |  Branch (2018:11): [True: 166, False: 0]
  ------------------
 2019|      0|#endif
 2020|      0|	else node = NULL;
 2021|       |
 2022|    166|	if (node) node->sgprivate->scenegraph = inScene;
  ------------------
  |  Branch (2022:6): [True: 166, False: 0]
  ------------------
 2023|       |
 2024|       |	/*script is inited as soon as created since fields are dynamically added*/
 2025|    166|#ifndef GPAC_DISABLE_VRML
 2026|    166|	switch (tag) {
  ------------------
  |  Branch (2026:10): [True: 0, False: 166]
  ------------------
 2027|      0|	case TAG_MPEG4_Script:
  ------------------
  |  Branch (2027:2): [True: 0, False: 166]
  ------------------
 2028|      0|#ifndef GPAC_DISABLE_X3D
 2029|      0|	case TAG_X3D_Script:
  ------------------
  |  Branch (2029:2): [True: 0, False: 166]
  ------------------
 2030|      0|#endif
 2031|      0|		gf_sg_script_init(node);
 2032|      0|		break;
 2033|    166|	}
 2034|    166|#endif
 2035|       |
 2036|    166|	return node;
 2037|    166|}
base_scenegraph.c:insert_node_def:
  984|     57|{
  985|     57|	NodeIDedItem *reg_node, *cur;
  986|       |
  987|     57|	reg_node = (NodeIDedItem *) gf_malloc(sizeof(NodeIDedItem));
  988|     57|	reg_node->node = def;
  989|     57|	reg_node->NodeID = ID;
  990|     57|	reg_node->NodeName = name ? gf_strdup(name) : NULL;
  ------------------
  |  Branch (990:23): [True: 0, False: 57]
  ------------------
  991|       |
  992|     57|	if (!sg->id_node) {
  ------------------
  |  Branch (992:6): [True: 6, False: 51]
  ------------------
  993|      6|		sg->id_node = reg_node;
  994|      6|		sg->id_node_last = sg->id_node;
  995|      6|		reg_node->next = NULL;
  996|     51|	} else if (sg->id_node_last->NodeID < ID) {
  ------------------
  |  Branch (996:13): [True: 5, False: 46]
  ------------------
  997|      5|		sg->id_node_last->next = reg_node;
  998|      5|		sg->id_node_last = reg_node;
  999|      5|		reg_node->next = NULL;
 1000|     46|	} else if (sg->id_node->NodeID>ID) {
  ------------------
  |  Branch (1000:13): [True: 12, False: 34]
  ------------------
 1001|     12|		reg_node->next = sg->id_node;
 1002|     12|		sg->id_node = reg_node;
 1003|     34|	} else {
 1004|     34|		cur = sg->id_node;
 1005|    163|		while (cur->next) {
  ------------------
  |  Branch (1005:10): [True: 163, False: 0]
  ------------------
 1006|    163|			if (cur->next->NodeID>ID) {
  ------------------
  |  Branch (1006:8): [True: 34, False: 129]
  ------------------
 1007|     34|				reg_node->next = cur->next;
 1008|     34|				cur->next = reg_node;
 1009|     34|				return;
 1010|     34|			}
 1011|    129|			cur = cur->next;
 1012|    129|		}
 1013|      0|		cur->next = reg_node;
 1014|      0|		sg->id_node_last = reg_node;
 1015|       |		reg_node->next = NULL;
 1016|      0|	}
 1017|     57|}

gf_dom_event_remove_listener_from_parent:
  172|      1|{
  173|      1|	if (!event_target) return GF_BAD_PARAM;
  ------------------
  |  Branch (173:6): [True: 1, False: 0]
  ------------------
  174|      0|	if (event_target->ptr_type == GF_DOM_EVENT_TARGET_NODE) {
  ------------------
  |  Branch (174:6): [True: 0, False: 0]
  ------------------
  175|      0|		GF_Node *node = (GF_Node *)event_target->ptr;
  176|      0|		if (node && node == listener)
  ------------------
  |  Branch (176:7): [True: 0, False: 0]
  |  Branch (176:15): [True: 0, False: 0]
  ------------------
  177|      0|			node->sgprivate->UserPrivate = NULL;
  178|      0|	}
  179|      0|	gf_list_del_item(event_target->listeners, listener);
  180|       |
  181|       |#if 0
  182|       |	{
  183|       |		GF_FieldInfo info;
  184|       |		if (gf_node_get_attribute_by_tag(listener, TAG_XMLEV_ATT_event, GF_FALSE, GF_FALSE, &info) == GF_OK) {
  185|       |			GF_EventType type = ((XMLEV_Event *)info.far_ptr)->type;
  186|       |			gf_sg_unregister_event_type(listener->sgprivate->scenegraph, gf_dom_event_get_category(type));
  187|       |		}
  188|       |	}
  189|       |#endif
  190|      0|	return GF_OK;
  191|      1|}
gf_dom_event_remove_all_listeners:
  194|     43|{
  195|     43|	while (gf_list_count(event_target->listeners)) {
  ------------------
  |  Branch (195:9): [True: 0, False: 43]
  ------------------
  196|      0|		GF_Node *n = (GF_Node *)gf_list_get(event_target->listeners, 0);
  197|      0|		if (gf_list_find(sg->exported_nodes, n)>=0) {
  ------------------
  |  Branch (197:7): [True: 0, False: 0]
  ------------------
  198|      0|			gf_list_rem(event_target->listeners, 0);
  199|      0|		} else {
  200|      0|			gf_dom_listener_del(n, event_target);
  201|      0|		}
  202|      0|	}
  203|     43|}
gf_dom_listener_reset_deferred:
  251|     43|{
  252|     43|	gf_mx_p(sg->dom_evt_mx);
  253|     43|	while (gf_list_count(sg->listeners_to_add)) {
  ------------------
  |  Branch (253:9): [True: 0, False: 43]
  ------------------
  254|      0|		DOMAddListener *l = (DOMAddListener *)gf_list_get(sg->listeners_to_add, 0);
  255|      0|		gf_list_rem(sg->listeners_to_add, 0);
  256|      0|		gf_free(l);
  257|      0|	}
  258|     43|	gf_mx_v(sg->dom_evt_mx);
  259|     43|}
gf_dom_add_text_node:
  832|      3|{
  833|      3|	GF_DOMText *text;
  834|      3|	GF_SAFEALLOC(text, GF_DOMText);
  ------------------
  |  |  242|      3|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      3|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      3|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 3, False: 0]
  |  |  ------------------
  |  |  245|      3|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      3|		}\
  |  |  247|      3|	}
  ------------------
  835|      3|	if (!text) return NULL;
  ------------------
  |  Branch (835:6): [True: 0, False: 3]
  ------------------
  836|       |
  837|      3|	gf_node_setup((GF_Node *)text, TAG_DOMText);
  838|      3|	text->sgprivate->scenegraph = parent->sgprivate->scenegraph;
  839|      3|	text->textContent = text_data;
  840|      3|	gf_node_register((GF_Node *)text, parent);
  841|       |	gf_node_list_add_child_last(&((GF_ParentNode *)parent)->children, (GF_Node*)text, NULL);
  842|      3|	return text;
  843|      3|}
gf_dom_event_target_new:
  954|     29|{
  955|     29|	GF_DOMEventTarget *target;
  956|     29|	GF_SAFEALLOC(target, GF_DOMEventTarget);
  ------------------
  |  |  242|     29|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     29|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     29|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 29, False: 0]
  |  |  ------------------
  |  |  245|     29|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     29|		}\
  |  |  247|     29|	}
  ------------------
  957|     29|	if (!target) return NULL;
  ------------------
  |  Branch (957:6): [True: 0, False: 29]
  ------------------
  958|     29|	target->ptr_type = type;
  959|     29|	target->listeners = gf_list_new();
  960|     29|	target->ptr = obj;
  961|     29|	return target;
  962|     29|}
gf_dom_event_target_del:
  965|     29|{
  966|     29|	gf_assert(gf_list_count(target->listeners) == 0);
  967|     29|	gf_list_del(target->listeners);
  968|     29|	gf_free(target);
  969|     29|}

gf_dom_event_type_by_name:
  265|  2.15k|{
  266|  2.15k|	u32 i, count;
  267|  2.15k|	count = sizeof(defined_dom_events) / sizeof(struct dom_event_def);
  268|  2.15k|	if (!name) return GF_EVENT_UNKNOWN;
  ------------------
  |  Branch (268:6): [True: 0, False: 2.15k]
  ------------------
  269|  2.15k|	if ((name[0]=='o') && (name[1]=='n')) name += 2;
  ------------------
  |  Branch (269:6): [True: 20, False: 2.13k]
  |  Branch (269:24): [True: 0, False: 20]
  ------------------
  270|   211k|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (270:12): [True: 209k, False: 2.15k]
  ------------------
  271|   209k|		if (!strcmp(name, defined_dom_events[i].name))
  ------------------
  |  Branch (271:7): [True: 0, False: 209k]
  ------------------
  272|      0|			return defined_dom_events[i].event;
  273|   209k|	}
  274|  2.15k|	return GF_EVENT_UNKNOWN;
  275|  2.15k|}
gf_dom_get_key_type:
  536|  1.17k|{
  537|  1.17k|	if (strlen(key_name) == 1) {
  ------------------
  |  Branch (537:6): [True: 8, False: 1.16k]
  ------------------
  538|      8|		char c[2];
  539|      8|		c[0] = key_name[0];
  540|      8|		c[1] = 0;
  541|      8|		strupr(c);
  ------------------
  |  |  352|      8|#define strupr my_str_upr
  ------------------
  542|      8|		if (c[0] >= 'A' && c[0] <= 'Z')
  ------------------
  |  Branch (542:7): [True: 5, False: 3]
  |  Branch (542:22): [True: 5, False: 0]
  ------------------
  543|      5|			return (GF_KEY_A + (c[0] - 'A') );
  544|       |
  545|      3|		if (c[0] >= '0' && c[0] <= '9')
  ------------------
  |  Branch (545:7): [True: 0, False: 3]
  |  Branch (545:22): [True: 0, False: 0]
  ------------------
  546|      0|			return ( GF_KEY_0 + (c[0] - '0') );
  547|       |
  548|      3|		switch ((u8) c[0]) {
  549|      0|		case '@':
  ------------------
  |  Branch (549:3): [True: 0, False: 3]
  ------------------
  550|      0|			return GF_KEY_AT;
  551|      0|		case '*':
  ------------------
  |  Branch (551:3): [True: 0, False: 3]
  ------------------
  552|      0|			return GF_KEY_STAR;
  553|      0|		case '#':
  ------------------
  |  Branch (553:3): [True: 0, False: 3]
  ------------------
  554|      0|			return GF_KEY_NUMBER;
  555|      0|		case ' ':
  ------------------
  |  Branch (555:3): [True: 0, False: 3]
  ------------------
  556|      0|			return GF_KEY_SPACE;
  557|      0|		case '!':
  ------------------
  |  Branch (557:3): [True: 0, False: 3]
  ------------------
  558|      0|			return GF_KEY_EXCLAMATION;
  559|      1|		case '"':
  ------------------
  |  Branch (559:3): [True: 1, False: 2]
  ------------------
  560|      1|			return GF_KEY_QUOTATION;
  561|      2|		case '$':
  ------------------
  |  Branch (561:3): [True: 2, False: 1]
  ------------------
  562|      2|			return GF_KEY_DOLLAR;
  563|      0|		case '&':
  ------------------
  |  Branch (563:3): [True: 0, False: 3]
  ------------------
  564|      0|			return GF_KEY_AMPERSAND;
  565|      0|		case '\'':
  ------------------
  |  Branch (565:3): [True: 0, False: 3]
  ------------------
  566|      0|			return GF_KEY_APOSTROPHE;
  567|      0|		case '(':
  ------------------
  |  Branch (567:3): [True: 0, False: 3]
  ------------------
  568|      0|			return GF_KEY_LEFTPARENTHESIS;
  569|      0|		case ')':
  ------------------
  |  Branch (569:3): [True: 0, False: 3]
  ------------------
  570|      0|			return GF_KEY_RIGHTPARENTHESIS;
  571|      0|		case '+':
  ------------------
  |  Branch (571:3): [True: 0, False: 3]
  ------------------
  572|      0|			return GF_KEY_PLUS;
  573|      0|		case ',':
  ------------------
  |  Branch (573:3): [True: 0, False: 3]
  ------------------
  574|      0|			return GF_KEY_COMMA;
  575|      0|		case '-':
  ------------------
  |  Branch (575:3): [True: 0, False: 3]
  ------------------
  576|      0|			return GF_KEY_HYPHEN;
  577|      0|		case '.':
  ------------------
  |  Branch (577:3): [True: 0, False: 3]
  ------------------
  578|      0|			return GF_KEY_FULLSTOP;
  579|      0|		case '/':
  ------------------
  |  Branch (579:3): [True: 0, False: 3]
  ------------------
  580|      0|			return GF_KEY_SLASH;
  581|      0|		case ':':
  ------------------
  |  Branch (581:3): [True: 0, False: 3]
  ------------------
  582|      0|			return GF_KEY_COLON;
  583|      0|		case ';':
  ------------------
  |  Branch (583:3): [True: 0, False: 3]
  ------------------
  584|      0|			return GF_KEY_SEMICOLON;
  585|      0|		case '<':
  ------------------
  |  Branch (585:3): [True: 0, False: 3]
  ------------------
  586|      0|			return GF_KEY_LESSTHAN;
  587|      0|		case '=':
  ------------------
  |  Branch (587:3): [True: 0, False: 3]
  ------------------
  588|      0|			return GF_KEY_EQUALS;
  589|      0|		case '>':
  ------------------
  |  Branch (589:3): [True: 0, False: 3]
  ------------------
  590|      0|			return GF_KEY_GREATERTHAN;
  591|      0|		case '?':
  ------------------
  |  Branch (591:3): [True: 0, False: 3]
  ------------------
  592|      0|			return GF_KEY_QUESTION;
  593|      0|		case '[':
  ------------------
  |  Branch (593:3): [True: 0, False: 3]
  ------------------
  594|      0|			return GF_KEY_LEFTSQUAREBRACKET;
  595|      0|		case '\\':
  ------------------
  |  Branch (595:3): [True: 0, False: 3]
  ------------------
  596|      0|			return GF_KEY_BACKSLASH;
  597|      0|		case ']':
  ------------------
  |  Branch (597:3): [True: 0, False: 3]
  ------------------
  598|      0|			return GF_KEY_RIGHTSQUAREBRACKET;
  599|      0|		case '^':
  ------------------
  |  Branch (599:3): [True: 0, False: 3]
  ------------------
  600|      0|			return GF_KEY_CIRCUM;
  601|      0|		case '_':
  ------------------
  |  Branch (601:3): [True: 0, False: 3]
  ------------------
  602|      0|			return GF_KEY_UNDERSCORE;
  603|      0|		case '`':
  ------------------
  |  Branch (603:3): [True: 0, False: 3]
  ------------------
  604|      0|			return GF_KEY_GRAVEACCENT;
  605|      0|		case '{':
  ------------------
  |  Branch (605:3): [True: 0, False: 3]
  ------------------
  606|      0|			return GF_KEY_LEFTCURLYBRACKET;
  607|      0|		case '|':
  ------------------
  |  Branch (607:3): [True: 0, False: 3]
  ------------------
  608|      0|			return GF_KEY_PIPE;
  609|      0|		case '}':
  ------------------
  |  Branch (609:3): [True: 0, False: 3]
  ------------------
  610|      0|			return GF_KEY_RIGHTCURLYBRACKET;
  611|      0|		case 0xA1:
  ------------------
  |  Branch (611:3): [True: 0, False: 3]
  ------------------
  612|      0|			return GF_KEY_INVERTEXCLAMATION;
  613|      0|		default:
  ------------------
  |  Branch (613:3): [True: 0, False: 3]
  ------------------
  614|      0|			return GF_KEY_UNIDENTIFIED;
  615|      3|		}
  616|  1.16k|	} else {
  617|  1.16k|		u32 i, count;
  618|  1.16k|		count = sizeof(predefined_key_identifiers) / sizeof(struct predef_keyid);
  619|   240k|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (619:13): [True: 239k, False: 1.16k]
  ------------------
  620|   239k|			if (!stricmp(key_name, predefined_key_identifiers[i].name)) {
  ------------------
  |  |  342|   239k|#define stricmp		strcasecmp
  ------------------
  |  Branch (620:8): [True: 0, False: 239k]
  ------------------
  621|      0|				return predefined_key_identifiers[i].key_code;
  622|      0|			}
  623|   239k|		}
  624|  1.16k|		return GF_KEY_UNIDENTIFIED;
  625|  1.16k|	}
  626|  1.17k|}
gf_svg_get_system_paint_server_type:
  700|     30|{
  701|     30|	u32 i, count;
  702|     30|	count = sizeof(system_colors) / sizeof(struct sys_col);
  703|    870|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (703:12): [True: 840, False: 30]
  ------------------
  704|    840|		if (!strcmp(name, system_colors[i].name)) return system_colors[i].type;
  ------------------
  |  Branch (704:7): [True: 0, False: 840]
  ------------------
  705|    840|	}
  706|     30|	return 0;
  707|     30|}
gf_svg_create_attribute_value:
 3657|  1.11k|{
 3658|  1.11k|	switch (attribute_type) {
 3659|     24|	case SVG_Boolean_datatype:
  ------------------
  |  Branch (3659:2): [True: 24, False: 1.09k]
  ------------------
 3660|     24|	{
 3661|     24|		SVG_Boolean *b;
 3662|     24|		GF_SAFEALLOC(b, SVG_Boolean)
  ------------------
  |  |  242|     24|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     24|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     24|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 24, False: 0]
  |  |  ------------------
  |  |  245|     24|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     24|		}\
  |  |  247|     24|	}
  ------------------
 3663|     24|		return b;
 3664|      0|	}
 3665|      0|	break;
 3666|      0|	case SVG_Color_datatype:
  ------------------
  |  Branch (3666:2): [True: 0, False: 1.11k]
  ------------------
 3667|      0|	{
 3668|      0|		SVG_Color *color;
 3669|      0|		GF_SAFEALLOC(color, SVG_Color)
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3670|      0|		return color;
 3671|      0|	}
 3672|      0|	break;
 3673|    134|	case SVG_Paint_datatype:
  ------------------
  |  Branch (3673:2): [True: 134, False: 983]
  ------------------
 3674|    134|	{
 3675|    134|		SVG_Paint *paint;
 3676|    134|		GF_SAFEALLOC(paint, SVG_Paint)
  ------------------
  |  |  242|    134|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|    134|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|    134|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 134, False: 0]
  |  |  ------------------
  |  |  245|    134|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|    134|		}\
  |  |  247|    134|	}
  ------------------
 3677|    134|		return paint;
 3678|      0|	}
 3679|      0|	break;
 3680|       |
 3681|       |	/* keyword types */
 3682|      6|	case SVG_FillRule_datatype:
  ------------------
  |  Branch (3682:2): [True: 6, False: 1.11k]
  ------------------
 3683|     13|	case SVG_StrokeLineJoin_datatype:
  ------------------
  |  Branch (3683:2): [True: 7, False: 1.11k]
  ------------------
 3684|     21|	case SVG_StrokeLineCap_datatype:
  ------------------
  |  Branch (3684:2): [True: 8, False: 1.10k]
  ------------------
 3685|     26|	case SVG_FontStyle_datatype:
  ------------------
  |  Branch (3685:2): [True: 5, False: 1.11k]
  ------------------
 3686|     35|	case SVG_FontWeight_datatype:
  ------------------
  |  Branch (3686:2): [True: 9, False: 1.10k]
  ------------------
 3687|     43|	case SVG_FontVariant_datatype:
  ------------------
  |  Branch (3687:2): [True: 8, False: 1.10k]
  ------------------
 3688|     53|	case SVG_TextAnchor_datatype:
  ------------------
  |  Branch (3688:2): [True: 10, False: 1.10k]
  ------------------
 3689|     57|	case SVG_Display_datatype:
  ------------------
  |  Branch (3689:2): [True: 4, False: 1.11k]
  ------------------
 3690|     73|	case SVG_Visibility_datatype:
  ------------------
  |  Branch (3690:2): [True: 16, False: 1.10k]
  ------------------
 3691|     74|	case SVG_Overflow_datatype:
  ------------------
  |  Branch (3691:2): [True: 1, False: 1.11k]
  ------------------
 3692|     77|	case SVG_ZoomAndPan_datatype:
  ------------------
  |  Branch (3692:2): [True: 3, False: 1.11k]
  ------------------
 3693|     82|	case SVG_DisplayAlign_datatype:
  ------------------
  |  Branch (3693:2): [True: 5, False: 1.11k]
  ------------------
 3694|     82|	case SVG_TextAlign_datatype:
  ------------------
  |  Branch (3694:2): [True: 0, False: 1.11k]
  ------------------
 3695|     86|	case SVG_PointerEvents_datatype:
  ------------------
  |  Branch (3695:2): [True: 4, False: 1.11k]
  ------------------
 3696|    142|	case SVG_RenderingHint_datatype:
  ------------------
  |  Branch (3696:2): [True: 56, False: 1.06k]
  ------------------
 3697|    169|	case SVG_VectorEffect_datatype:
  ------------------
  |  Branch (3697:2): [True: 27, False: 1.09k]
  ------------------
 3698|    172|	case SVG_PlaybackOrder_datatype:
  ------------------
  |  Branch (3698:2): [True: 3, False: 1.11k]
  ------------------
 3699|    178|	case SVG_TimelineBegin_datatype:
  ------------------
  |  Branch (3699:2): [True: 6, False: 1.11k]
  ------------------
 3700|    191|	case XML_Space_datatype:
  ------------------
  |  Branch (3700:2): [True: 13, False: 1.10k]
  ------------------
 3701|    191|	case XMLEV_Propagate_datatype:
  ------------------
  |  Branch (3701:2): [True: 0, False: 1.11k]
  ------------------
 3702|    192|	case XMLEV_DefaultAction_datatype:
  ------------------
  |  Branch (3702:2): [True: 1, False: 1.11k]
  ------------------
 3703|    192|	case XMLEV_Phase_datatype:
  ------------------
  |  Branch (3703:2): [True: 0, False: 1.11k]
  ------------------
 3704|    202|	case SMIL_SyncBehavior_datatype:
  ------------------
  |  Branch (3704:2): [True: 10, False: 1.10k]
  ------------------
 3705|    206|	case SMIL_AttributeType_datatype:
  ------------------
  |  Branch (3705:2): [True: 4, False: 1.11k]
  ------------------
 3706|    212|	case SMIL_CalcMode_datatype:
  ------------------
  |  Branch (3706:2): [True: 6, False: 1.11k]
  ------------------
 3707|    218|	case SMIL_Additive_datatype:
  ------------------
  |  Branch (3707:2): [True: 6, False: 1.11k]
  ------------------
 3708|    224|	case SMIL_Accumulate_datatype:
  ------------------
  |  Branch (3708:2): [True: 6, False: 1.11k]
  ------------------
 3709|    233|	case SMIL_Restart_datatype:
  ------------------
  |  Branch (3709:2): [True: 9, False: 1.10k]
  ------------------
 3710|    239|	case SMIL_Fill_datatype:
  ------------------
  |  Branch (3710:2): [True: 6, False: 1.11k]
  ------------------
 3711|    241|	case SVG_TransformType_datatype:
  ------------------
  |  Branch (3711:2): [True: 2, False: 1.11k]
  ------------------
 3712|    241|	case SVG_FocusHighlight_datatype:
  ------------------
  |  Branch (3712:2): [True: 0, False: 1.11k]
  ------------------
 3713|    241|	case SVG_InitialVisibility_datatype:
  ------------------
  |  Branch (3713:2): [True: 0, False: 1.11k]
  ------------------
 3714|    243|	case SVG_GradientUnit_datatype:
  ------------------
  |  Branch (3714:2): [True: 2, False: 1.11k]
  ------------------
 3715|    245|	case SVG_Overlay_datatype:
  ------------------
  |  Branch (3715:2): [True: 2, False: 1.11k]
  ------------------
 3716|    246|	case SVG_TransformBehavior_datatype:
  ------------------
  |  Branch (3716:2): [True: 1, False: 1.11k]
  ------------------
 3717|    246|	case SVG_SpreadMethod_datatype:
  ------------------
  |  Branch (3717:2): [True: 0, False: 1.11k]
  ------------------
 3718|    250|	case SVG_Focusable_datatype:
  ------------------
  |  Branch (3718:2): [True: 4, False: 1.11k]
  ------------------
 3719|    250|	case SVG_Filter_TransferType_datatype:
  ------------------
  |  Branch (3719:2): [True: 0, False: 1.11k]
  ------------------
 3720|    250|	{
 3721|    250|		u8 *keyword;
 3722|    250|		GF_SAFEALLOC(keyword, u8)
  ------------------
  |  |  242|    250|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|    250|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|    250|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 250, False: 0]
  |  |  ------------------
  |  |  245|    250|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|    250|		}\
  |  |  247|    250|	}
  ------------------
 3723|    250|		return keyword;
 3724|    250|	}
 3725|      0|	break;
 3726|      8|	case SMIL_SyncTolerance_datatype:
  ------------------
  |  Branch (3726:2): [True: 8, False: 1.10k]
  ------------------
 3727|      8|	{
 3728|      8|		SMIL_SyncTolerance *st;
 3729|      8|		GF_SAFEALLOC(st, SMIL_SyncTolerance)
  ------------------
  |  |  242|      8|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      8|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      8|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 8, False: 0]
  |  |  ------------------
  |  |  245|      8|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      8|		}\
  |  |  247|      8|	}
  ------------------
 3730|      8|		return st;
 3731|    250|	}
 3732|      0|	break;
 3733|       |
 3734|       |	/* inheritable floats */
 3735|     17|	case SVG_FontSize_datatype:
  ------------------
  |  Branch (3735:2): [True: 17, False: 1.10k]
  ------------------
 3736|    113|	case SVG_Length_datatype:
  ------------------
  |  Branch (3736:2): [True: 96, False: 1.02k]
  ------------------
 3737|    164|	case SVG_Coordinate_datatype:
  ------------------
  |  Branch (3737:2): [True: 51, False: 1.06k]
  ------------------
 3738|    165|	case SVG_Rotate_datatype:
  ------------------
  |  Branch (3738:2): [True: 1, False: 1.11k]
  ------------------
 3739|    254|	case SVG_Number_datatype:
  ------------------
  |  Branch (3739:2): [True: 89, False: 1.02k]
  ------------------
 3740|    254|	{
 3741|    254|		SVG_Number *number;
 3742|    254|		GF_SAFEALLOC(number, SVG_Number)
  ------------------
  |  |  242|    254|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|    254|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|    254|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 254, False: 0]
  |  |  ------------------
  |  |  245|    254|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|    254|		}\
  |  |  247|    254|	}
  ------------------
 3743|    254|		return number;
 3744|    165|	}
 3745|      0|	break;
 3746|       |
 3747|      9|	case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (3747:2): [True: 9, False: 1.10k]
  ------------------
 3748|      9|	{
 3749|      9|		SVG_StrokeDashArray *array;
 3750|      9|		GF_SAFEALLOC(array, SVG_StrokeDashArray)
  ------------------
  |  |  242|      9|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      9|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      9|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 9, False: 0]
  |  |  ------------------
  |  |  245|      9|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      9|		}\
  |  |  247|      9|	}
  ------------------
 3751|      9|		return array;
 3752|    165|	}
 3753|      0|	break;
 3754|       |
 3755|      0|	case SVG_Motion_datatype:
  ------------------
  |  Branch (3755:2): [True: 0, False: 1.11k]
  ------------------
 3756|      0|	{
 3757|      0|		GF_Matrix2D *p;
 3758|      0|		GF_SAFEALLOC(p, GF_Matrix2D)
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3759|      0|		if (p)
  ------------------
  |  Branch (3759:7): [True: 0, False: 0]
  ------------------
 3760|      0|			gf_mx2d_init(*p);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 3761|      0|		return p;
 3762|    165|	}
 3763|      0|	break;
 3764|       |
 3765|      5|	case SVG_Transform_datatype:
  ------------------
  |  Branch (3765:2): [True: 5, False: 1.11k]
  ------------------
 3766|      5|	{
 3767|      5|		SVG_Transform *p;
 3768|      5|		GF_SAFEALLOC(p, SVG_Transform)
  ------------------
  |  |  242|      5|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      5|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      5|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 5, False: 0]
  |  |  ------------------
  |  |  245|      5|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      5|		}\
  |  |  247|      5|	}
  ------------------
 3769|      5|		if (p)
  ------------------
  |  Branch (3769:7): [True: 5, False: 0]
  ------------------
 3770|      5|			gf_mx2d_init(p->mat);
  ------------------
  |  |  391|      5|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      5|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 3771|      5|		return p;
 3772|    165|	}
 3773|      0|	break;
 3774|       |
 3775|      0|	case SVG_Transform_Translate_datatype:
  ------------------
  |  Branch (3775:2): [True: 0, False: 1.11k]
  ------------------
 3776|      0|	case SVG_Transform_Scale_datatype:
  ------------------
  |  Branch (3776:2): [True: 0, False: 1.11k]
  ------------------
 3777|      0|	{
 3778|      0|		SVG_Point *p;
 3779|      0|		GF_SAFEALLOC(p, SVG_Point)
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3780|      0|		return p;
 3781|      0|	}
 3782|      0|	break;
 3783|       |
 3784|      0|	case SVG_Transform_SkewX_datatype:
  ------------------
  |  Branch (3784:2): [True: 0, False: 1.11k]
  ------------------
 3785|      0|	case SVG_Transform_SkewY_datatype:
  ------------------
  |  Branch (3785:2): [True: 0, False: 1.11k]
  ------------------
 3786|      0|	{
 3787|      0|		Fixed *p;
 3788|      0|		GF_SAFEALLOC(p, Fixed)
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3789|      0|		return p;
 3790|      0|	}
 3791|      0|	break;
 3792|       |
 3793|      0|	case SVG_Transform_Rotate_datatype:
  ------------------
  |  Branch (3793:2): [True: 0, False: 1.11k]
  ------------------
 3794|      0|	{
 3795|      0|		SVG_Point_Angle *p;
 3796|      0|		GF_SAFEALLOC(p, SVG_Point_Angle)
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3797|      0|		return p;
 3798|      0|	}
 3799|      0|	break;
 3800|       |
 3801|      8|	case SVG_ViewBox_datatype:
  ------------------
  |  Branch (3801:2): [True: 8, False: 1.10k]
  ------------------
 3802|      8|	{
 3803|      8|		SVG_ViewBox *viewbox;
 3804|      8|		GF_SAFEALLOC(viewbox, SVG_ViewBox)
  ------------------
  |  |  242|      8|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      8|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      8|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 8, False: 0]
  |  |  ------------------
  |  |  245|      8|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      8|		}\
  |  |  247|      8|	}
  ------------------
 3805|      8|		return viewbox;
 3806|      0|	}
 3807|      0|	break;
 3808|     72|	case XMLRI_datatype:
  ------------------
  |  Branch (3808:2): [True: 72, False: 1.04k]
  ------------------
 3809|     74|	case XML_IDREF_datatype:
  ------------------
  |  Branch (3809:2): [True: 2, False: 1.11k]
  ------------------
 3810|     74|	{
 3811|     74|		XMLRI *iri;
 3812|     74|		GF_SAFEALLOC(iri, XMLRI)
  ------------------
  |  |  242|     74|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     74|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     74|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 74, False: 0]
  |  |  ------------------
  |  |  245|     74|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     74|		}\
  |  |  247|     74|	}
  ------------------
 3813|     74|		return iri;
 3814|     72|	}
 3815|      0|	break;
 3816|     19|	case SVG_FontFamily_datatype:
  ------------------
  |  Branch (3816:2): [True: 19, False: 1.09k]
  ------------------
 3817|     19|	{
 3818|     19|		SVG_FontFamily *fontfamily;
 3819|     19|		GF_SAFEALLOC(fontfamily, SVG_FontFamily)
  ------------------
  |  |  242|     19|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     19|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     19|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 19, False: 0]
  |  |  ------------------
  |  |  245|     19|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     19|		}\
  |  |  247|     19|	}
  ------------------
 3820|     19|		return fontfamily;
 3821|     72|	}
 3822|      0|	break;
 3823|     60|	case DOM_String_datatype:
  ------------------
  |  Branch (3823:2): [True: 60, False: 1.05k]
  ------------------
 3824|     62|	case SVG_ContentType_datatype:
  ------------------
  |  Branch (3824:2): [True: 2, False: 1.11k]
  ------------------
 3825|     66|	case SVG_LanguageID_datatype:
  ------------------
  |  Branch (3825:2): [True: 4, False: 1.11k]
  ------------------
 3826|     66|	case SVG_ID_datatype:
  ------------------
  |  Branch (3826:2): [True: 0, False: 1.11k]
  ------------------
 3827|     66|	{
 3828|     66|		SVG_String *string;
 3829|     66|		GF_SAFEALLOC(string, SVG_String)
  ------------------
  |  |  242|     66|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     66|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     66|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 66, False: 0]
  |  |  ------------------
  |  |  245|     66|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     66|		}\
  |  |  247|     66|	}
  ------------------
 3830|     66|		return string;
 3831|     66|	}
 3832|      0|	break;
 3833|     19|	case DOM_StringList_datatype:
  ------------------
  |  Branch (3833:2): [True: 19, False: 1.09k]
  ------------------
 3834|     37|	case XMLRI_List_datatype:
  ------------------
  |  Branch (3834:2): [True: 18, False: 1.09k]
  ------------------
 3835|     79|	case SVG_Points_datatype:
  ------------------
  |  Branch (3835:2): [True: 42, False: 1.07k]
  ------------------
 3836|     79|	case SVG_Coordinates_datatype:
  ------------------
  |  Branch (3836:2): [True: 0, False: 1.11k]
  ------------------
 3837|     88|	case SMIL_Times_datatype:
  ------------------
  |  Branch (3837:2): [True: 9, False: 1.10k]
  ------------------
 3838|     93|	case SMIL_KeySplines_datatype:
  ------------------
  |  Branch (3838:2): [True: 5, False: 1.11k]
  ------------------
 3839|     98|	case SMIL_KeyTimes_datatype:
  ------------------
  |  Branch (3839:2): [True: 5, False: 1.11k]
  ------------------
 3840|     98|	case SMIL_KeyPoints_datatype:
  ------------------
  |  Branch (3840:2): [True: 0, False: 1.11k]
  ------------------
 3841|    100|	case SVG_Numbers_datatype:
  ------------------
  |  Branch (3841:2): [True: 2, False: 1.11k]
  ------------------
 3842|    100|	{
 3843|    100|		ListOfXXX *list;
 3844|    100|		GF_SAFEALLOC(list, ListOfXXX)
  ------------------
  |  |  242|    100|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|    100|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|    100|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 100, False: 0]
  |  |  ------------------
  |  |  245|    100|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|    100|		}\
  |  |  247|    100|	}
  ------------------
 3845|    100|		if (list) *list = gf_list_new();
  ------------------
  |  Branch (3845:7): [True: 100, False: 0]
  ------------------
 3846|    100|		return list;
 3847|     98|	}
 3848|      0|	break;
 3849|     11|	case SVG_PreserveAspectRatio_datatype:
  ------------------
  |  Branch (3849:2): [True: 11, False: 1.10k]
  ------------------
 3850|     11|	{
 3851|     11|		SVG_PreserveAspectRatio *par;
 3852|     11|		GF_SAFEALLOC(par, SVG_PreserveAspectRatio)
  ------------------
  |  |  242|     11|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     11|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     11|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 11, False: 0]
  |  |  ------------------
  |  |  245|     11|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     11|		}\
  |  |  247|     11|	}
  ------------------
 3853|     11|		return par;
 3854|     98|	}
 3855|      0|	break;
 3856|     10|	case SVG_PathData_datatype:
  ------------------
  |  Branch (3856:2): [True: 10, False: 1.10k]
  ------------------
 3857|     10|	{
 3858|     10|		SVG_PathData *path;
 3859|     10|		GF_SAFEALLOC(path, SVG_PathData);
  ------------------
  |  |  242|     10|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     10|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     10|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 10, False: 0]
  |  |  ------------------
  |  |  245|     10|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     10|		}\
  |  |  247|     10|	}
  ------------------
 3860|     10|		if (!path) return NULL;
  ------------------
  |  Branch (3860:7): [True: 0, False: 10]
  ------------------
 3861|     10|#if USE_GF_PATH
 3862|     10|		gf_path_reset(path);
 3863|     10|		path->fineness = FIX_ONE;
  ------------------
  |  |  118|     10|#define FIX_ONE			1.0f
  ------------------
 3864|       |#else
 3865|       |		path->commands = gf_list_new();
 3866|       |		path->points = gf_list_new();
 3867|       |#endif
 3868|     10|		return path;
 3869|     10|	}
 3870|      0|	break;
 3871|      4|	case LASeR_Choice_datatype:
  ------------------
  |  Branch (3871:2): [True: 4, False: 1.11k]
  ------------------
 3872|      4|	{
 3873|      4|		LASeR_Choice *ch;
 3874|      4|		GF_SAFEALLOC(ch, LASeR_Choice)
  ------------------
  |  |  242|      4|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      4|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      4|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 4, False: 0]
  |  |  ------------------
  |  |  245|      4|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      4|		}\
  |  |  247|      4|	}
  ------------------
 3875|      4|		return ch;
 3876|     10|	}
 3877|     81|	case SVG_Focus_datatype:
  ------------------
  |  Branch (3877:2): [True: 81, False: 1.03k]
  ------------------
 3878|     81|	{
 3879|     81|		SVG_Focus *foc;
 3880|     81|		GF_SAFEALLOC(foc, SVG_Focus)
  ------------------
  |  |  242|     81|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     81|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     81|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 81, False: 0]
  |  |  ------------------
  |  |  245|     81|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     81|		}\
  |  |  247|     81|	}
  ------------------
 3881|     81|		return foc;
 3882|     10|	}
 3883|      0|	case SVG_ClipPath_datatype:
  ------------------
  |  Branch (3883:2): [True: 0, False: 1.11k]
  ------------------
 3884|      0|	{
 3885|      0|		SVG_ClipPath *cp;
 3886|      0|		GF_SAFEALLOC(cp, SVG_ClipPath)
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3887|      0|		return cp;
 3888|     10|	}
 3889|      5|	case SMIL_AttributeName_datatype:
  ------------------
  |  Branch (3889:2): [True: 5, False: 1.11k]
  ------------------
 3890|      5|	{
 3891|      5|		SMIL_AttributeName *an;
 3892|      5|		GF_SAFEALLOC(an, SMIL_AttributeName)
  ------------------
  |  |  242|      5|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      5|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      5|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 5, False: 0]
  |  |  ------------------
  |  |  245|      5|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      5|		}\
  |  |  247|      5|	}
  ------------------
 3893|      5|		return an;
 3894|     10|	}
 3895|      8|	case SMIL_RepeatCount_datatype:
  ------------------
  |  Branch (3895:2): [True: 8, False: 1.10k]
  ------------------
 3896|      8|	{
 3897|      8|		SMIL_RepeatCount *rc;
 3898|      8|		GF_SAFEALLOC(rc, SMIL_RepeatCount)
  ------------------
  |  |  242|      8|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      8|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      8|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 8, False: 0]
  |  |  ------------------
  |  |  245|      8|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      8|		}\
  |  |  247|      8|	}
  ------------------
 3899|      8|		return rc;
 3900|     10|	}
 3901|     19|	case SMIL_Duration_datatype:
  ------------------
  |  Branch (3901:2): [True: 19, False: 1.09k]
  ------------------
 3902|     19|	{
 3903|     19|		SMIL_Duration *sd;
 3904|     19|		GF_SAFEALLOC(sd, SMIL_Duration)
  ------------------
  |  |  242|     19|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     19|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     19|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 19, False: 0]
  |  |  ------------------
  |  |  245|     19|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     19|		}\
  |  |  247|     19|	}
  ------------------
 3905|     19|		return sd;
 3906|     10|	}
 3907|     18|	case SMIL_AnimateValue_datatype:
  ------------------
  |  Branch (3907:2): [True: 18, False: 1.09k]
  ------------------
 3908|     18|	{
 3909|     18|		SMIL_AnimateValue *av;
 3910|     18|		GF_SAFEALLOC(av, SMIL_AnimateValue)
  ------------------
  |  |  242|     18|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     18|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     18|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 18, False: 0]
  |  |  ------------------
  |  |  245|     18|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     18|		}\
  |  |  247|     18|	}
  ------------------
 3911|     18|		return av;
 3912|     10|	}
 3913|      0|	break;
 3914|      2|	case SMIL_AnimateValues_datatype:
  ------------------
  |  Branch (3914:2): [True: 2, False: 1.11k]
  ------------------
 3915|      2|	{
 3916|      2|		SMIL_AnimateValues *av;
 3917|      2|		GF_SAFEALLOC(av, SMIL_AnimateValues)
  ------------------
  |  |  242|      2|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      2|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      2|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 2, False: 0]
  |  |  ------------------
  |  |  245|      2|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      2|		}\
  |  |  247|      2|	}
  ------------------
 3918|      2|		if (!av) return NULL;
  ------------------
  |  Branch (3918:7): [True: 0, False: 2]
  ------------------
 3919|      2|		av->values = gf_list_new();
 3920|      2|		return av;
 3921|      2|	}
 3922|      0|	break;
 3923|      6|	case SVG_Clock_datatype:
  ------------------
  |  Branch (3923:2): [True: 6, False: 1.11k]
  ------------------
 3924|      6|	{
 3925|      6|		SVG_Clock *ck;
 3926|      6|		GF_SAFEALLOC(ck, SVG_Clock)
  ------------------
  |  |  242|      6|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      6|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      6|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 6, False: 0]
  |  |  ------------------
  |  |  245|      6|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      6|		}\
  |  |  247|      6|	}
  ------------------
 3927|      6|		return ck;
 3928|      2|	}
 3929|      0|	break;
 3930|       |
 3931|      1|	case XMLEV_Event_datatype:
  ------------------
  |  Branch (3931:2): [True: 1, False: 1.11k]
  ------------------
 3932|      1|	{
 3933|      1|		XMLEV_Event *e;
 3934|      1|		GF_SAFEALLOC(e, XMLEV_Event);
  ------------------
  |  |  242|      1|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      1|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      1|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 1, False: 0]
  |  |  ------------------
  |  |  245|      1|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      1|		}\
  |  |  247|      1|	}
  ------------------
 3935|      1|		return e;
 3936|      2|	}
 3937|      0|	break;
 3938|      1|	case LASeR_Size_datatype:
  ------------------
  |  Branch (3938:2): [True: 1, False: 1.11k]
  ------------------
 3939|      1|	{
 3940|      1|		LASeR_Size *s;
 3941|      1|		GF_SAFEALLOC(s, LASeR_Size);
  ------------------
  |  |  242|      1|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      1|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      1|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 1, False: 0]
  |  |  ------------------
  |  |  245|      1|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      1|		}\
  |  |  247|      1|	}
  ------------------
 3942|      1|		return s;
 3943|      2|	}
 3944|      0|	break;
 3945|       |
 3946|      0|	case SVG_Unknown_datatype:
  ------------------
  |  Branch (3946:2): [True: 0, False: 1.11k]
  ------------------
 3947|      0|	{
 3948|      0|		SVG_String *string;
 3949|      0|		GF_LOG(GF_LOG_WARNING, GF_LOG_PARSER, ("[SVG Attributes] Unspecified attribute type - defaulting to string.\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3950|      0|		GF_SAFEALLOC(string, SVG_String);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
 3951|      0|		return string;
 3952|      2|	}
 3953|       |
 3954|       |
 3955|      0|	default:
  ------------------
  |  Branch (3955:2): [True: 0, False: 1.11k]
  ------------------
 3956|      0|		GF_LOG(GF_LOG_ERROR, GF_LOG_PARSER, ("[SVG Attributes] Cannot create attribute value: Type %s not supported.\n", gf_svg_attribute_type_to_string(attribute_type)));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3957|      0|		break;
 3958|  1.11k|	}
 3959|      0|	return NULL;
 3960|  1.11k|}
gf_svg_attributes_copy:
 6206|     77|{
 6207|     77|	if (!a->far_ptr || !b->far_ptr) return GF_BAD_PARAM;
  ------------------
  |  Branch (6207:6): [True: 0, False: 77]
  |  Branch (6207:21): [True: 0, False: 77]
  ------------------
 6208|     77|	switch (a->fieldType) {
 6209|       |	/* Numeric types */
 6210|      0|	case SVG_Color_datatype:
  ------------------
  |  Branch (6210:2): [True: 0, False: 77]
  ------------------
 6211|      0|		*((SVG_Color *)a->far_ptr) = *((SVG_Color *)b->far_ptr);
 6212|      0|		if (clamp) svg_color_clamp((SVG_Color *)a->far_ptr);
  ------------------
  |  Branch (6212:7): [True: 0, False: 0]
  ------------------
 6213|      0|		break;
 6214|       |
 6215|     28|	case SVG_Paint_datatype:
  ------------------
  |  Branch (6215:2): [True: 28, False: 49]
  ------------------
 6216|     28|	{
 6217|     28|		SVG_Paint *pa = (SVG_Paint *)a->far_ptr;
 6218|     28|		SVG_Paint *pb = (SVG_Paint *)b->far_ptr;
 6219|     28|		pa->type = pb->type;
 6220|     28|		if (pb->type == SVG_PAINT_URI) {
  ------------------
  |  Branch (6220:7): [True: 0, False: 28]
  ------------------
 6221|      0|			GF_FieldInfo tmp_a, tmp_b;
 6222|      0|			tmp_a.fieldType = tmp_b.fieldType = XMLRI_datatype;
 6223|      0|			tmp_a.far_ptr = &pa->iri;
 6224|      0|			tmp_b.far_ptr = &pb->iri;
 6225|      0|			gf_svg_attributes_copy(&tmp_a, &tmp_b, 0);
 6226|     28|		} else {
 6227|     28|			pa->color = pb->color;
 6228|     28|		}
 6229|     28|		return GF_OK;
 6230|      0|	}
 6231|      0|	break;
 6232|       |
 6233|     10|	case SVG_Number_datatype:
  ------------------
  |  Branch (6233:2): [True: 10, False: 67]
  ------------------
 6234|     14|	case SVG_Length_datatype:
  ------------------
  |  Branch (6234:2): [True: 4, False: 73]
  ------------------
 6235|     16|	case SVG_Coordinate_datatype:
  ------------------
  |  Branch (6235:2): [True: 2, False: 75]
  ------------------
 6236|     17|	case SVG_FontSize_datatype:
  ------------------
  |  Branch (6236:2): [True: 1, False: 76]
  ------------------
 6237|     17|		*((SVG_Number *)a->far_ptr) = *((SVG_Number *)b->far_ptr);
 6238|     17|		break;
 6239|       |
 6240|      0|	case SVG_ViewBox_datatype:
  ------------------
  |  Branch (6240:2): [True: 0, False: 77]
  ------------------
 6241|      0|		*((SVG_ViewBox *)a->far_ptr) = *((SVG_ViewBox *)b->far_ptr);
 6242|      0|		break;
 6243|       |
 6244|      0|	case SVG_Points_datatype:
  ------------------
  |  Branch (6244:2): [True: 0, False: 77]
  ------------------
 6245|      0|		return svg_points_copy((GF_List**)a->far_ptr, (GF_List**)b->far_ptr);
 6246|       |
 6247|      0|	case SVG_Numbers_datatype:
  ------------------
  |  Branch (6247:2): [True: 0, False: 77]
  ------------------
 6248|      0|	case SVG_Coordinates_datatype:
  ------------------
  |  Branch (6248:2): [True: 0, False: 77]
  ------------------
 6249|      0|		return svg_numbers_copy((GF_List**)a->far_ptr, (GF_List**)b->far_ptr);
 6250|       |
 6251|      0|	case SVG_PathData_datatype:
  ------------------
  |  Branch (6251:2): [True: 0, False: 77]
  ------------------
 6252|      0|		return svg_path_copy((SVG_PathData*)a->far_ptr, (SVG_PathData*)b->far_ptr);
 6253|       |
 6254|      0|	case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (6254:2): [True: 0, False: 77]
  ------------------
 6255|      0|		return svg_dasharray_copy((SVG_StrokeDashArray*)a->far_ptr, (SVG_StrokeDashArray*)b->far_ptr);
 6256|       |
 6257|      0|	case SVG_Motion_datatype:
  ------------------
  |  Branch (6257:2): [True: 0, False: 77]
  ------------------
 6258|      0|		gf_mx2d_copy(*(GF_Matrix2D *)a->far_ptr, *(GF_Matrix2D *)b->far_ptr);
  ------------------
  |  |  397|      0|#define gf_mx2d_copy(_obj, from) memcpy((_obj).m, (from).m, sizeof(Fixed)*6)
  ------------------
 6259|      0|		return GF_OK;
 6260|       |
 6261|      1|	case SVG_Transform_datatype:
  ------------------
  |  Branch (6261:2): [True: 1, False: 76]
  ------------------
 6262|      1|		switch (b->fieldType) {
 6263|      0|		case SVG_Transform_Translate_datatype:
  ------------------
  |  Branch (6263:3): [True: 0, False: 1]
  ------------------
 6264|      0|			gf_mx2d_init(((SVG_Transform *)a->far_ptr)->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 6265|      0|			gf_mx2d_add_translation(&((SVG_Transform *)a->far_ptr)->mat, ((SVG_Point*)b->far_ptr)->x, ((SVG_Point*)b->far_ptr)->y);
 6266|      0|			break;
 6267|      0|		case SVG_Transform_Scale_datatype:
  ------------------
  |  Branch (6267:3): [True: 0, False: 1]
  ------------------
 6268|      0|			gf_mx2d_init(((SVG_Transform *)a->far_ptr)->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 6269|      0|			gf_mx2d_add_scale(&((SVG_Transform *)a->far_ptr)->mat, ((SVG_Point*)b->far_ptr)->x, ((SVG_Point*)b->far_ptr)->y);
 6270|      0|			break;
 6271|      0|		case SVG_Transform_Rotate_datatype:
  ------------------
  |  Branch (6271:3): [True: 0, False: 1]
  ------------------
 6272|      0|			gf_mx2d_init(((SVG_Transform *)a->far_ptr)->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 6273|      0|			gf_mx2d_add_rotation(&((SVG_Transform *)a->far_ptr)->mat, ((SVG_Point_Angle*)b->far_ptr)->x, ((SVG_Point_Angle*)b->far_ptr)->y, ((SVG_Point_Angle*)b->far_ptr)->angle);
 6274|      0|			break;
 6275|      0|		case SVG_Transform_SkewX_datatype:
  ------------------
  |  Branch (6275:3): [True: 0, False: 1]
  ------------------
 6276|      0|			gf_mx2d_init(((SVG_Transform *)a->far_ptr)->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 6277|      0|			gf_mx2d_add_skew_x(&((SVG_Transform *)a->far_ptr)->mat, *(Fixed *)b->far_ptr);
 6278|      0|			break;
 6279|      0|		case SVG_Transform_SkewY_datatype:
  ------------------
  |  Branch (6279:3): [True: 0, False: 1]
  ------------------
 6280|      0|			gf_mx2d_init(((SVG_Transform *)a->far_ptr)->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
 6281|      0|			gf_mx2d_add_skew_y(&((SVG_Transform *)a->far_ptr)->mat, *(Fixed *)b->far_ptr);
 6282|      0|			break;
 6283|      1|		case SVG_Transform_datatype:
  ------------------
  |  Branch (6283:3): [True: 1, False: 0]
  ------------------
 6284|      1|			gf_mx2d_copy(((SVG_Transform *)a->far_ptr)->mat, ((SVG_Transform *)b->far_ptr)->mat);
  ------------------
  |  |  397|      1|#define gf_mx2d_copy(_obj, from) memcpy((_obj).m, (from).m, sizeof(Fixed)*6)
  ------------------
 6285|      1|			break;
 6286|      0|		default:
  ------------------
  |  Branch (6286:3): [True: 0, False: 1]
  ------------------
 6287|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_SCENE, ("[SVG Attributes] forbidden type of transform\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6288|      0|			return GF_NOT_SUPPORTED;
 6289|      1|		}
 6290|      1|		return GF_OK;
 6291|       |
 6292|       |	/* Keyword types */
 6293|      4|	case SVG_Boolean_datatype:
  ------------------
  |  Branch (6293:2): [True: 4, False: 73]
  ------------------
 6294|      4|	case SVG_FillRule_datatype:
  ------------------
  |  Branch (6294:2): [True: 0, False: 77]
  ------------------
 6295|      4|	case SVG_StrokeLineJoin_datatype:
  ------------------
  |  Branch (6295:2): [True: 0, False: 77]
  ------------------
 6296|      5|	case SVG_StrokeLineCap_datatype:
  ------------------
  |  Branch (6296:2): [True: 1, False: 76]
  ------------------
 6297|      6|	case SVG_FontStyle_datatype:
  ------------------
  |  Branch (6297:2): [True: 1, False: 76]
  ------------------
 6298|     10|	case SVG_FontWeight_datatype:
  ------------------
  |  Branch (6298:2): [True: 4, False: 73]
  ------------------
 6299|     10|	case SVG_FontVariant_datatype:
  ------------------
  |  Branch (6299:2): [True: 0, False: 77]
  ------------------
 6300|     15|	case SVG_TextAnchor_datatype:
  ------------------
  |  Branch (6300:2): [True: 5, False: 72]
  ------------------
 6301|     15|	case SVG_Display_datatype:
  ------------------
  |  Branch (6301:2): [True: 0, False: 77]
  ------------------
 6302|     17|	case SVG_Visibility_datatype:
  ------------------
  |  Branch (6302:2): [True: 2, False: 75]
  ------------------
 6303|     17|	case SVG_GradientUnit_datatype:
  ------------------
  |  Branch (6303:2): [True: 0, False: 77]
  ------------------
 6304|     17|	case SVG_PreserveAspectRatio_datatype:
  ------------------
  |  Branch (6304:2): [True: 0, False: 77]
  ------------------
 6305|     17|	case XML_Space_datatype:
  ------------------
  |  Branch (6305:2): [True: 0, False: 77]
  ------------------
 6306|     17|	case XMLEV_Propagate_datatype:
  ------------------
  |  Branch (6306:2): [True: 0, False: 77]
  ------------------
 6307|     17|	case XMLEV_DefaultAction_datatype:
  ------------------
  |  Branch (6307:2): [True: 0, False: 77]
  ------------------
 6308|     17|	case XMLEV_Phase_datatype:
  ------------------
  |  Branch (6308:2): [True: 0, False: 77]
  ------------------
 6309|     17|	case SMIL_SyncBehavior_datatype:
  ------------------
  |  Branch (6309:2): [True: 0, False: 77]
  ------------------
 6310|     17|	case SMIL_AttributeType_datatype:
  ------------------
  |  Branch (6310:2): [True: 0, False: 77]
  ------------------
 6311|     17|	case SMIL_CalcMode_datatype:
  ------------------
  |  Branch (6311:2): [True: 0, False: 77]
  ------------------
 6312|     17|	case SMIL_Additive_datatype:
  ------------------
  |  Branch (6312:2): [True: 0, False: 77]
  ------------------
 6313|     17|	case SMIL_Accumulate_datatype:
  ------------------
  |  Branch (6313:2): [True: 0, False: 77]
  ------------------
 6314|     17|	case SMIL_Restart_datatype:
  ------------------
  |  Branch (6314:2): [True: 0, False: 77]
  ------------------
 6315|     17|	case SMIL_Fill_datatype:
  ------------------
  |  Branch (6315:2): [True: 0, False: 77]
  ------------------
 6316|     17|	case SVG_Overflow_datatype:
  ------------------
  |  Branch (6316:2): [True: 0, False: 77]
  ------------------
 6317|     17|	case SVG_ZoomAndPan_datatype:
  ------------------
  |  Branch (6317:2): [True: 0, False: 77]
  ------------------
 6318|     17|	case SVG_DisplayAlign_datatype:
  ------------------
  |  Branch (6318:2): [True: 0, False: 77]
  ------------------
 6319|     17|	case SVG_TextAlign_datatype:
  ------------------
  |  Branch (6319:2): [True: 0, False: 77]
  ------------------
 6320|     17|	case SVG_PointerEvents_datatype:
  ------------------
  |  Branch (6320:2): [True: 0, False: 77]
  ------------------
 6321|     27|	case SVG_RenderingHint_datatype:
  ------------------
  |  Branch (6321:2): [True: 10, False: 67]
  ------------------
 6322|     29|	case SVG_VectorEffect_datatype:
  ------------------
  |  Branch (6322:2): [True: 2, False: 75]
  ------------------
 6323|     29|	case SVG_PlaybackOrder_datatype:
  ------------------
  |  Branch (6323:2): [True: 0, False: 77]
  ------------------
 6324|     29|	case SVG_TimelineBegin_datatype:
  ------------------
  |  Branch (6324:2): [True: 0, False: 77]
  ------------------
 6325|     29|	case SVG_TransformType_datatype:
  ------------------
  |  Branch (6325:2): [True: 0, False: 77]
  ------------------
 6326|     29|	case SVG_Focusable_datatype:
  ------------------
  |  Branch (6326:2): [True: 0, False: 77]
  ------------------
 6327|     29|	case SVG_FocusHighlight_datatype:
  ------------------
  |  Branch (6327:2): [True: 0, False: 77]
  ------------------
 6328|     29|		*(u8 *)a->far_ptr = *(u8 *)b->far_ptr;
 6329|     29|		return GF_OK;
 6330|       |
 6331|      0|	case SMIL_SyncTolerance_datatype:
  ------------------
  |  Branch (6331:2): [True: 0, False: 77]
  ------------------
 6332|      0|		*(SMIL_SyncTolerance*)a->far_ptr = *(SMIL_SyncTolerance*)b->far_ptr;
 6333|      0|		return GF_OK;
 6334|       |	/* Other types */
 6335|      0|	case SVG_ID_datatype:
  ------------------
  |  Branch (6335:2): [True: 0, False: 77]
  ------------------
 6336|      0|	case SVG_LanguageID_datatype:
  ------------------
  |  Branch (6336:2): [True: 0, False: 77]
  ------------------
 6337|      0|	case SVG_ContentType_datatype:
  ------------------
  |  Branch (6337:2): [True: 0, False: 77]
  ------------------
 6338|      0|	case DOM_String_datatype:
  ------------------
  |  Branch (6338:2): [True: 0, False: 77]
  ------------------
 6339|      0|		if (* (SVG_String *)a->far_ptr) gf_free(* (SVG_String *)a->far_ptr);
  ------------------
  |  Branch (6339:7): [True: 0, False: 0]
  ------------------
 6340|      0|		* (SVG_String *)a->far_ptr = *(SVG_String *)b->far_ptr ? gf_strdup(*(SVG_String *)b->far_ptr) : NULL;
  ------------------
  |  Branch (6340:32): [True: 0, False: 0]
  ------------------
 6341|      0|		return GF_OK;
 6342|       |
 6343|      2|	case SVG_FontFamily_datatype:
  ------------------
  |  Branch (6343:2): [True: 2, False: 75]
  ------------------
 6344|      2|		((SVG_FontFamily *)a->far_ptr)->type = ((SVG_FontFamily *)b->far_ptr)->type;
 6345|      2|		if ( ((SVG_FontFamily *)a->far_ptr)->value) gf_free( ((SVG_FontFamily *)a->far_ptr)->value );
  ------------------
  |  Branch (6345:8): [True: 0, False: 2]
  ------------------
 6346|      2|		((SVG_FontFamily *)a->far_ptr)->value = (((SVG_FontFamily *)b->far_ptr)->value ? gf_strdup(((SVG_FontFamily *)b->far_ptr)->value) : NULL );
  ------------------
  |  Branch (6346:44): [True: 1, False: 1]
  ------------------
 6347|      2|		return GF_OK;
 6348|       |
 6349|      0|	case XMLRI_datatype:
  ------------------
  |  Branch (6349:2): [True: 0, False: 77]
  ------------------
 6350|      0|	case XML_IDREF_datatype:
  ------------------
  |  Branch (6350:2): [True: 0, False: 77]
  ------------------
 6351|      0|		((XMLRI *)a->far_ptr)->type = ((XMLRI *)b->far_ptr)->type;
 6352|      0|		if (((XMLRI *)a->far_ptr)->string) gf_free(((XMLRI *)a->far_ptr)->string);
  ------------------
  |  Branch (6352:7): [True: 0, False: 0]
  ------------------
 6353|      0|		if (((XMLRI *)b->far_ptr)->string) {
  ------------------
  |  Branch (6353:7): [True: 0, False: 0]
  ------------------
 6354|      0|			((XMLRI *)a->far_ptr)->string = gf_strdup(((XMLRI *)b->far_ptr)->string);
 6355|      0|		} else {
 6356|      0|			((XMLRI *)a->far_ptr)->string = gf_strdup("");
 6357|      0|		}
 6358|      0|		((XMLRI *)a->far_ptr)->target = ((XMLRI *)b->far_ptr)->target;
 6359|      0|		if (((XMLRI *)a->far_ptr)->type == XMLRI_ELEMENTID) {
  ------------------
  |  Branch (6359:7): [True: 0, False: 0]
  ------------------
 6360|      0|			GF_Node *n = (GF_Node *) ((XMLRI *)b->far_ptr)->target;
 6361|       |			/*TODO Check if assigning IRI from # scenegraph can happen*/
 6362|      0|			if (n) gf_node_register_iri(gf_node_get_graph(n), (XMLRI*)a->far_ptr);
  ------------------
  |  Branch (6362:8): [True: 0, False: 0]
  ------------------
 6363|      0|		}
 6364|      0|		return GF_OK;
 6365|       |
 6366|      0|	case SVG_Focus_datatype:
  ------------------
  |  Branch (6366:2): [True: 0, False: 77]
  ------------------
 6367|      0|	{
 6368|      0|		((SVG_Focus *)a->far_ptr)->type = ((SVG_Focus *)b->far_ptr)->type;
 6369|      0|		if ( ((SVG_Focus *)b->far_ptr)->target.string) {
  ------------------
  |  Branch (6369:8): [True: 0, False: 0]
  ------------------
 6370|      0|			if ( ((SVG_Focus *)a->far_ptr)->target.string)
  ------------------
  |  Branch (6370:9): [True: 0, False: 0]
  ------------------
 6371|      0|				gf_free( ((SVG_Focus *)a->far_ptr)->target.string);
 6372|      0|			((SVG_Focus *)a->far_ptr)->target.string = gf_strdup( ((SVG_Focus *)b->far_ptr)->target.string);
 6373|      0|		}
 6374|      0|	}
 6375|      0|		return GF_OK;
 6376|       |
 6377|      0|	case SVG_ClipPath_datatype:
  ------------------
  |  Branch (6377:2): [True: 0, False: 77]
  ------------------
 6378|      0|		if ( ((SVG_ClipPath *)b->far_ptr)->target.string) {
  ------------------
  |  Branch (6378:8): [True: 0, False: 0]
  ------------------
 6379|      0|			if (((SVG_ClipPath *)a->far_ptr)->target.string)
  ------------------
  |  Branch (6379:8): [True: 0, False: 0]
  ------------------
 6380|      0|				gf_free(((SVG_ClipPath *)a->far_ptr)->target.string);
 6381|      0|			((SVG_ClipPath *)a->far_ptr)->target.string = gf_strdup( ((SVG_ClipPath *)b->far_ptr)->target.string);
 6382|      0|		}
 6383|      0|		return GF_OK;
 6384|       |
 6385|      0|	case SMIL_Times_datatype:
  ------------------
  |  Branch (6385:2): [True: 0, False: 77]
  ------------------
 6386|      0|	{
 6387|      0|		u32 i, count;
 6388|      0|		GF_List *dst = *(GF_List **)a->far_ptr;
 6389|      0|		GF_List *src = *(GF_List **)b->far_ptr;
 6390|      0|		while (gf_list_count(dst)) {
  ------------------
  |  Branch (6390:10): [True: 0, False: 0]
  ------------------
 6391|      0|			SMIL_Time *t = gf_list_get(dst, 0);
 6392|      0|			gf_list_rem(dst, 0);
 6393|      0|			gf_free(t);
 6394|      0|		}
 6395|      0|		count = gf_list_count(src);
 6396|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (6396:13): [True: 0, False: 0]
  ------------------
 6397|      0|			SMIL_Time *t2;
 6398|      0|			SMIL_Time *t = gf_list_get(src, i);
 6399|      0|			t2 = (SMIL_Time*)gf_malloc(sizeof(SMIL_Time));
 6400|      0|			memcpy(t2, t, sizeof(SMIL_Time));
 6401|      0|			gf_list_add(dst, t2);
 6402|      0|		}
 6403|      0|	}
 6404|      0|	return GF_OK;
 6405|      0|	case SMIL_AttributeName_datatype:
  ------------------
  |  Branch (6405:2): [True: 0, False: 77]
  ------------------
 6406|      0|	{
 6407|      0|		SMIL_AttributeName *saa = (SMIL_AttributeName *)a->far_ptr;
 6408|      0|		SMIL_AttributeName *sab = (SMIL_AttributeName *)b->far_ptr;
 6409|      0|		saa->tag = sab->tag;
 6410|      0|		saa->type = sab->type;
 6411|      0|		saa->name = sab->name ? gf_strdup(sab->name) : NULL;
  ------------------
  |  Branch (6411:15): [True: 0, False: 0]
  ------------------
 6412|      0|	}
 6413|      0|	break;
 6414|      0|	case SMIL_Duration_datatype:
  ------------------
  |  Branch (6414:2): [True: 0, False: 77]
  ------------------
 6415|      0|	{
 6416|      0|		SMIL_Duration *da = (SMIL_Duration*)a->far_ptr;
 6417|      0|		SMIL_Duration *db = (SMIL_Duration*)b->far_ptr;
 6418|      0|		da->type = db->type;
 6419|      0|		da->clock_value = db->clock_value;
 6420|      0|	}
 6421|      0|	break;
 6422|      0|	case SMIL_AnimateValue_datatype:
  ------------------
  |  Branch (6422:2): [True: 0, False: 77]
  ------------------
 6423|      0|	{
 6424|      0|		SMIL_AnimateValue *sa = (SMIL_AnimateValue*)a->far_ptr;
 6425|      0|		SMIL_AnimateValue *sb = (SMIL_AnimateValue*)b->far_ptr;
 6426|      0|		sa->type = sb->type;
 6427|      0|		if (sb->value) {
  ------------------
  |  Branch (6427:7): [True: 0, False: 0]
  ------------------
 6428|      0|			GF_FieldInfo ava, avb;
 6429|      0|			sa->value = gf_svg_create_attribute_value(sa->type);
 6430|      0|			ava.fieldIndex = avb.fieldIndex = 0;
 6431|      0|			ava.fieldType = avb.fieldType = sb->type;
 6432|      0|			ava.far_ptr = sa->value;
 6433|      0|			avb.far_ptr = sb->value;
 6434|      0|			gf_svg_attributes_copy(&ava, &avb, 0);
 6435|      0|		}
 6436|      0|	}
 6437|      0|	break;
 6438|       |
 6439|       |	/* Unsupported types */
 6440|      0|	case XMLRI_List_datatype:
  ------------------
  |  Branch (6440:2): [True: 0, False: 77]
  ------------------
 6441|      0|	case DOM_StringList_datatype:
  ------------------
  |  Branch (6441:2): [True: 0, False: 77]
  ------------------
 6442|      0|	case SVG_GradientOffset_datatype:
  ------------------
  |  Branch (6442:2): [True: 0, False: 77]
  ------------------
 6443|      0|	case SVG_Clock_datatype:
  ------------------
  |  Branch (6443:2): [True: 0, False: 77]
  ------------------
 6444|      0|	case SMIL_KeyTimes_datatype:
  ------------------
  |  Branch (6444:2): [True: 0, False: 77]
  ------------------
 6445|      0|	case SMIL_KeyPoints_datatype:
  ------------------
  |  Branch (6445:2): [True: 0, False: 77]
  ------------------
 6446|      0|	case SMIL_KeySplines_datatype:
  ------------------
  |  Branch (6446:2): [True: 0, False: 77]
  ------------------
 6447|      0|	case SMIL_AnimateValues_datatype:
  ------------------
  |  Branch (6447:2): [True: 0, False: 77]
  ------------------
 6448|      0|	case SMIL_RepeatCount_datatype:
  ------------------
  |  Branch (6448:2): [True: 0, False: 77]
  ------------------
 6449|      0|	default:
  ------------------
  |  Branch (6449:2): [True: 0, False: 77]
  ------------------
 6450|      0|		GF_LOG(GF_LOG_WARNING, GF_LOG_SCENE, ("[SVG Attributes] copy of attributes %s of type %s not supported\n", a->name, gf_svg_attribute_type_to_string(a->fieldType)));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 6451|      0|		return GF_OK;
 6452|     77|	}
 6453|     17|	return GF_OK;
 6454|     77|}

gf_svg_is_animation_tag:
   33|    332|{
   34|    332|	return (tag == TAG_SVG_set ||
  ------------------
  |  Branch (34:10): [True: 2, False: 330]
  ------------------
   35|    330|	        tag == TAG_SVG_animate ||
  ------------------
  |  Branch (35:10): [True: 10, False: 320]
  ------------------
   36|    320|	        tag == TAG_SVG_animateColor ||
  ------------------
  |  Branch (36:10): [True: 4, False: 316]
  ------------------
   37|    316|	        tag == TAG_SVG_animateTransform ||
  ------------------
  |  Branch (37:10): [True: 4, False: 312]
  ------------------
   38|    312|	        tag == TAG_SVG_animateMotion ||
  ------------------
  |  Branch (38:10): [True: 4, False: 308]
  ------------------
   39|    308|	        tag == TAG_SVG_discard
  ------------------
  |  Branch (39:10): [True: 0, False: 308]
  ------------------
   40|    332|	       ) ? 1 : 0;
   41|    332|}
gf_svg_is_timing_tag:
   44|    332|{
   45|    332|	if (gf_svg_is_animation_tag(tag)) return 1;
  ------------------
  |  Branch (45:6): [True: 24, False: 308]
  ------------------
   46|    308|	else return (tag == TAG_SVG_animation ||
  ------------------
  |  Branch (46:15): [True: 0, False: 308]
  ------------------
   47|    308|		             tag == TAG_SVG_audio ||
  ------------------
  |  Branch (47:16): [True: 10, False: 298]
  ------------------
   48|    298|		             tag == TAG_LSR_conditional ||
  ------------------
  |  Branch (48:16): [True: 0, False: 298]
  ------------------
   49|    298|		             tag == TAG_LSR_updates ||
  ------------------
  |  Branch (49:16): [True: 0, False: 298]
  ------------------
   50|    298|		             tag == TAG_SVG_video)? GF_TRUE : GF_FALSE;
  ------------------
  |  Branch (50:16): [True: 4, False: 294]
  ------------------
   51|    332|}
gf_svg_create_node:
   54|    166|{
   55|    166|	SVG_Element *p;
   56|    166|	if (gf_svg_is_timing_tag(ElementTag)) {
  ------------------
  |  Branch (56:6): [True: 19, False: 147]
  ------------------
   57|     19|		SVGTimedAnimBaseElement *tap;
   58|     19|		GF_SAFEALLOC(tap, SVGTimedAnimBaseElement);
  ------------------
  |  |  242|     19|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|     19|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|     19|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 19, False: 0]
  |  |  ------------------
  |  |  245|     19|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|     19|		}\
  |  |  247|     19|	}
  ------------------
   59|     19|		p = (SVG_Element *)tap;
   60|    147|	} else if (ElementTag == TAG_SVG_handler) {
  ------------------
  |  Branch (60:13): [True: 0, False: 147]
  ------------------
   61|      0|		SVG_handlerElement *hdl;
   62|      0|		GF_SAFEALLOC(hdl, SVG_handlerElement);
  ------------------
  |  |  242|      0|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|      0|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|      0|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 0, False: 0]
  |  |  ------------------
  |  |  245|      0|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|      0|		}\
  |  |  247|      0|	}
  ------------------
   63|      0|		p = (SVG_Element *)hdl;
   64|    147|	} else {
   65|    147|		GF_SAFEALLOC(p, SVG_Element);
  ------------------
  |  |  242|    147|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|    147|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|    147|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 147, False: 0]
  |  |  ------------------
  |  |  245|    147|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|    147|		}\
  |  |  247|    147|	}
  ------------------
   66|    147|	}
   67|    166|	if (!p) return NULL;
  ------------------
  |  Branch (67:6): [True: 0, False: 166]
  ------------------
   68|    166|	gf_node_setup((GF_Node *)p, ElementTag);
   69|    166|	gf_sg_parent_setup((GF_Node *) p);
   70|    166|	return p;
   71|    166|}
gf_svg_node_del:
   74|    166|{
   75|    166|	SVG_Element *p = (SVG_Element *)node;
   76|       |
   77|    166|	if (p->sgprivate->interact && p->sgprivate->interact->animations) {
  ------------------
  |  Branch (77:6): [True: 0, False: 166]
  |  Branch (77:32): [True: 0, False: 0]
  ------------------
   78|      0|		gf_smil_anim_delete_animations((GF_Node *)p);
   79|      0|	}
   80|    166|	if (p->sgprivate->tag==TAG_SVG_listener) {
  ------------------
  |  Branch (80:6): [True: 1, False: 165]
  ------------------
   81|       |		/*remove from target's listener list*/
   82|      1|		gf_dom_event_remove_listener_from_parent((GF_DOMEventTarget *)node->sgprivate->UserPrivate, (GF_Node *)p);
   83|      1|	}
   84|       |	/*if this is a handler with a UserPrivate, this is a handler with an implicit listener
   85|       |	(eg handler with ev:event=""). Destroy the associated listener*/
   86|    166|	if (p->sgprivate->tag==TAG_SVG_handler) {
  ------------------
  |  Branch (86:6): [True: 0, False: 166]
  ------------------
   87|      0|		GF_Node *listener = p->sgprivate->UserPrivate;
   88|      0|		if (listener && (listener->sgprivate->tag==TAG_SVG_listener)) {
  ------------------
  |  Branch (88:7): [True: 0, False: 0]
  |  Branch (88:19): [True: 0, False: 0]
  ------------------
   89|      0|			GF_FieldInfo info;
   90|      0|			if (gf_node_get_attribute_by_tag(listener, TAG_XMLEV_ATT_handler, 0, 0, &info) == GF_OK) {
  ------------------
  |  Branch (90:8): [True: 0, False: 0]
  ------------------
   91|      0|				XMLRI *iri = (XMLRI *)info.far_ptr;
   92|      0|				if (iri->target) {
  ------------------
  |  Branch (92:9): [True: 0, False: 0]
  ------------------
   93|      0|					gf_assert(iri->target==p);
   94|      0|					iri->target = NULL;
   95|      0|				}
   96|      0|			}
   97|      0|			gf_node_unregister(listener, NULL);
   98|       |//			gf_svg_node_del(listener);
   99|      0|		}
  100|      0|	}
  101|       |	/*remove this node from associated listeners*/
  102|    166|	if (node->sgprivate->interact && node->sgprivate->interact->dom_evt) {
  ------------------
  |  Branch (102:6): [True: 0, False: 166]
  |  Branch (102:35): [True: 0, False: 0]
  ------------------
  103|      0|		u32 i, count;
  104|      0|		count = gf_dom_listener_count(node);
  105|      0|		for (i=0; i<count; i++) {
  ------------------
  |  Branch (105:13): [True: 0, False: 0]
  ------------------
  106|      0|			GF_Node *listener = (GF_Node *)gf_list_get(node->sgprivate->interact->dom_evt->listeners, i);
  107|      0|			listener->sgprivate->UserPrivate = NULL;
  108|      0|		}
  109|      0|	}
  110|       |
  111|    166|	if (gf_svg_is_timing_tag(node->sgprivate->tag)) {
  ------------------
  |  Branch (111:6): [True: 19, False: 147]
  ------------------
  112|     19|		SVGTimedAnimBaseElement *tap = (SVGTimedAnimBaseElement *)node;
  113|     19|		if (tap->animp) {
  ------------------
  |  Branch (113:7): [True: 0, False: 19]
  ------------------
  114|      0|			gf_free(tap->animp);
  115|      0|			gf_smil_anim_remove_from_target((GF_Node *)tap, (GF_Node *)tap->xlinkp->href->target);
  116|      0|		}
  117|     19|		if (tap->timingp)		{
  ------------------
  |  Branch (117:7): [True: 0, False: 19]
  ------------------
  118|      0|			gf_smil_timing_delete_runtime_info((GF_Node *)tap, tap->timingp->runtime);
  119|      0|			gf_free(tap->timingp);
  120|      0|		}
  121|     19|		if (tap->xlinkp)	gf_free(tap->xlinkp);
  ------------------
  |  Branch (121:7): [True: 0, False: 19]
  ------------------
  122|     19|	}
  123|       |
  124|    166|	gf_node_delete_attributes(node);
  125|    166|	gf_sg_parent_reset(node);
  126|    166|	gf_node_free(node);
  127|    166|}
gf_smil_delete_times:
  311|      9|{
  312|      9|	u32 i, count;
  313|      9|	count = gf_list_count(list);
  314|  10.9k|	for (i = 0; i < count; i++) {
  ------------------
  |  Branch (314:14): [True: 10.9k, False: 9]
  ------------------
  315|  10.9k|		SMIL_Time *v = (SMIL_Time *)gf_list_get(list, i);
  316|  10.9k|		if (v->element_id) gf_free(v->element_id);
  ------------------
  |  Branch (316:7): [True: 3.10k, False: 7.81k]
  ------------------
  317|  10.9k|		gf_free(v);
  318|  10.9k|	}
  319|      9|	gf_list_del(list);
  320|      9|}
gf_svg_reset_iri:
  345|    289|{
  346|    289|	if (!iri) return;
  ------------------
  |  Branch (346:6): [True: 0, False: 289]
  ------------------
  347|    289|	if (iri->string) gf_free(iri->string);
  ------------------
  |  Branch (347:6): [True: 90, False: 199]
  ------------------
  348|    289|	gf_node_unregister_iri(sg, iri);
  349|    289|}
gf_svg_delete_paint:
  352|    134|{
  353|    134|	if (!paint) return;
  ------------------
  |  Branch (353:6): [True: 0, False: 134]
  ------------------
  354|       |	//always free since we may allocate the iri to ""
  355|    134|	if (sg) gf_svg_reset_iri(sg, &paint->iri);
  ------------------
  |  Branch (355:6): [True: 134, False: 0]
  ------------------
  356|    134|	gf_free(paint);
  357|    134|}
gf_svg_reset_animate_values:
  367|      2|{
  368|      2|	u32 i, count;
  369|      2|	u8 type = anim_values.type;
  370|      2|	if (anim_values.laser_strings) type = DOM_String_datatype;
  ------------------
  |  Branch (370:6): [True: 0, False: 2]
  ------------------
  371|       |
  372|      2|	count = gf_list_count(anim_values.values);
  373|      2|	for (i = 0; i < count; i++) {
  ------------------
  |  Branch (373:14): [True: 0, False: 2]
  ------------------
  374|      0|		void *value = gf_list_get(anim_values.values, i);
  375|      0|		svg_delete_one_anim_value(type, value, sg);
  376|      0|	}
  377|      2|	gf_list_del(anim_values.values);
  378|       |	anim_values.values = NULL;
  379|      2|}
gf_svg_delete_attribute_value:
  390|  1.11k|{
  391|  1.11k|	if (!value) return;
  ------------------
  |  Branch (391:6): [True: 0, False: 1.11k]
  ------------------
  392|  1.11k|	GF_List *l;
  393|  1.11k|	if (type==12 && gf_list_find(sg->xlink_hrefs, value)>=0) {
  ------------------
  |  Branch (393:6): [True: 2, False: 1.11k]
  |  Branch (393:18): [True: 0, False: 2]
  ------------------
  394|      0|		type = XML_IDREF_datatype;
  395|      0|	}
  396|  1.11k|	switch (type) {
  397|    134|	case SVG_Paint_datatype:
  ------------------
  |  Branch (397:2): [True: 134, False: 983]
  ------------------
  398|    134|		gf_svg_delete_paint(sg, (SVG_Paint *)value);
  399|    134|		break;
  400|     72|	case XMLRI_datatype:
  ------------------
  |  Branch (400:2): [True: 72, False: 1.04k]
  ------------------
  401|     74|	case XML_IDREF_datatype:
  ------------------
  |  Branch (401:2): [True: 2, False: 1.11k]
  ------------------
  402|     74|		gf_svg_reset_iri(sg, (XMLRI *)value);
  403|     74|		gf_free(value);
  404|     74|		break;
  405|     81|	case SVG_Focus_datatype:
  ------------------
  |  Branch (405:2): [True: 81, False: 1.03k]
  ------------------
  406|     81|		gf_svg_reset_iri(sg, & ((SVG_Focus*)value)->target);
  407|     81|		gf_free(value);
  408|     81|		break;
  409|      0|	case SVG_ClipPath_datatype:
  ------------------
  |  Branch (409:2): [True: 0, False: 1.11k]
  ------------------
  410|      0|		gf_svg_reset_iri(sg, & ((SVG_ClipPath*)value)->target);
  411|      0|		gf_free(value);
  412|      0|		break;
  413|     10|	case SVG_PathData_datatype:
  ------------------
  |  Branch (413:2): [True: 10, False: 1.10k]
  ------------------
  414|     10|#if USE_GF_PATH
  415|     10|		gf_path_del((GF_Path *)value);
  416|       |#else
  417|       |		gf_free(value);
  418|       |#endif
  419|     10|		break;
  420|      0|	case SVG_ID_datatype:
  ------------------
  |  Branch (420:2): [True: 0, False: 1.11k]
  ------------------
  421|     60|	case DOM_String_datatype:
  ------------------
  |  Branch (421:2): [True: 60, False: 1.05k]
  ------------------
  422|     62|	case SVG_ContentType_datatype:
  ------------------
  |  Branch (422:2): [True: 2, False: 1.11k]
  ------------------
  423|     66|	case SVG_LanguageID_datatype:
  ------------------
  |  Branch (423:2): [True: 4, False: 1.11k]
  ------------------
  424|     66|		if (*(SVG_String *)value) gf_free(*(SVG_String *)value);
  ------------------
  |  Branch (424:7): [True: 37, False: 29]
  ------------------
  425|     66|		gf_free(value);
  426|     66|		break;
  427|      9|	case SVG_StrokeDashArray_datatype:
  ------------------
  |  Branch (427:2): [True: 9, False: 1.10k]
  ------------------
  428|      9|		if (((SVG_StrokeDashArray*)value)->array.vals) gf_free(((SVG_StrokeDashArray*)value)->array.vals);
  ------------------
  |  Branch (428:7): [True: 5, False: 4]
  ------------------
  429|      9|		if (((SVG_StrokeDashArray*)value)->array.units) gf_free(((SVG_StrokeDashArray*)value)->array.units);
  ------------------
  |  Branch (429:7): [True: 5, False: 4]
  ------------------
  430|      9|		gf_free(value);
  431|      9|		break;
  432|      5|	case SMIL_KeyTimes_datatype:
  ------------------
  |  Branch (432:2): [True: 5, False: 1.11k]
  ------------------
  433|      5|	case SMIL_KeyPoints_datatype:
  ------------------
  |  Branch (433:2): [True: 0, False: 1.11k]
  ------------------
  434|     10|	case SMIL_KeySplines_datatype:
  ------------------
  |  Branch (434:2): [True: 5, False: 1.11k]
  ------------------
  435|     12|	case SVG_Numbers_datatype:
  ------------------
  |  Branch (435:2): [True: 2, False: 1.11k]
  ------------------
  436|     12|	case SVG_Coordinates_datatype:
  ------------------
  |  Branch (436:2): [True: 0, False: 1.11k]
  ------------------
  437|     54|	case SVG_Points_datatype:
  ------------------
  |  Branch (437:2): [True: 42, False: 1.07k]
  ------------------
  438|     54|		l = *(GF_List**)value;
  439|  10.2k|		while (gf_list_count(l)) {
  ------------------
  |  Branch (439:10): [True: 10.1k, False: 54]
  ------------------
  440|  10.1k|			void *n = gf_list_last(l);
  441|  10.1k|			gf_list_rem_last(l);
  442|  10.1k|			gf_free(n);
  443|  10.1k|		}
  444|     54|		gf_list_del(l);
  445|     54|		gf_free(value);
  446|     54|		break;
  447|     19|	case SVG_FontFamily_datatype:
  ------------------
  |  Branch (447:2): [True: 19, False: 1.09k]
  ------------------
  448|     19|	{
  449|     19|		SVG_FontFamily *ff = (SVG_FontFamily *)value;
  450|     19|		if (ff->value) gf_free(ff->value);
  ------------------
  |  Branch (450:7): [True: 8, False: 11]
  ------------------
  451|     19|		gf_free(value);
  452|     19|	}
  453|     19|	break;
  454|      5|	case SMIL_AttributeName_datatype:
  ------------------
  |  Branch (454:2): [True: 5, False: 1.11k]
  ------------------
  455|      5|	{
  456|      5|		SMIL_AttributeName *an = (SMIL_AttributeName *)value;
  457|      5|		if (an->name) gf_free(an->name);
  ------------------
  |  Branch (457:7): [True: 0, False: 5]
  ------------------
  458|      5|		gf_free(value);
  459|      5|	}
  460|      5|	break;
  461|      9|	case SMIL_Times_datatype:
  ------------------
  |  Branch (461:2): [True: 9, False: 1.10k]
  ------------------
  462|      9|		gf_smil_delete_times(*(SMIL_Times *)value);
  463|      9|		gf_free(value);
  464|      9|		break;
  465|     18|	case SMIL_AnimateValue_datatype:
  ------------------
  |  Branch (465:2): [True: 18, False: 1.09k]
  ------------------
  466|     18|		svg_delete_one_anim_value(((SMIL_AnimateValue *)value)->type, ((SMIL_AnimateValue *)value)->value, sg);
  467|     18|		gf_free(value);
  468|     18|		break;
  469|      2|	case SMIL_AnimateValues_datatype:
  ------------------
  |  Branch (469:2): [True: 2, False: 1.11k]
  ------------------
  470|      2|		gf_svg_reset_animate_values(*((SMIL_AnimateValues *)value), sg);
  471|      2|		gf_free(value);
  472|      2|		break;
  473|     19|	case DOM_StringList_datatype:
  ------------------
  |  Branch (473:2): [True: 19, False: 1.09k]
  ------------------
  474|     19|		l = *(GF_List**)value;
  475|     38|		while (gf_list_count(l)) {
  ------------------
  |  Branch (475:10): [True: 19, False: 19]
  ------------------
  476|     19|			char *n = gf_list_last(l);
  477|     19|			gf_list_rem_last(l);
  478|     19|			gf_free(n);
  479|     19|		}
  480|     19|		gf_list_del(l);
  481|     19|		gf_free(value);
  482|     19|		break;
  483|     18|	case XMLRI_List_datatype:
  ------------------
  |  Branch (483:2): [True: 18, False: 1.09k]
  ------------------
  484|     18|		l = *(GF_List**)value;
  485|     32|		while (gf_list_count(l)) {
  ------------------
  |  Branch (485:10): [True: 14, False: 18]
  ------------------
  486|     14|			XMLRI *r = gf_list_last(l);
  487|     14|			gf_list_rem_last(l);
  488|     14|			if (r->string) gf_free(r->string);
  ------------------
  |  Branch (488:8): [True: 14, False: 0]
  ------------------
  489|     14|			gf_free(r);
  490|     14|		}
  491|     18|		gf_list_del(l);
  492|     18|		gf_free(value);
  493|     18|		break;
  494|       |
  495|      0|	case SVG_Unknown_datatype:
  ------------------
  |  Branch (495:2): [True: 0, False: 1.11k]
  ------------------
  496|      0|		if (*(SVG_String *)value) gf_free(*(SVG_String *)value);
  ------------------
  |  Branch (496:7): [True: 0, False: 0]
  ------------------
  497|      0|		gf_free(value);
  498|      0|		break;
  499|      0|	case SVG_NodeList_datatype:
  ------------------
  |  Branch (499:2): [True: 0, False: 1.11k]
  ------------------
  500|      0|		break;
  501|      8|	case SMIL_RepeatCount_datatype:
  ------------------
  |  Branch (501:2): [True: 8, False: 1.10k]
  ------------------
  502|     27|	case SMIL_Duration_datatype:
  ------------------
  |  Branch (502:2): [True: 19, False: 1.09k]
  ------------------
  503|    123|	case SVG_Length_datatype:
  ------------------
  |  Branch (503:2): [True: 96, False: 1.02k]
  ------------------
  504|    174|	case SVG_Coordinate_datatype:
  ------------------
  |  Branch (504:2): [True: 51, False: 1.06k]
  ------------------
  505|    190|	case SVG_Visibility_datatype:
  ------------------
  |  Branch (505:2): [True: 16, False: 1.10k]
  ------------------
  506|    194|	case SVG_Display_datatype:
  ------------------
  |  Branch (506:2): [True: 4, False: 1.11k]
  ------------------
  507|    599|	default:
  ------------------
  |  Branch (507:2): [True: 405, False: 712]
  ------------------
  508|    599|		gf_free(value);
  509|    599|		break;
  510|  1.11k|	}
  511|  1.11k|}
svg_types.c:svg_delete_one_anim_value:
  360|     18|{
  361|       |	/* TODO: handle specific animation types : Motion, else ? */
  362|     18|	if (anim_value)
  ------------------
  |  Branch (362:6): [True: 0, False: 18]
  ------------------
  363|      0|		gf_svg_delete_attribute_value(anim_datatype, anim_value, sg);
  364|     18|}

gf_sg_destroy_routes:
  121|     43|{
  122|     43|	while (gf_list_count(sg->routes_to_destroy) ) {
  ------------------
  |  Branch (122:9): [True: 0, False: 43]
  ------------------
  123|      0|		GF_Route *r = (GF_Route *)gf_list_get(sg->routes_to_destroy, 0);
  124|      0|		gf_list_rem(sg->routes_to_destroy, 0);
  125|      0|		gf_sg_route_unqueue(sg, r);
  126|      0|		if (r->name) gf_free(r->name);
  ------------------
  |  Branch (126:7): [True: 0, False: 0]
  ------------------
  127|      0|		gf_free(r);
  128|      0|	}
  129|     43|}

gf_xml_get_attribute_type:
  510|  1.08k|{
  511|  1.08k|	u32 i, count;
  512|  1.08k|	count = sizeof(xml_attributes) / sizeof(struct xml_att_def);
  513|  82.4k|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (513:12): [True: 82.4k, False: 7]
  ------------------
  514|  82.4k|		if (xml_attributes[i].tag==tag) return xml_attributes[i].type;
  ------------------
  |  Branch (514:7): [True: 1.07k, False: 81.3k]
  ------------------
  515|  82.4k|	}
  516|      7|	return DOM_String_datatype;
  517|  1.08k|}
gf_xml_create_attribute:
  543|  1.08k|{
  544|  1.08k|	u32 type = gf_xml_get_attribute_type(tag);
  545|  1.08k|	return gf_node_create_attribute_from_datatype(type, tag);
  546|  1.08k|}
gf_node_delete_attributes:
  722|    166|{
  723|    166|	GF_DOMAttribute *att = ((GF_DOMNode*)node)->attributes;
  724|  1.25k|	while(att) {
  ------------------
  |  Branch (724:8): [True: 1.08k, False: 166]
  ------------------
  725|  1.08k|		GF_DOMAttribute *tmp;
  726|  1.08k|		gf_svg_delete_attribute_value(att->data_type, att->data, node->sgprivate->scenegraph);
  727|  1.08k|		tmp = att;
  728|  1.08k|		att = att->next;
  729|  1.08k|		if (tmp->tag==TAG_DOM_ATT_any) {
  ------------------
  |  Branch (729:7): [True: 0, False: 1.08k]
  ------------------
  730|      0|			gf_free( ((GF_DOMFullAttribute*)tmp)->name);
  731|      0|		}
  732|  1.08k|		gf_free(tmp);
  733|  1.08k|	}
  734|    166|}
gf_node_create_attribute_from_datatype:
  737|  1.08k|{
  738|  1.08k|	SVGAttribute *att;
  739|  1.08k|	if (!data_type) return NULL;
  ------------------
  |  Branch (739:6): [True: 0, False: 1.08k]
  ------------------
  740|       |
  741|  1.08k|	GF_SAFEALLOC(att, SVGAttribute);
  ------------------
  |  |  242|  1.08k|#define GF_SAFEALLOC(__ptr, __struct) {\
  |  |  243|  1.08k|		(__ptr) = (__struct *) gf_malloc(sizeof(__struct));\
  |  |  244|  1.08k|		if (__ptr) {\
  |  |  ------------------
  |  |  |  Branch (244:7): [True: 1.08k, False: 0]
  |  |  ------------------
  |  |  245|  1.08k|			memset((void *) (__ptr), 0, sizeof(__struct));\
  |  |  246|  1.08k|		}\
  |  |  247|  1.08k|	}
  ------------------
  742|  1.08k|	if (!att) return NULL;
  ------------------
  |  Branch (742:6): [True: 0, False: 1.08k]
  ------------------
  743|  1.08k|	att->data_type = (u16) data_type;
  744|  1.08k|	att->tag = (u16) attribute_tag;
  745|  1.08k|	att->data = gf_svg_create_attribute_value(att->data_type);
  746|  1.08k|	return att;
  747|  1.08k|}
gf_node_get_attribute_by_tag:
  932|  1.58k|{
  933|  1.58k|	SVG_Element *elt = (SVG_Element *)node;
  934|  1.58k|	SVGAttribute *att = elt->attributes;
  935|  1.58k|	SVGAttribute *last_att = NULL;
  936|       |
  937|  16.7k|	while (att) {
  ------------------
  |  Branch (937:9): [True: 15.5k, False: 1.25k]
  ------------------
  938|  15.5k|		if ((u32) att->tag == attribute_tag) {
  ------------------
  |  Branch (938:7): [True: 334, False: 15.1k]
  ------------------
  939|    334|			field->fieldIndex = att->tag;
  940|    334|			field->fieldType = att->data_type;
  941|    334|			field->far_ptr  = att->data;
  942|    334|			return GF_OK;
  943|    334|		}
  944|  15.1k|		last_att = att;
  945|  15.1k|		att = att->next;
  946|  15.1k|	}
  947|       |
  948|  1.25k|	if (create_if_not_found) {
  ------------------
  |  Branch (948:6): [True: 1.08k, False: 170]
  ------------------
  949|       |		/* field not found create one */
  950|  1.08k|		att = gf_xml_create_attribute(node, attribute_tag);
  951|  1.08k|		if (att) {
  ------------------
  |  Branch (951:7): [True: 1.08k, False: 0]
  ------------------
  952|  1.08k|			if (!elt->attributes) elt->attributes = att;
  ------------------
  |  Branch (952:8): [True: 120, False: 964]
  ------------------
  953|    964|			else last_att->next = att;
  954|  1.08k|			field->far_ptr = att->data;
  955|  1.08k|			field->fieldType = att->data_type;
  956|  1.08k|			field->fieldIndex = att->tag;
  957|       |			/* attribute name should not be called, if needed use gf_svg_get_attribute_name(att->tag);*/
  958|  1.08k|			field->name = NULL;
  959|  1.08k|			if (set_default) attributes_set_default_value(node, att);
  ------------------
  |  Branch (959:8): [True: 5, False: 1.07k]
  ------------------
  960|  1.08k|			return GF_OK;
  961|  1.08k|		}
  962|  1.08k|	}
  963|       |
  964|    170|	return GF_NOT_SUPPORTED;
  965|  1.25k|}
gf_node_register_iri:
  969|    516|{
  970|    516|#ifndef GPAC_DISABLE_SVG
  971|    516|	if (gf_list_find(sg->xlink_hrefs, target)<0) {
  ------------------
  |  Branch (971:6): [True: 515, False: 1]
  ------------------
  972|    515|		gf_list_add(sg->xlink_hrefs, target);
  973|    515|	}
  974|    516|#endif
  975|    516|}
gf_node_unregister_iri:
  979|  3.91k|{
  980|  3.91k|#ifndef GPAC_DISABLE_SVG
  981|  3.91k|	gf_list_del_item(sg->xlink_hrefs, target);
  982|  3.91k|#endif
  983|  3.91k|}
xml_ns.c:attributes_set_default_value:
  801|      5|{
  802|      5|	u32 node_tag = node->sgprivate->tag;
  803|      5|	switch (att->tag) {
  804|      0|	case TAG_SVG_ATT_width:
  ------------------
  |  Branch (804:2): [True: 0, False: 5]
  ------------------
  805|      0|	case TAG_SVG_ATT_height:
  ------------------
  |  Branch (805:2): [True: 0, False: 5]
  ------------------
  806|      0|		if (node_tag == TAG_SVG_svg) {
  ------------------
  |  Branch (806:7): [True: 0, False: 0]
  ------------------
  807|      0|			SVG_Length *len = att->data;
  808|      0|			len->type = SVG_NUMBER_PERCENTAGE;
  809|      0|			len->value = INT2FIX(100);
  ------------------
  |  |  119|      0|#define INT2FIX(v)		((Float) (v))
  ------------------
  810|      0|		}
  811|      0|		break;
  812|      0|	case TAG_SVG_ATT_x2:
  ------------------
  |  Branch (812:2): [True: 0, False: 5]
  ------------------
  813|      0|		if (node_tag == TAG_SVG_linearGradient) {
  ------------------
  |  Branch (813:7): [True: 0, False: 0]
  ------------------
  814|      0|			((SVG_Number *)att->data)->value = FIX_ONE;
  ------------------
  |  |  118|      0|#define FIX_ONE			1.0f
  ------------------
  815|      0|		}
  816|      0|		break;
  817|      0|	case TAG_SVG_ATT_cx:
  ------------------
  |  Branch (817:2): [True: 0, False: 5]
  ------------------
  818|      0|	case TAG_SVG_ATT_cy:
  ------------------
  |  Branch (818:2): [True: 0, False: 5]
  ------------------
  819|      0|	case TAG_SVG_ATT_fx:
  ------------------
  |  Branch (819:2): [True: 0, False: 5]
  ------------------
  820|      0|	case TAG_SVG_ATT_fy:
  ------------------
  |  Branch (820:2): [True: 0, False: 5]
  ------------------
  821|      0|	case TAG_SVG_ATT_r:
  ------------------
  |  Branch (821:2): [True: 0, False: 5]
  ------------------
  822|      0|		if (node_tag == TAG_SVG_radialGradient) {
  ------------------
  |  Branch (822:7): [True: 0, False: 0]
  ------------------
  823|      0|			((SVG_Number *)att->data)->value = FIX_ONE/2;
  ------------------
  |  |  118|      0|#define FIX_ONE			1.0f
  ------------------
  824|      0|		}
  825|      0|		break;
  826|      0|	case TAG_SVG_ATT_dur:
  ------------------
  |  Branch (826:2): [True: 0, False: 5]
  ------------------
  827|      0|		if (node_tag == TAG_SVG_video ||
  ------------------
  |  Branch (827:7): [True: 0, False: 0]
  ------------------
  828|      0|		        node_tag == TAG_SVG_audio ||
  ------------------
  |  Branch (828:11): [True: 0, False: 0]
  ------------------
  829|      0|		        node_tag == TAG_SVG_animation)
  ------------------
  |  Branch (829:11): [True: 0, False: 0]
  ------------------
  830|      0|		{
  831|      0|			((SMIL_Duration *)att->data)->type = SMIL_DURATION_MEDIA;
  832|      0|		} else {
  833|       |			/*is this correct?*/
  834|      0|			((SMIL_Duration *)att->data)->type = SMIL_DURATION_INDEFINITE;
  835|      0|		}
  836|      0|		break;
  837|      0|	case TAG_SVG_ATT_min:
  ------------------
  |  Branch (837:2): [True: 0, False: 5]
  ------------------
  838|      0|		((SMIL_Duration *)att->data)->type = SMIL_DURATION_DEFINED;
  839|      0|		break;
  840|      0|	case TAG_SVG_ATT_repeatDur:
  ------------------
  |  Branch (840:2): [True: 0, False: 5]
  ------------------
  841|      0|		((SMIL_Duration *)att->data)->type = SMIL_DURATION_INDEFINITE;
  842|      0|		break;
  843|      0|	case TAG_SVG_ATT_calcMode:
  ------------------
  |  Branch (843:2): [True: 0, False: 5]
  ------------------
  844|      0|		if (node_tag == TAG_SVG_animateMotion)
  ------------------
  |  Branch (844:7): [True: 0, False: 0]
  ------------------
  845|      0|			*((SMIL_CalcMode *)att->data) = SMIL_CALCMODE_PACED;
  846|      0|		else
  847|      0|			*((SMIL_CalcMode *)att->data) = SMIL_CALCMODE_LINEAR;
  848|      0|		break;
  849|      0|	case TAG_SVG_ATT_color:
  ------------------
  |  Branch (849:2): [True: 0, False: 5]
  ------------------
  850|      0|		((SVG_Paint *)att->data)->type = SVG_PAINT_COLOR;
  851|      0|		((SVG_Paint *)att->data)->color.type = SVG_COLOR_INHERIT;
  852|      0|		break;
  853|      0|	case TAG_SVG_ATT_solid_color:
  ------------------
  |  Branch (853:2): [True: 0, False: 5]
  ------------------
  854|      0|	case TAG_SVG_ATT_stop_color:
  ------------------
  |  Branch (854:2): [True: 0, False: 5]
  ------------------
  855|      0|		((SVG_Paint *)att->data)->type = SVG_PAINT_COLOR;
  856|      0|		((SVG_Paint *)att->data)->color.type = SVG_COLOR_RGBCOLOR;
  857|      0|		break;
  858|      0|	case TAG_SVG_ATT_opacity:
  ------------------
  |  Branch (858:2): [True: 0, False: 5]
  ------------------
  859|      0|	case TAG_SVG_ATT_solid_opacity:
  ------------------
  |  Branch (859:2): [True: 0, False: 5]
  ------------------
  860|      0|	case TAG_SVG_ATT_stop_opacity:
  ------------------
  |  Branch (860:2): [True: 0, False: 5]
  ------------------
  861|      0|	case TAG_SVG_ATT_audio_level:
  ------------------
  |  Branch (861:2): [True: 0, False: 5]
  ------------------
  862|      0|	case TAG_SVG_ATT_viewport_fill_opacity:
  ------------------
  |  Branch (862:2): [True: 0, False: 5]
  ------------------
  863|      0|		((SVG_Number *)att->data)->value = FIX_ONE;
  ------------------
  |  |  118|      0|#define FIX_ONE			1.0f
  ------------------
  864|      0|		break;
  865|      0|	case TAG_SVG_ATT_display:
  ------------------
  |  Branch (865:2): [True: 0, False: 5]
  ------------------
  866|      0|		*((SVG_Display *)att->data) = SVG_DISPLAY_INLINE;
  867|      0|		break;
  868|      0|	case TAG_SVG_ATT_fill:
  ------------------
  |  Branch (868:2): [True: 0, False: 5]
  ------------------
  869|      0|	case TAG_SVG_ATT_stroke:
  ------------------
  |  Branch (869:2): [True: 0, False: 5]
  ------------------
  870|      0|		((SVG_Paint *)att->data)->type = SVG_PAINT_INHERIT;
  871|      0|		break;
  872|      0|	case TAG_SVG_ATT_stroke_dasharray:
  ------------------
  |  Branch (872:2): [True: 0, False: 5]
  ------------------
  873|      0|		((SVG_StrokeDashArray *)att->data)->type = SVG_STROKEDASHARRAY_INHERIT;
  874|      0|		break;
  875|      0|	case TAG_SVG_ATT_fill_opacity:
  ------------------
  |  Branch (875:2): [True: 0, False: 5]
  ------------------
  876|      0|	case TAG_SVG_ATT_stroke_opacity:
  ------------------
  |  Branch (876:2): [True: 0, False: 5]
  ------------------
  877|      0|	case TAG_SVG_ATT_stroke_width:
  ------------------
  |  Branch (877:2): [True: 0, False: 5]
  ------------------
  878|      0|	case TAG_SVG_ATT_font_size:
  ------------------
  |  Branch (878:2): [True: 0, False: 5]
  ------------------
  879|      0|	case TAG_SVG_ATT_line_increment:
  ------------------
  |  Branch (879:2): [True: 0, False: 5]
  ------------------
  880|      0|	case TAG_SVG_ATT_stroke_dashoffset:
  ------------------
  |  Branch (880:2): [True: 0, False: 5]
  ------------------
  881|      0|	case TAG_SVG_ATT_stroke_miterlimit:
  ------------------
  |  Branch (881:2): [True: 0, False: 5]
  ------------------
  882|      0|		((SVG_Number *)att->data)->type = SVG_NUMBER_INHERIT;
  883|      0|		break;
  884|      0|	case TAG_SVG_ATT_vector_effect:
  ------------------
  |  Branch (884:2): [True: 0, False: 5]
  ------------------
  885|      0|		*((SVG_VectorEffect *)att->data) = SVG_VECTOREFFECT_NONE;
  886|      0|		break;
  887|      0|	case TAG_SVG_ATT_fill_rule:
  ------------------
  |  Branch (887:2): [True: 0, False: 5]
  ------------------
  888|      0|		*((SVG_FillRule *)att->data) = SVG_FILLRULE_INHERIT;
  889|      0|		break;
  890|      0|	case TAG_SVG_ATT_font_weight:
  ------------------
  |  Branch (890:2): [True: 0, False: 5]
  ------------------
  891|      0|		*((SVG_FontWeight *)att->data) = SVG_FONTWEIGHT_INHERIT;
  892|      0|		break;
  893|      0|	case TAG_SVG_ATT_visibility:
  ------------------
  |  Branch (893:2): [True: 0, False: 5]
  ------------------
  894|      0|		*((SVG_Visibility *)att->data) = SVG_VISIBILITY_INHERIT;
  895|      0|		break;
  896|      0|	case TAG_SVG_ATT_smil_fill:
  ------------------
  |  Branch (896:2): [True: 0, False: 5]
  ------------------
  897|      0|		*((SMIL_Fill *)att->data) = SMIL_FILL_REMOVE;
  898|      0|		break;
  899|      0|	case TAG_XMLEV_ATT_defaultAction:
  ------------------
  |  Branch (899:2): [True: 0, False: 5]
  ------------------
  900|      0|		*((XMLEV_DefaultAction *)att->data) = XMLEVENT_DEFAULTACTION_PERFORM;
  901|      0|		break;
  902|      0|	case TAG_SVG_ATT_zoomAndPan:
  ------------------
  |  Branch (902:2): [True: 0, False: 5]
  ------------------
  903|      0|		*((SVG_ZoomAndPan *)att->data) = SVG_ZOOMANDPAN_MAGNIFY;
  904|      0|		break;
  905|      0|	case TAG_SVG_ATT_stroke_linecap:
  ------------------
  |  Branch (905:2): [True: 0, False: 5]
  ------------------
  906|      0|		*(SVG_StrokeLineCap*)att->data = SVG_STROKELINECAP_INHERIT;
  907|      0|		break;
  908|      0|	case TAG_SVG_ATT_stroke_linejoin:
  ------------------
  |  Branch (908:2): [True: 0, False: 5]
  ------------------
  909|      0|		*(SVG_StrokeLineJoin*)att->data = SVG_STROKELINEJOIN_INHERIT;
  910|      0|		break;
  911|       |
  912|      0|	case TAG_SVG_ATT_transform:
  ------------------
  |  Branch (912:2): [True: 0, False: 5]
  ------------------
  913|      0|		gf_mx2d_init(((SVG_Transform*)att->data)->mat);
  ------------------
  |  |  391|      0|#define gf_mx2d_init(_obj) { memset((_obj).m, 0, sizeof(Fixed)*6); (_obj).m[0] = (_obj).m[4] = FIX_ONE; }
  |  |  ------------------
  |  |  |  |  118|      0|#define FIX_ONE			1.0f
  |  |  ------------------
  ------------------
  914|      0|		break;
  915|       |
  916|       |
  917|       |	/*all default=0 values (don't need init)*/
  918|      0|	case TAG_SVG_ATT_font_family:
  ------------------
  |  Branch (918:2): [True: 0, False: 5]
  ------------------
  919|      0|	case TAG_SVG_ATT_font_style:
  ------------------
  |  Branch (919:2): [True: 0, False: 5]
  ------------------
  920|      0|	case TAG_SVG_ATT_text_anchor:
  ------------------
  |  Branch (920:2): [True: 0, False: 5]
  ------------------
  921|      0|	case TAG_SVG_ATT_x:
  ------------------
  |  Branch (921:2): [True: 0, False: 5]
  ------------------
  922|      0|	case TAG_SVG_ATT_y:
  ------------------
  |  Branch (922:2): [True: 0, False: 5]
  ------------------
  923|      0|		break;
  924|       |
  925|      5|	default:
  ------------------
  |  Branch (925:2): [True: 5, False: 0]
  ------------------
  926|      5|		GF_LOG(GF_LOG_DEBUG, GF_LOG_SCENE, ("[Scene] Cannot create default value for SVG attribute %s\n", gf_svg_get_attribute_name(node, att->tag)));
  ------------------
  |  | 1086|      5|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 5]
  |  |  ------------------
  ------------------
  927|      5|	}
  928|      5|}

gf_malloc:
  149|   113k|{
  150|   113k|	return MALLOC(size);
  ------------------
  |  |  121|   113k|#define MALLOC	malloc
  ------------------
  151|   113k|}
gf_realloc:
  159|    420|{
  160|    420|	return REALLOC(ptr, size);
  ------------------
  |  |  123|    420|#define REALLOC	realloc
  ------------------
  161|    420|}
gf_free:
  164|   117k|{
  165|   117k|	FREE(ptr);
  ------------------
  |  |  124|   117k|#define FREE	free
  ------------------
  166|   117k|}
gf_strdup:
  169|  3.28k|{
  170|  3.28k|	STRDUP(str);
  ------------------
  |  |  125|  3.28k|#define STRDUP(a) return strdup(a);
  ------------------
  171|      0|}

gf_bs_new:
  135|     54|{
  136|     54|	GF_BitStream *tmp = (GF_BitStream *)gf_malloc(sizeof(GF_BitStream));
  137|     54|	if (!tmp) return NULL;
  ------------------
  |  Branch (137:6): [True: 0, False: 54]
  ------------------
  138|     54|	memset(tmp, 0, sizeof(GF_BitStream));
  139|     54|#ifdef GPAC_HAS_FD
  140|     54|	tmp->fd = -1;
  141|     54|#endif
  142|       |
  143|     54|	tmp->original = (char*)buffer;
  144|     54|	tmp->size = BufferSize;
  145|       |
  146|     54|	tmp->bsmode = mode;
  147|       |
  148|     54|	switch (tmp->bsmode) {
  149|     54|	case GF_BITSTREAM_READ:
  ------------------
  |  Branch (149:2): [True: 54, False: 0]
  ------------------
  150|     54|		tmp->nbBits = 8;
  151|     54|		tmp->current = 0;
  152|     54|		break;
  153|      0|	case GF_BITSTREAM_WRITE:
  ------------------
  |  Branch (153:2): [True: 0, False: 54]
  ------------------
  154|      0|	case GF_BITSTREAM_WRITE_DYN:
  ------------------
  |  Branch (154:2): [True: 0, False: 54]
  ------------------
  155|      0|		tmp->nbBits = 0;
  156|      0|		if (! buffer) {
  ------------------
  |  Branch (156:7): [True: 0, False: 0]
  ------------------
  157|       |			/*if BufferSize is specified, use it. This is typically used when AvgSize of
  158|       |			some buffers is known, but some exceed it.*/
  159|      0|			if (BufferSize) {
  ------------------
  |  Branch (159:8): [True: 0, False: 0]
  ------------------
  160|      0|				tmp->size = BufferSize;
  161|      0|			} else {
  162|      0|				tmp->size = BS_MEM_BLOCK_ALLOC_SIZE;
  ------------------
  |  |   29|      0|#define BS_MEM_BLOCK_ALLOC_SIZE		512
  ------------------
  163|      0|			}
  164|      0|			tmp->original = (char *) gf_malloc(sizeof(char) * ((u32) tmp->size));
  165|      0|			if (! tmp->original) {
  ------------------
  |  Branch (165:8): [True: 0, False: 0]
  ------------------
  166|      0|				gf_free(tmp);
  167|      0|				return NULL;
  168|      0|			}
  169|      0|			tmp->bsmode = GF_BITSTREAM_WRITE_DYN;
  170|      0|		} else {
  171|      0|			tmp->original = (char*)buffer;
  172|      0|			tmp->size = BufferSize;
  173|      0|		}
  174|      0|		break;
  175|      0|	default:
  ------------------
  |  Branch (175:2): [True: 0, False: 54]
  ------------------
  176|       |		/*the stream constructor is not the same...*/
  177|      0|		gf_free(tmp);
  178|      0|		return NULL;
  179|     54|	}
  180|     54|	return tmp;
  181|     54|}
gf_bs_del:
  366|     54|{
  367|     54|	if (!bs) return;
  ------------------
  |  Branch (367:6): [True: 0, False: 54]
  ------------------
  368|     54|	if (bs->on_block_out && bs->position>bs->bytes_out) {
  ------------------
  |  Branch (368:6): [True: 0, False: 54]
  |  Branch (368:26): [True: 0, False: 0]
  ------------------
  369|      0|		bs->on_block_out(bs->usr_data, bs->original, (u32) (bs->position - bs->bytes_out) );
  370|      0|	}
  371|       |	/*if we are in dynamic mode (alloc done by the bitstream), free the buffer if still present*/
  372|     54|	if ((bs->bsmode == GF_BITSTREAM_WRITE_DYN) && bs->original) gf_free(bs->original);
  ------------------
  |  Branch (372:6): [True: 0, False: 54]
  |  Branch (372:48): [True: 0, False: 0]
  ------------------
  373|     54|	if (bs->cache_write) {
  ------------------
  |  Branch (373:6): [True: 0, False: 54]
  ------------------
  374|      0|		bs_flush_write_cache(bs);
  375|      0|		gf_free(bs->cache_write);
  376|      0|	}
  377|     54|	if (bs->cache_read)
  ------------------
  |  Branch (377:6): [True: 0, False: 54]
  ------------------
  378|      0|		gf_free(bs->cache_read);
  379|     54|	gf_free(bs);
  380|     54|}
gf_bs_is_align:
  401|  2.66k|{
  402|  2.66k|	switch (bs->bsmode) {
  403|  2.66k|	case GF_BITSTREAM_READ:
  ------------------
  |  Branch (403:2): [True: 2.66k, False: 0]
  ------------------
  404|  2.66k|	case GF_BITSTREAM_FILE_READ:
  ------------------
  |  Branch (404:2): [True: 0, False: 2.66k]
  ------------------
  405|  2.66k|		return ( (8 == bs->nbBits) ? GF_TRUE : GF_FALSE);
  ------------------
  |  Branch (405:12): [True: 2.66k, False: 8]
  ------------------
  406|      0|	default:
  ------------------
  |  Branch (406:2): [True: 0, False: 2.66k]
  ------------------
  407|      0|		return !bs->nbBits;
  408|  2.66k|	}
  409|  2.66k|}
gf_bs_read_bit:
  534|  53.0M|{
  535|  53.0M|	if (bs->nbBits == 8) {
  ------------------
  |  Branch (535:6): [True: 6.63M, False: 46.4M]
  ------------------
  536|  6.63M|		bs->current = BS_ReadByte(bs);
  537|  6.63M|		bs->nbBits = 0;
  538|  6.63M|	}
  539|  53.0M|#ifdef NO_OPTS
  540|  53.0M|	{
  541|  53.0M|		s32 ret;
  542|  53.0M|		bs->current <<= 1;
  543|  53.0M|		bs->nbBits++;
  544|  53.0M|		ret = (bs->current & 0x100) >> 8;
  545|  53.0M|		return (u8) ret;
  546|  53.0M|	}
  547|       |#else
  548|       |	return (u8) (bs->current & bit_mask[bs->nbBits++]) ? 1 : 0;
  549|       |#endif
  550|  53.0M|}
gf_bs_read_int:
  554|  9.10M|{
  555|  9.10M|	u32 ret;
  556|  9.10M|	bs->total_bits_read+= nBits;
  557|       |
  558|       |#ifndef NO_OPTS
  559|       |	if (nBits + bs->nbBits <= 8) {
  560|       |		bs->nbBits += nBits;
  561|       |		ret = (bs->current >> (8 - bs->nbBits) ) & bits_mask[nBits];
  562|       |		return ret;
  563|       |	}
  564|       |#endif
  565|  9.10M|	ret = 0;
  566|  62.1M|	while (nBits-- > 0) {
  ------------------
  |  Branch (566:9): [True: 53.0M, False: 9.10M]
  ------------------
  567|  53.0M|		ret <<= 1;
  568|  53.0M|		ret |= gf_bs_read_bit(bs);
  569|  53.0M|	}
  570|  9.10M|	return ret;
  571|  9.10M|}
gf_bs_read_data:
  780|  2.65k|{
  781|  2.65k|	u64 orig = bs->position;
  782|       |
  783|  2.65k|	if (bs->position+nbBytes > bs->size) {
  ------------------
  |  Branch (783:6): [True: 0, False: 2.65k]
  ------------------
  784|      0|		if (!bs->overflow_state) {
  ------------------
  |  Branch (784:7): [True: 0, False: 0]
  ------------------
  785|      0|			bs->overflow_state = 1;
  786|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[BS] Attempt to overread bitstream\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  787|      0|		}
  788|      0|		return 0;
  789|      0|	}
  790|       |
  791|  2.65k|	if (gf_bs_is_align(bs) ) {
  ------------------
  |  Branch (791:6): [True: 2.65k, False: 1]
  ------------------
  792|  2.65k|		s32 bytes_read, bytes_read_cache;
  793|  2.65k|		switch (bs->bsmode) {
  794|  2.65k|		case GF_BITSTREAM_READ:
  ------------------
  |  Branch (794:3): [True: 2.65k, False: 0]
  ------------------
  795|  2.65k|		case GF_BITSTREAM_WRITE:
  ------------------
  |  Branch (795:3): [True: 0, False: 2.65k]
  ------------------
  796|  2.65k|		case GF_BITSTREAM_WRITE_DYN:
  ------------------
  |  Branch (796:3): [True: 0, False: 2.65k]
  ------------------
  797|  2.65k|			memcpy(data, bs->original + bs->position, nbBytes);
  798|  2.65k|			bs->position += nbBytes;
  799|  2.65k|			return nbBytes;
  800|      0|		case GF_BITSTREAM_FILE_READ:
  ------------------
  |  Branch (800:3): [True: 0, False: 2.65k]
  ------------------
  801|      0|		case GF_BITSTREAM_FILE_WRITE:
  ------------------
  |  Branch (801:3): [True: 0, False: 2.65k]
  ------------------
  802|      0|			if (bs->cache_write)
  ------------------
  |  Branch (802:8): [True: 0, False: 0]
  ------------------
  803|      0|				bs_flush_write_cache(bs);
  804|       |
  805|      0|			bytes_read = bytes_read_cache = 0;
  806|      0|			if (bs->cache_read) {
  ------------------
  |  Branch (806:8): [True: 0, False: 0]
  ------------------
  807|      0|				u32 csize = bs->cache_read_size-bs->cache_read_pos;
  808|      0|				if (csize>nbBytes) csize = nbBytes;
  ------------------
  |  Branch (808:9): [True: 0, False: 0]
  ------------------
  809|      0|				memcpy(data, bs->cache_read + bs->cache_read_pos, csize);
  810|      0|				bs->cache_read_pos += csize;
  811|      0|				nbBytes -= csize;
  812|      0|				bytes_read_cache = csize;
  813|      0|			}
  814|      0|			if (nbBytes) {
  ------------------
  |  Branch (814:8): [True: 0, False: 0]
  ------------------
  815|      0|#ifdef GPAC_HAS_FD
  816|      0|				if (bs->fd>=0) {
  ------------------
  |  Branch (816:9): [True: 0, False: 0]
  ------------------
  817|      0|					bytes_read = (s32) read(bs->fd, data + bytes_read_cache, nbBytes);
  818|      0|				} else
  819|      0|#endif
  820|      0|				{
  821|      0|					bytes_read = (s32) gf_fread(data + bytes_read_cache, nbBytes, bs->stream);
  822|      0|				}
  823|      0|				if (bytes_read<0) return bytes_read_cache;
  ------------------
  |  Branch (823:9): [True: 0, False: 0]
  ------------------
  824|      0|			}
  825|      0|			bs->position += bytes_read + bytes_read_cache;
  826|      0|			return bytes_read + bytes_read_cache;
  827|      0|		default:
  ------------------
  |  Branch (827:3): [True: 0, False: 2.65k]
  ------------------
  828|      0|			return 0;
  829|  2.65k|		}
  830|  2.65k|	}
  831|       |
  832|     63|	while (nbBytes-- > 0) {
  ------------------
  |  Branch (832:9): [True: 62, False: 1]
  ------------------
  833|     62|		*data++ = gf_bs_read_int(bs, 8);
  834|     62|	}
  835|      1|	return (u32) (bs->position - orig);
  836|       |
  837|  2.65k|}
gf_bs_align:
 1227|  39.0k|{
 1228|  39.0k|	u8 res = 8 - bs->nbBits;
 1229|  39.0k|	if ( (bs->bsmode == GF_BITSTREAM_READ) || (bs->bsmode == GF_BITSTREAM_FILE_READ)) {
  ------------------
  |  Branch (1229:7): [True: 39.0k, False: 0]
  |  Branch (1229:44): [True: 0, False: 0]
  ------------------
 1230|  39.0k|		if (res > 0) {
  ------------------
  |  Branch (1230:7): [True: 2.70k, False: 36.2k]
  ------------------
 1231|  2.70k|			gf_bs_read_int(bs, res);
 1232|  2.70k|		}
 1233|  39.0k|		return res;
 1234|  39.0k|	}
 1235|      0|	if (bs->nbBits > 0) {
  ------------------
  |  Branch (1235:6): [True: 0, False: 0]
  ------------------
 1236|      0|		gf_bs_write_int (bs, 0, res);
 1237|      0|		return res;
 1238|      0|	}
 1239|      0|	return 0;
 1240|      0|}
gf_bs_available:
 1246|  3.34M|{
 1247|  3.34M|	s64 cur, end;
 1248|       |
 1249|       |	/*in WRITE mode only, this should not be called, but return something big in case ...*/
 1250|  3.34M|	if ( (bs->bsmode == GF_BITSTREAM_WRITE)
  ------------------
  |  Branch (1250:7): [True: 0, False: 3.34M]
  ------------------
 1251|  3.34M|	        || (bs->bsmode == GF_BITSTREAM_WRITE_DYN)
  ------------------
  |  Branch (1251:13): [True: 0, False: 3.34M]
  ------------------
 1252|  3.34M|	   )
 1253|      0|		return (u64) -1;
 1254|       |
 1255|       |	/*we are in MEM mode*/
 1256|  3.34M|	if (bs->bsmode == GF_BITSTREAM_READ) {
  ------------------
  |  Branch (1256:6): [True: 3.34M, False: 0]
  ------------------
 1257|  3.34M|		if (bs->size < bs->position)
  ------------------
  |  Branch (1257:7): [True: 0, False: 3.34M]
  ------------------
 1258|      0|			return 0;
 1259|  3.34M|		else
 1260|  3.34M|			return (bs->size - bs->position);
 1261|  3.34M|	}
 1262|       |	/*FILE READ: assume size hasn't changed, otherwise the user shall call gf_bs_get_refreshed_size*/
 1263|      0|	if (bs->bsmode==GF_BITSTREAM_FILE_READ) {
  ------------------
  |  Branch (1263:6): [True: 0, False: 0]
  ------------------
 1264|      0|		if (bs->position>bs->size) return 0;
  ------------------
  |  Branch (1264:7): [True: 0, False: 0]
  ------------------
 1265|      0|		return (bs->size - bs->position);
 1266|      0|	}
 1267|      0|	if (bs->cache_write)
  ------------------
  |  Branch (1267:6): [True: 0, False: 0]
  ------------------
 1268|      0|		bs_flush_write_cache(bs);
 1269|       |
 1270|      0|#ifdef GPAC_HAS_FD
 1271|      0|	if (bs->fd>=0) {
  ------------------
  |  Branch (1271:6): [True: 0, False: 0]
  ------------------
 1272|      0|		cur = lseek_64(bs->fd, 0, SEEK_CUR);
  ------------------
  |  |  391|      0|#define lseek_64 lseek
  ------------------
 1273|      0|		end = bs->position;
 1274|      0|	} else
 1275|      0|#endif
 1276|      0|	{
 1277|      0|		cur = gf_ftell(bs->stream);
 1278|      0|		end = gf_fsize(bs->stream);
 1279|       |		gf_fseek(bs->stream, cur, SEEK_SET);
 1280|      0|	}
 1281|      0|	return (u64) (end - cur);
 1282|      0|}
gf_bs_skip_bytes:
 1371|     59|{
 1372|     59|	if (!bs || !nbBytes) return;
  ------------------
  |  Branch (1372:6): [True: 0, False: 59]
  |  Branch (1372:13): [True: 2, False: 57]
  ------------------
 1373|       |
 1374|     57|	gf_bs_align(bs);
 1375|       |
 1376|       |	/*special case for file skipping...*/
 1377|     57|	if ((bs->bsmode == GF_BITSTREAM_FILE_WRITE) || (bs->bsmode == GF_BITSTREAM_FILE_READ)) {
  ------------------
  |  Branch (1377:6): [True: 0, False: 57]
  |  Branch (1377:49): [True: 0, False: 57]
  ------------------
 1378|      0|		if (bs->cache_write)
  ------------------
  |  Branch (1378:7): [True: 0, False: 0]
  ------------------
 1379|      0|			bs_flush_write_cache(bs);
 1380|       |
 1381|      0|		if (bs->cache_read) {
  ------------------
  |  Branch (1381:7): [True: 0, False: 0]
  ------------------
 1382|      0|			u32 csize = bs->cache_read_size - bs->cache_read_pos;
 1383|      0|			if (csize>=nbBytes) {
  ------------------
  |  Branch (1383:8): [True: 0, False: 0]
  ------------------
 1384|      0|				bs->cache_read_pos += (u32) nbBytes;
 1385|      0|				bs->position += nbBytes;
 1386|      0|				return;
 1387|      0|			}
 1388|      0|			nbBytes -= csize;
 1389|      0|			bs->position += csize;
 1390|      0|			bs->cache_read_pos = bs->cache_read_size;
 1391|      0|		}
 1392|       |		//weird msys2 bug resulting in broken seek on some files ?!?  -the bug is not happening when doing absolute seek
 1393|       |//		gf_fseek(bs->stream, nbBytes, SEEK_CUR);
 1394|      0|		bs->position += nbBytes;
 1395|      0|		if (bs->bsmode == GF_BITSTREAM_FILE_READ) {
  ------------------
  |  Branch (1395:7): [True: 0, False: 0]
  ------------------
 1396|      0|			if (bs->position > bs->size) bs->position = bs->size;
  ------------------
  |  Branch (1396:8): [True: 0, False: 0]
  ------------------
 1397|      0|		}
 1398|      0|#ifdef GPAC_HAS_FD
 1399|      0|		if (bs->fd>=0) {
  ------------------
  |  Branch (1399:7): [True: 0, False: 0]
  ------------------
 1400|      0|			lseek_64(bs->fd, bs->position, SEEK_SET);
  ------------------
  |  |  391|      0|#define lseek_64 lseek
  ------------------
 1401|      0|		} else
 1402|      0|#endif
 1403|      0|		{
 1404|      0|			gf_fseek(bs->stream, bs->position, SEEK_SET);
 1405|      0|		}
 1406|      0|		return;
 1407|      0|	}
 1408|       |
 1409|       |	/*special case for reading*/
 1410|     57|	if (bs->bsmode == GF_BITSTREAM_READ) {
  ------------------
  |  Branch (1410:6): [True: 57, False: 0]
  ------------------
 1411|     57|		if (bs->remove_emul_prevention_byte) {
  ------------------
  |  Branch (1411:7): [True: 0, False: 57]
  ------------------
 1412|      0|			while (nbBytes) {
  ------------------
  |  Branch (1412:11): [True: 0, False: 0]
  ------------------
 1413|      0|				gf_bs_read_u8(bs);
 1414|      0|				nbBytes--;
 1415|      0|			}
 1416|     57|		} else {
 1417|     57|			bs->position += nbBytes;
 1418|     57|			if (bs->position>bs->size) {
  ------------------
  |  Branch (1418:8): [True: 0, False: 57]
  ------------------
 1419|      0|				bs->position = bs->size;
 1420|      0|				bs->overflow_state = 1;
 1421|      0|			}
 1422|     57|		}
 1423|     57|		return;
 1424|     57|	}
 1425|       |	/*for writing we must do it this way, otherwise pb in dynamic buffers*/
 1426|      0|	while (nbBytes) {
  ------------------
  |  Branch (1426:9): [True: 0, False: 0]
  ------------------
 1427|      0|		gf_bs_write_int(bs, 0, 8);
 1428|      0|		nbBytes--;
 1429|      0|	}
 1430|      0|}
gf_bs_seek:
 1511|      2|{
 1512|      2|	bs->overflow_state = 0;
 1513|      2|	if (bs->on_block_out) {
  ------------------
  |  Branch (1513:6): [True: 0, False: 2]
  ------------------
 1514|      0|		GF_Err e;
 1515|      0|		if (offset < bs->bytes_out) {
  ------------------
  |  Branch (1515:7): [True: 0, False: 0]
  ------------------
 1516|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[BS] Attempt to seek on byte range already forwarded\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1517|      0|			return GF_BAD_PARAM;
 1518|      0|		}
 1519|       |		/*warning: we allow offset = bs->size for WRITE buffers*/
 1520|      0|		if (offset - bs->bytes_out > bs->size)
  ------------------
  |  Branch (1520:7): [True: 0, False: 0]
  ------------------
 1521|      0|			return GF_BAD_PARAM;
 1522|      0|		gf_bs_align(bs);
 1523|      0|		e = BS_SeekIntern(bs, offset - bs->bytes_out);
 1524|      0|		bs->position += bs->bytes_out;
 1525|      0|		return e;
 1526|      0|	}
 1527|      2|	if (bs->cache_write)
  ------------------
  |  Branch (1527:6): [True: 0, False: 2]
  ------------------
 1528|      0|		bs_flush_write_cache(bs);
 1529|       |
 1530|       |	/*warning: we allow offset = bs->size for WRITE buffers*/
 1531|      2|	if (offset > bs->size) return GF_BAD_PARAM;
  ------------------
  |  Branch (1531:6): [True: 0, False: 2]
  ------------------
 1532|       |
 1533|      2|	gf_bs_align(bs);
 1534|      2|	return BS_SeekIntern(bs, offset);
 1535|      2|}
gf_bs_get_size:
 1637|      5|{
 1638|      5|	if (bs->cache_write) {
  ------------------
  |  Branch (1638:6): [True: 0, False: 5]
  ------------------
 1639|      0|		if (bs->size == bs->position)
  ------------------
  |  Branch (1639:7): [True: 0, False: 0]
  ------------------
 1640|      0|			return bs->size + bs->buffer_written;
 1641|      0|		else
 1642|      0|			return bs->size;
 1643|      0|	}
 1644|      5|	if (bs->on_block_out)
  ------------------
  |  Branch (1644:6): [True: 0, False: 5]
  ------------------
 1645|      0|		return bs->position;
 1646|      5|	return bs->size;
 1647|      5|}
gf_bs_get_position:
 1651|      5|{
 1652|      5|	if (bs->cache_write)
  ------------------
  |  Branch (1652:6): [True: 0, False: 5]
  ------------------
 1653|      0|		return bs->position + bs->buffer_written;
 1654|      5|	return bs->position;
 1655|      5|}
gf_bs_set_eos_callback:
 1667|     27|{
 1668|     27|	bs->EndOfStream = EndOfStream;
 1669|     27|	bs->par = par;
 1670|     27|}
bitstream.c:BS_ReadByte:
  447|  6.63M|{
  448|  6.63M|	Bool is_eos;
  449|  6.63M|	if (bs->bsmode == GF_BITSTREAM_READ) {
  ------------------
  |  Branch (449:6): [True: 6.63M, False: 0]
  ------------------
  450|  6.63M|		u8 res;
  451|  6.63M|		if (bs->position >= bs->size) {
  ------------------
  |  Branch (451:7): [True: 89, False: 6.63M]
  ------------------
  452|     89|			if (bs->EndOfStream) bs->EndOfStream(bs->par);
  ------------------
  |  Branch (452:8): [True: 7, False: 82]
  ------------------
  453|     89|			if (!bs->overflow_state) bs->overflow_state = 1;
  ------------------
  |  Branch (453:8): [True: 20, False: 69]
  ------------------
  454|     89|			return 0;
  455|     89|		}
  456|  6.63M|		res = bs->original[bs->position++];
  457|       |
  458|  6.63M|		if (bs->remove_emul_prevention_byte) {
  ------------------
  |  Branch (458:7): [True: 0, False: 6.63M]
  ------------------
  459|      0|			if ((bs->nb_zeros==2) && (res==0x03) && (bs->position<bs->size) && (bs->original[bs->position]<0x04)) {
  ------------------
  |  Branch (459:8): [True: 0, False: 0]
  |  Branch (459:29): [True: 0, False: 0]
  |  Branch (459:44): [True: 0, False: 0]
  |  Branch (459:71): [True: 0, False: 0]
  ------------------
  460|      0|				bs->nb_zeros = 0;
  461|      0|				bs->nb_removed++;
  462|      0|				res = bs->original[bs->position++];
  463|      0|			}
  464|      0|			if (!res) bs->nb_zeros++;
  ------------------
  |  Branch (464:8): [True: 0, False: 0]
  ------------------
  465|      0|			else bs->nb_zeros = 0;
  466|      0|		}
  467|  6.63M|		return res;
  468|  6.63M|	}
  469|      0|	if (bs->cache_write)
  ------------------
  |  Branch (469:6): [True: 0, False: 0]
  ------------------
  470|      0|		bs_flush_write_cache(bs);
  471|       |
  472|      0|#ifdef GPAC_HAS_FD
  473|      0|	if (bs->fd>=0)
  ------------------
  |  Branch (473:6): [True: 0, False: 0]
  ------------------
  474|      0|		is_eos = (bs->position<bs->size) ? GF_FALSE : GF_TRUE;
  ------------------
  |  Branch (474:12): [True: 0, False: 0]
  ------------------
  475|      0|	else
  476|      0|#endif
  477|      0|		is_eos = bs->stream ? gf_feof(bs->stream) : GF_TRUE;
  ------------------
  |  Branch (477:12): [True: 0, False: 0]
  ------------------
  478|       |
  479|       |	//cache not fully read, reset EOS
  480|      0|	if (bs->cache_read && (bs->cache_read_pos<bs->cache_read_size))
  ------------------
  |  Branch (480:6): [True: 0, False: 0]
  |  Branch (480:24): [True: 0, False: 0]
  ------------------
  481|      0|		is_eos = GF_FALSE;
  482|       |
  483|       |	/*we are in FILE mode, test for end of file*/
  484|      0|	if (!is_eos) {
  ------------------
  |  Branch (484:6): [True: 0, False: 0]
  ------------------
  485|      0|		u8 res;
  486|      0|		Bool loc_eos=GF_FALSE;
  487|      0|		gf_assert(bs->position<=bs->size);
  488|      0|		bs->position++;
  489|       |
  490|      0|		res = gf_bs_load_byte(bs, &loc_eos);
  491|      0|		if (loc_eos) goto bs_eof;
  ------------------
  |  Branch (491:7): [True: 0, False: 0]
  ------------------
  492|       |
  493|      0|		if (bs->remove_emul_prevention_byte) {
  ------------------
  |  Branch (493:7): [True: 0, False: 0]
  ------------------
  494|      0|			if ((bs->nb_zeros==2) && (res==0x03) && (bs->position<bs->size)) {
  ------------------
  |  Branch (494:8): [True: 0, False: 0]
  |  Branch (494:29): [True: 0, False: 0]
  |  Branch (494:44): [True: 0, False: 0]
  ------------------
  495|      0|				u8 next = gf_bs_load_byte(bs, &loc_eos);
  496|      0|				if (next < 0x04) {
  ------------------
  |  Branch (496:9): [True: 0, False: 0]
  ------------------
  497|      0|					bs->nb_zeros = 0;
  498|      0|					bs->nb_removed++;
  499|      0|					res = next;
  500|      0|					bs->position++;
  501|      0|				} else {
  502|      0|					gf_bs_seek(bs, bs->position);
  503|      0|				}
  504|      0|			}
  505|      0|			if (!res) bs->nb_zeros++;
  ------------------
  |  Branch (505:8): [True: 0, False: 0]
  ------------------
  506|      0|			else bs->nb_zeros = 0;
  507|      0|		}
  508|      0|		return res;
  509|      0|	}
  510|       |
  511|      0|bs_eof:
  512|      0|	if (bs->EndOfStream) {
  ------------------
  |  Branch (512:6): [True: 0, False: 0]
  ------------------
  513|      0|		bs->EndOfStream(bs->par);
  514|      0|		if (!bs->overflow_state) bs->overflow_state = 1;
  ------------------
  |  Branch (514:7): [True: 0, False: 0]
  ------------------
  515|      0|	} else {
  516|      0|		if (!bs->overflow_state) {
  ------------------
  |  Branch (516:7): [True: 0, False: 0]
  ------------------
  517|      0|			bs->overflow_state = 1;
  518|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_CORE, ("[BS] Attempt to overread bitstream\n"));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  519|      0|		}
  520|      0|	}
  521|      0|	gf_assert(bs->position <= 1+bs->size);
  522|      0|	return 0;
  523|      0|}
bitstream.c:BS_SeekIntern:
 1453|      2|{
 1454|      2|	u32 i;
 1455|       |	/*if mem, do it */
 1456|      2|	if ((bs->bsmode == GF_BITSTREAM_READ) || (bs->bsmode == GF_BITSTREAM_WRITE) || (bs->bsmode == GF_BITSTREAM_WRITE_DYN)) {
  ------------------
  |  Branch (1456:6): [True: 2, False: 0]
  |  Branch (1456:43): [True: 0, False: 0]
  |  Branch (1456:81): [True: 0, False: 0]
  ------------------
 1457|      2|		if (offset > 0xFFFFFFFF) return GF_IO_ERR;
  ------------------
  |  Branch (1457:7): [True: 0, False: 2]
  ------------------
 1458|      2|		if (!bs->original) return GF_BAD_PARAM;
  ------------------
  |  Branch (1458:7): [True: 0, False: 2]
  ------------------
 1459|       |		/*0 for write, read will be done automatically*/
 1460|      2|		if (offset >= bs->size) {
  ------------------
  |  Branch (1460:7): [True: 0, False: 2]
  ------------------
 1461|      0|			if ( (bs->bsmode == GF_BITSTREAM_READ) || (bs->bsmode == GF_BITSTREAM_WRITE) ) {
  ------------------
  |  Branch (1461:9): [True: 0, False: 0]
  |  Branch (1461:46): [True: 0, False: 0]
  ------------------
 1462|      0|				if (offset > bs->size) {
  ------------------
  |  Branch (1462:9): [True: 0, False: 0]
  ------------------
 1463|      0|					GF_LOG(GF_LOG_WARNING, GF_LOG_CORE, ("[BS] Attempt to seek to %d after end of bitstream %d, assuming seek to end\n", offset, bs->size));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1464|      0|				}
 1465|      0|				bs->position = bs->size;
 1466|      0|				bs->nbBits = (bs->bsmode == GF_BITSTREAM_READ) ? 8 : 0;
  ------------------
  |  Branch (1466:18): [True: 0, False: 0]
  ------------------
 1467|      0|				return GF_OK;
 1468|      0|			}
 1469|       |			/*in DYN, gf_realloc ...*/
 1470|      0|			bs->original = (char*)gf_realloc(bs->original, (u32) (offset + 1));
 1471|      0|			if (!bs->original)
  ------------------
  |  Branch (1471:8): [True: 0, False: 0]
  ------------------
 1472|      0|				return GF_OUT_OF_MEM;
 1473|      0|			for (i = 0; i < (u32) (offset + 1 - bs->size); i++) {
  ------------------
  |  Branch (1473:16): [True: 0, False: 0]
  ------------------
 1474|      0|				bs->original[bs->size + i] = 0;
 1475|      0|			}
 1476|      0|			bs->size = offset + 1;
 1477|      0|		}
 1478|      2|		bs->current = bs->original[offset];
 1479|      2|		bs->position = offset;
 1480|      2|		bs->nbBits = (bs->bsmode == GF_BITSTREAM_READ) ? 8 : 0;
  ------------------
  |  Branch (1480:16): [True: 2, False: 0]
  ------------------
 1481|      2|		return GF_OK;
 1482|      2|	}
 1483|       |
 1484|      0|	if (bs->cache_write)
  ------------------
  |  Branch (1484:6): [True: 0, False: 0]
  ------------------
 1485|      0|		bs_flush_write_cache(bs);
 1486|       |
 1487|      0|	if (bs->cache_read) {
  ------------------
  |  Branch (1487:6): [True: 0, False: 0]
  ------------------
 1488|      0|		bs->cache_read_pos = bs->cache_read_size;
 1489|      0|	}
 1490|       |
 1491|      0|	s64 res;
 1492|      0|#ifdef GPAC_HAS_FD
 1493|      0|	if (bs->fd>=0) {
  ------------------
  |  Branch (1493:6): [True: 0, False: 0]
  ------------------
 1494|      0|		res = lseek_64(bs->fd, offset, SEEK_SET);
  ------------------
  |  |  391|      0|#define lseek_64 lseek
  ------------------
 1495|      0|		if (res>=0) res = 0;
  ------------------
  |  Branch (1495:7): [True: 0, False: 0]
  ------------------
 1496|      0|	} else
 1497|      0|#endif
 1498|      0|	{
 1499|      0|		res = gf_fseek(bs->stream, offset, SEEK_SET);
 1500|      0|	}
 1501|      0|	bs->position = offset;
 1502|      0|	bs->current = 0;
 1503|       |	/*setup NbBits so that next acccess to the buffer will trigger read/write*/
 1504|      0|	bs->nbBits = (bs->bsmode == GF_BITSTREAM_FILE_READ) ? 8 : 0;
  ------------------
  |  Branch (1504:15): [True: 0, False: 0]
  ------------------
 1505|      0|	return res ? GF_IO_ERR : GF_OK;
  ------------------
  |  Branch (1505:9): [True: 0, False: 0]
  ------------------
 1506|      2|}

gf_log_tool_level_on:
  727|  2.80M|{
  728|  2.80M|	if (logs_extras) {
  ------------------
  |  Branch (728:6): [True: 0, False: 2.80M]
  ------------------
  729|      0|		gf_mx_p(logs_mx);
  730|      0|		u32 count = logs_extras ? gf_list_count(logs_extras) : 0; //avoid race condition
  ------------------
  |  Branch (730:15): [True: 0, False: 0]
  ------------------
  731|      0|		for (u32 i=0;i<count;i++) {
  ------------------
  |  Branch (731:16): [True: 0, False: 0]
  ------------------
  732|      0|			GF_LogExtra *lf = gf_list_get(logs_extras, i);
  733|      0|			u32 j;
  734|      0|			for (j=0; j<lf->nb_tools; j++) {
  ------------------
  |  Branch (734:14): [True: 0, False: 0]
  ------------------
  735|      0|				if (lf->tools[j]==GF_LOG_ALL) {}
  ------------------
  |  Branch (735:9): [True: 0, False: 0]
  ------------------
  736|      0|				else if (lf->tools[j]==GF_LOG_TOOL_UNDEFINED) {
  ------------------
  |  Branch (736:14): [True: 0, False: 0]
  ------------------
  737|      0|					lf->tools[j] = log_tool;
  738|      0|				}
  739|      0|				else if (log_tool!=lf->tools[j])
  ------------------
  |  Branch (739:14): [True: 0, False: 0]
  ------------------
  740|      0|					continue;
  741|       |
  742|      0|				if (lf->levels[j] >= log_level) {
  ------------------
  |  Branch (742:9): [True: 0, False: 0]
  ------------------
  743|      0|					gf_mx_v(logs_mx);
  744|      0|					if (lf->strict && (log_level==GF_LOG_ERROR) && (log_tool != GF_LOG_MEMORY))
  ------------------
  |  Branch (744:10): [True: 0, False: 0]
  |  Branch (744:24): [True: 0, False: 0]
  |  Branch (744:53): [True: 0, False: 0]
  ------------------
  745|      0|						gf_log_set_strict_error(GF_TRUE);
  746|      0|					return GF_TRUE;
  747|      0|				}
  748|      0|				if (lf->levels[j] == GF_LOG_QUIET) {
  ------------------
  |  Branch (748:9): [True: 0, False: 0]
  ------------------
  749|      0|					gf_mx_v(logs_mx);
  750|      0|					return GF_FALSE;
  751|      0|				}
  752|      0|			}
  753|      0|		}
  754|      0|		gf_mx_v(logs_mx);
  755|      0|	}
  756|  2.80M|	if (log_tool==GF_LOG_TOOL_MAX) return GF_TRUE;
  ------------------
  |  Branch (756:6): [True: 0, False: 2.80M]
  ------------------
  757|  2.80M|	if (log_tool>GF_LOG_TOOL_MAX) return GF_FALSE;
  ------------------
  |  Branch (757:6): [True: 0, False: 2.80M]
  ------------------
  758|  2.80M|	if (global_log_tools[log_tool].level >= log_level) {
  ------------------
  |  Branch (758:6): [True: 0, False: 2.80M]
  ------------------
  759|      0|		if (global_log_tools[log_tool].strict && (log_level==GF_LOG_ERROR) && (log_tool != GF_LOG_MEMORY))
  ------------------
  |  Branch (759:7): [True: 0, False: 0]
  |  Branch (759:44): [True: 0, False: 0]
  |  Branch (759:73): [True: 0, False: 0]
  ------------------
  760|      0|			gf_log_set_strict_error(GF_TRUE);
  761|      0|		return GF_TRUE;
  762|      0|	}
  763|  2.80M|	return GF_FALSE;
  764|  2.80M|}
gf_log_set_tool_level:
 1057|      2|{
 1058|      2|	if (tool>GF_LOG_TOOL_MAX) return;
  ------------------
  |  Branch (1058:6): [True: 0, False: 2]
  ------------------
 1059|      2|	if (tool==GF_LOG_ALL) {
  ------------------
  |  Branch (1059:6): [True: 2, False: 0]
  ------------------
 1060|      2|		u32 i;
 1061|     60|		for (i=0; i<GF_LOG_TOOL_MAX; i++) {
  ------------------
  |  Branch (1061:13): [True: 58, False: 2]
  ------------------
 1062|     58|			global_log_tools[i].level = level;
 1063|     58|		}
 1064|      2|	} else {
 1065|      0|		global_log_tools[tool].level = level;
 1066|      0|	}
 1067|      2|}

gf_list_new:
  609|    704|{
  610|    704|	GF_List *nlist;
  611|       |
  612|    704|	nlist = (GF_List *) gf_malloc(sizeof(GF_List));
  613|    704|	if (! nlist) return NULL;
  ------------------
  |  Branch (613:6): [True: 0, False: 704]
  ------------------
  614|       |
  615|    704|	nlist->slots = NULL;
  616|    704|	nlist->entryCount = 0;
  617|    704|	nlist->allocSize = 0;
  618|    704|	return nlist;
  619|    704|}
gf_list_del:
  634|    748|{
  635|    748|	if (!ptr) return;
  ------------------
  |  Branch (635:6): [True: 44, False: 704]
  ------------------
  636|    704|	gf_free(ptr->slots);
  637|    704|	gf_free(ptr);
  638|    704|}
gf_list_add:
  648|   108k|{
  649|   108k|	if (! ptr) return GF_BAD_PARAM;
  ------------------
  |  Branch (649:6): [True: 0, False: 108k]
  ------------------
  650|   108k|	if (! item)
  ------------------
  |  Branch (650:6): [True: 0, False: 108k]
  ------------------
  651|      0|		return GF_BAD_PARAM;
  652|   108k|	if (ptr->allocSize==ptr->entryCount) realloc_chain(ptr);
  ------------------
  |  Branch (652:6): [True: 373, False: 108k]
  ------------------
  653|   108k|	if (!ptr->slots) return GF_OUT_OF_MEM;
  ------------------
  |  Branch (653:6): [True: 0, False: 108k]
  ------------------
  654|       |
  655|   108k|	ptr->slots[ptr->entryCount] = item;
  656|   108k|	ptr->entryCount ++;
  657|   108k|	return GF_OK;
  658|   108k|}
gf_list_count:
  662|   105k|{
  663|   105k|	if (!ptr) return 0;
  ------------------
  |  Branch (663:6): [True: 44, False: 105k]
  ------------------
  664|   105k|	return ptr->entryCount;
  665|   105k|}
gf_list_get:
  669|   140k|{
  670|   140k|	if(!ptr || (itemNumber >= ptr->entryCount))
  ------------------
  |  Branch (670:5): [True: 0, False: 140k]
  |  Branch (670:13): [True: 223, False: 139k]
  ------------------
  671|    223|		return NULL;
  672|   139k|	return ptr->slots[itemNumber];
  673|   140k|}
gf_list_last:
  677|  96.7k|{
  678|  96.7k|	if(!ptr || !ptr->entryCount) return NULL;
  ------------------
  |  Branch (678:5): [True: 0, False: 96.7k]
  |  Branch (678:13): [True: 3, False: 96.7k]
  ------------------
  679|  96.7k|	return ptr->slots[ptr->entryCount-1];
  680|  96.7k|}
gf_list_rem:
  686|    688|{
  687|    688|	u32 i;
  688|    688|	if ( !ptr || !ptr->slots || !ptr->entryCount) return GF_BAD_PARAM;
  ------------------
  |  Branch (688:7): [True: 0, False: 688]
  |  Branch (688:15): [True: 0, False: 688]
  |  Branch (688:30): [True: 0, False: 688]
  ------------------
  689|    688|	if (ptr->entryCount < itemNumber) return GF_BAD_PARAM;
  ------------------
  |  Branch (689:6): [True: 0, False: 688]
  ------------------
  690|       |
  691|    688|	i = ptr->entryCount - itemNumber - 1;
  692|    688|	if (i) memmove(&ptr->slots[itemNumber], & ptr->slots[itemNumber +1], sizeof(void *)*i);
  ------------------
  |  Branch (692:6): [True: 246, False: 442]
  ------------------
  693|       |	ptr->slots[ptr->entryCount-1] = NULL;
  694|    688|	ptr->entryCount -= 1;
  695|    688|	return GF_OK;
  696|    688|}
gf_list_rem_last:
  700|  96.7k|{
  701|  96.7k|	if ( !ptr || !ptr->slots || !ptr->entryCount) return GF_BAD_PARAM;
  ------------------
  |  Branch (701:7): [True: 0, False: 96.7k]
  |  Branch (701:15): [True: 0, False: 96.7k]
  |  Branch (701:30): [True: 0, False: 96.7k]
  ------------------
  702|  96.7k|	ptr->slots[ptr->entryCount-1] = NULL;
  703|  96.7k|	ptr->entryCount -= 1;
  704|  96.7k|	return GF_OK;
  705|  96.7k|}
gf_list_reset:
  726|     43|{
  727|     43|	if (ptr) ptr->entryCount = 0;
  ------------------
  |  Branch (727:6): [True: 43, False: 0]
  ------------------
  728|     43|}
gf_list_find:
  734|  8.14k|{
  735|  8.14k|	u32 i, count;
  736|  8.14k|	count = gf_list_count(ptr);
  737|   135k|	for (i=0; i<count; i++) {
  ------------------
  |  Branch (737:12): [True: 127k, False: 7.60k]
  ------------------
  738|   127k|		if (gf_list_get(ptr, i) == item) return (s32) i;
  ------------------
  |  Branch (738:7): [True: 536, False: 127k]
  ------------------
  739|   127k|	}
  740|  7.60k|	return -1;
  741|  8.14k|}
gf_list_del_item:
  745|  7.53k|{
  746|  7.53k|	s32 i = gf_list_find(ptr, item);
  747|  7.53k|	if (i>=0) gf_list_rem(ptr, (u32) i);
  ------------------
  |  Branch (747:6): [True: 533, False: 7.00k]
  ------------------
  748|  7.53k|	return i;
  749|  7.53k|}
gf_list_enum:
  753|    225|{
  754|    225|	void *res;
  755|    225|	if (!ptr || !pos) return NULL;
  ------------------
  |  Branch (755:6): [True: 0, False: 225]
  |  Branch (755:14): [True: 0, False: 225]
  ------------------
  756|    225|	res = gf_list_get(ptr, *pos);
  757|    225|	(*pos)++;
  758|    225|	return res;
  759|    225|}
gf_list_pop_back:
  858|  86.1k|void* gf_list_pop_back(GF_List *ptr) {
  859|  86.1k|	void * item;
  860|  86.1k|	if (!ptr) return NULL;
  ------------------
  |  Branch (860:6): [True: 0, False: 86.1k]
  ------------------
  861|       |
  862|  86.1k|	item = gf_list_last(ptr);
  863|  86.1k|	gf_list_rem_last(ptr);
  864|       |
  865|  86.1k|	return item;
  866|  86.1k|}
list.c:realloc_chain:
  641|    373|{
  642|    373|	GF_LIST_REALLOC(ptr->allocSize);
  ------------------
  |  |   50|    373|#define GF_LIST_REALLOC(a) (a = a ? (3*a/2) : 10)
  |  |  ------------------
  |  |  |  Branch (50:33): [True: 236, False: 137]
  |  |  ------------------
  ------------------
  643|    373|	ptr->slots = (void**)gf_realloc(ptr->slots, ptr->allocSize*sizeof(void*));
  644|    373|}

gf_get_bit_size:
   41|     55|{
   42|     55|	u32 k=0;
   43|    207|	while (MaxVal > (((u32)1<<k)-1) ) {
  ------------------
  |  Branch (43:9): [True: 152, False: 55]
  ------------------
   44|    152|		if (k==31) {
  ------------------
  |  Branch (44:7): [True: 0, False: 152]
  ------------------
   45|      0|			return 32;
   46|      0|		}
   47|    152|		k+=1;
   48|    152|	}
   49|     55|	return k;
   50|     55|}

gf_opts_get_key:
 1328|     29|{
 1329|     29|	if (!gpac_global_config) return NULL;
  ------------------
  |  Branch (1329:6): [True: 29, False: 0]
  ------------------
 1330|       |
 1331|      0|	if (!strcmp(secName, "core")) {
  ------------------
  |  Branch (1331:6): [True: 0, False: 0]
  ------------------
 1332|      0|		const char *opt = gf_cfg_get_key(gpac_global_config, "temp", keyName);
 1333|      0|		if (opt) return opt;
  ------------------
  |  Branch (1333:7): [True: 0, False: 0]
  ------------------
 1334|      0|	}
 1335|      0|	return gf_cfg_get_key(gpac_global_config, secName, keyName);
 1336|      0|}
gf_opts_get_bool:
 1690|     29|{
 1691|     29|	const char *opt = gf_opts_get_key(secName, keyName);
 1692|       |
 1693|     29|	if (!opt && !strcmp(secName, "core")) {
  ------------------
  |  Branch (1693:6): [True: 29, False: 0]
  |  Branch (1693:14): [True: 29, False: 0]
  ------------------
 1694|     29|		opt = gpac_opt_default(keyName);
 1695|     29|	}
 1696|       |
 1697|     29|	if (!opt) return GF_FALSE;
  ------------------
  |  Branch (1697:6): [True: 29, False: 0]
  ------------------
 1698|      0|	if (!strcmp(opt, "yes")) return GF_TRUE;
  ------------------
  |  Branch (1698:6): [True: 0, False: 0]
  ------------------
 1699|      0|	if (!strcmp(opt, "true")) return GF_TRUE;
  ------------------
  |  Branch (1699:6): [True: 0, False: 0]
  ------------------
 1700|      0|	if (!strcmp(opt, "1")) return GF_TRUE;
  ------------------
  |  Branch (1700:6): [True: 0, False: 0]
  ------------------
 1701|      0|	return GF_FALSE;
 1702|      0|}
os_config_init.c:gpac_opt_default:
 1675|     29|{
 1676|     29|	const GF_GPACArg *arg = NULL;
 1677|     29|	u32 i=0;
 1678|    986|	while (GPAC_Args[i].name) {
  ------------------
  |  Branch (1678:9): [True: 986, False: 0]
  ------------------
 1679|    986|		arg = &GPAC_Args[i];
 1680|    986|		i++;
 1681|    986|		if (!strcmp(arg->name, argname)) break;
  ------------------
  |  Branch (1681:7): [True: 29, False: 957]
  ------------------
 1682|    957|		arg = NULL;
 1683|    957|	}
 1684|     29|	if (!arg) return NULL;
  ------------------
  |  Branch (1684:6): [True: 0, False: 29]
  ------------------
 1685|     29|	return arg->val;
 1686|     29|}

my_str_upr:
  455|      8|{
  456|      8|	u32 i;
  457|     16|	for (i=0; i<strlen(str); i++) {
  ------------------
  |  Branch (457:12): [True: 8, False: 8]
  ------------------
  458|       |		str[i] = toupper(str[i]);
  ------------------
  |  Branch (458:12): [True: 0, False: 0]
  |  Branch (458:12): [True: 0, False: 0]
  |  Branch (458:12): [Folded, False: 8]
  ------------------
  459|      8|	}
  460|      8|	return str;
  461|      8|}

gf_th_id:
  493|    172|{
  494|       |#ifdef WIN32
  495|       |	return ((u32) GetCurrentThreadId());
  496|       |#else
  497|    172|	return ((u32) (PTR_TO_U_CAST(pthread_self())));
  ------------------
  |  |  566|    172|#define PTR_TO_U_CAST (u64)
  ------------------
  498|    172|#endif
  499|    172|}
gf_mx_new:
  525|     29|{
  526|     29|	if (gf_opts_get_bool("core", "no-mx")) return NULL;
  ------------------
  |  Branch (526:6): [True: 0, False: 29]
  ------------------
  527|       |
  528|     29|#ifndef WIN32
  529|     29|	pthread_mutexattr_t attr;
  530|     29|#endif
  531|     29|	GF_Mutex *tmp = (GF_Mutex*)gf_malloc(sizeof(GF_Mutex));
  532|     29|	if (!tmp) return NULL;
  ------------------
  |  Branch (532:6): [True: 0, False: 29]
  ------------------
  533|     29|	memset(tmp, 0, sizeof(GF_Mutex));
  534|       |
  535|       |#ifdef WIN32
  536|       |	tmp->hMutex = CreateMutex(NULL, FALSE, NULL);
  537|       |	if (!tmp->hMutex) {
  538|       |#else
  539|     29|	pthread_mutexattr_init(&attr);
  540|     29|	if ( pthread_mutex_init(&tmp->hMutex, &attr) != 0 ) {
  ------------------
  |  Branch (540:7): [True: 0, False: 29]
  ------------------
  541|      0|#endif
  542|      0|		GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex] Couldn't create mutex %s\n", strlen(name) ? name : ""));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  |  Branch (1086:143): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  543|      0|		gf_free(tmp);
  544|      0|		return NULL;
  545|      0|	}
  546|       |
  547|     29|#ifndef GPAC_DISABLE_LOG
  548|     29|	if (name) {
  ------------------
  |  Branch (548:6): [True: 29, False: 0]
  ------------------
  549|     29|		if (stricmp(name, "Logs")) {
  ------------------
  |  |  342|     29|#define stricmp		strcasecmp
  ------------------
  |  Branch (549:7): [True: 29, False: 0]
  ------------------
  550|     29|			tmp->log_name = gf_strdup(name);
  551|     29|		}
  552|     29|	} else {
  553|      0|		char szN[20];
  554|      0|		sprintf(szN, "%p", (void*)tmp);
  555|      0|		tmp->log_name = gf_strdup(szN);
  556|      0|	}
  557|     29|#endif
  558|       |
  559|     29|	return tmp;
  560|     29|}
gf_mx_del:
  565|     29|{
  566|     29|#ifndef WIN32
  567|     29|	int err;
  568|     29|#endif
  569|     29|	if (!mx) return;
  ------------------
  |  Branch (569:6): [True: 0, False: 29]
  ------------------
  570|     29|#ifndef GPAC_DISABLE_LOG
  571|     29|	if (mx->Holder && (gf_th_id() != mx->Holder) && mx->log_name) {
  ------------------
  |  Branch (571:6): [True: 0, False: 29]
  |  Branch (571:20): [True: 0, False: 0]
  |  Branch (571:50): [True: 0, False: 0]
  ------------------
  572|      0|		char szName1[100], szName2[100];
  573|      0|		GF_LOG(GF_LOG_WARNING, GF_LOG_MUTEX, ("[Mutex %s] Destroying mutex from thread %s but hold by thread %s\n", mx->log_name, log_th_name(gf_th_id(), szName1), log_th_name(mx->Holder, szName2) ));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  574|      0|	}
  575|     29|#endif
  576|       |
  577|       |#ifdef WIN32
  578|       |	if (!CloseHandle(mx->hMutex)) {
  579|       |#ifndef GPAC_DISABLE_LOG
  580|       |		if (mx->log_name) {
  581|       |			DWORD err = GetLastError();
  582|       |			GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex %s] CloseHandle when deleting mutex failed with error code %d\n", mx->log_name, err));
  583|       |		}
  584|       |#endif
  585|       |	}
  586|       |#else
  587|     29|	int max_retries = 10;
  588|     29|retry:
  589|     29|	err = pthread_mutex_destroy(&mx->hMutex);
  590|     29|	if (err == EBUSY && max_retries > 0) {
  ------------------
  |  Branch (590:6): [True: 0, False: 29]
  |  Branch (590:22): [True: 0, False: 0]
  ------------------
  591|      0|		gf_sleep(10);
  592|      0|		max_retries--;
  593|      0|		goto retry;
  594|      0|	}
  595|     29|	if (err) {
  ------------------
  |  Branch (595:6): [True: 0, False: 29]
  ------------------
  596|      0|#ifndef GPAC_DISABLE_LOG
  597|      0|		if (mx->log_name) {
  ------------------
  |  Branch (597:7): [True: 0, False: 0]
  ------------------
  598|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex %s] pthread_mutex_destroy failed with error code %d\n", mx->log_name, err));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  599|      0|		}
  600|      0|#endif
  601|      0|	}
  602|       |
  603|     29|#endif
  604|     29|#ifndef GPAC_DISABLE_LOG
  605|     29|	if (mx->log_name) {
  ------------------
  |  Branch (605:6): [True: 29, False: 0]
  ------------------
  606|     29|		gf_free(mx->log_name);
  607|       |		mx->log_name = NULL;
  608|     29|	}
  609|     29|#endif
  610|     29|	gf_free(mx);
  611|     29|}
gf_mx_v:
  623|     86|{
  624|     86|	u32 caller;
  625|     86|	if (!mx) return;
  ------------------
  |  Branch (625:6): [True: 0, False: 86]
  ------------------
  626|     86|	caller = gf_th_id();
  627|       |
  628|       |	/*only if we own*/
  629|     86|	if (caller != mx->Holder) {
  ------------------
  |  Branch (629:6): [True: 0, False: 86]
  ------------------
  630|      0|		gf_fatal_assert(0);
  ------------------
  |  |  882|      0|#define gf_fatal_assert(_cond) if (! (_cond)) { fprintf(stderr, "Fatal error " #_cond " file %s line %d, exiting\n", (strstr(__FILE__, "gpac") ? strstr(__FILE__, "gpac") + 5 : __FILE__), __LINE__ ); exit(10); }
  |  |  ------------------
  |  |  |  Branch (882:36): [True: 0, Folded]
  |  |  |  Branch (882:119): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  631|      0|		return;
  632|      0|	}
  633|     86|	gf_fatal_assert(mx->HolderCount > 0);
  ------------------
  |  |  882|     86|#define gf_fatal_assert(_cond) if (! (_cond)) { fprintf(stderr, "Fatal error " #_cond " file %s line %d, exiting\n", (strstr(__FILE__, "gpac") ? strstr(__FILE__, "gpac") + 5 : __FILE__), __LINE__ ); exit(10); }
  |  |  ------------------
  |  |  |  Branch (882:36): [True: 0, False: 86]
  |  |  |  Branch (882:119): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  634|     86|	mx->HolderCount -= 1;
  635|       |
  636|     86|	if (mx->HolderCount == 0) {
  ------------------
  |  Branch (636:6): [True: 43, False: 43]
  ------------------
  637|     43|		mx->Holder = 0;
  638|     43|		gf_fatal_assert(mx->HolderCount == 0);
  ------------------
  |  |  882|     43|#define gf_fatal_assert(_cond) if (! (_cond)) { fprintf(stderr, "Fatal error " #_cond " file %s line %d, exiting\n", (strstr(__FILE__, "gpac") ? strstr(__FILE__, "gpac") + 5 : __FILE__), __LINE__ ); exit(10); }
  |  |  ------------------
  |  |  |  Branch (882:36): [True: 0, False: 43]
  |  |  |  Branch (882:119): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  639|       |#ifdef WIN32
  640|       |		{
  641|       |			BOOL ret = ReleaseMutex(mx->hMutex);
  642|       |			if (!ret) {
  643|       |#ifndef GPAC_DISABLE_LOG
  644|       |				if (mx->log_name && !mx->nolog) {
  645|       |					char szName[100];
  646|       |					DWORD err = GetLastError();
  647|       |					GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex] Couldn't release mutex (thread %s, error %d)\n", log_th_name(mx->Holder, szName), err));
  648|       |				}
  649|       |#endif
  650|       |				return;
  651|       |			}
  652|       |		}
  653|       |#else
  654|     43|		if (pthread_mutex_unlock(&mx->hMutex)) {
  ------------------
  |  Branch (654:7): [True: 0, False: 43]
  ------------------
  655|      0|#ifndef GPAC_DISABLE_LOG
  656|      0|			if (mx->log_name && !mx->nolog) {
  ------------------
  |  Branch (656:8): [True: 0, False: 0]
  |  Branch (656:24): [True: 0, False: 0]
  ------------------
  657|      0|				char szName[100];
  658|      0|				GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex] Couldn't release mutex (thread %s)\n", log_th_name(mx->Holder, szName)));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  659|      0|			}
  660|      0|#endif
  661|      0|			return;
  662|      0|		}
  663|     43|#endif
  664|       |
  665|     43|#ifndef GPAC_DISABLE_LOG
  666|     43|		if (mx->log_name && !mx->nolog) {
  ------------------
  |  Branch (666:7): [True: 43, False: 0]
  |  Branch (666:23): [True: 43, False: 0]
  ------------------
  667|     43|			char szName[100];
  668|     43|			GF_LOG(GF_LOG_DEBUG, GF_LOG_MUTEX, ("[Mutex %s] Released by thread %s (hcount %u)\n", mx->log_name, log_th_name(mx->Holder, szName), mx->HolderCount ));
  ------------------
  |  | 1086|     43|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 43]
  |  |  ------------------
  ------------------
  669|     43|		}
  670|     43|#endif
  671|     43|	}
  672|     86|}
gf_mx_p:
  676|     86|{
  677|     86|#ifndef WIN32
  678|     86|	int retCode;
  679|     86|#endif
  680|     86|	u32 caller;
  681|     86|#ifndef GPAC_DISABLE_LOG
  682|     86|	const char *mx_holder_name;
  683|     86|#endif
  684|       |
  685|     86|	if (!mx) return 1;
  ------------------
  |  Branch (685:6): [True: 0, False: 86]
  ------------------
  686|     86|	caller = gf_th_id();
  687|     86|	if (caller == mx->Holder) {
  ------------------
  |  Branch (687:6): [True: 43, False: 43]
  ------------------
  688|     43|		gf_fatal_assert(mx->HolderCount > 0);
  ------------------
  |  |  882|     43|#define gf_fatal_assert(_cond) if (! (_cond)) { fprintf(stderr, "Fatal error " #_cond " file %s line %d, exiting\n", (strstr(__FILE__, "gpac") ? strstr(__FILE__, "gpac") + 5 : __FILE__), __LINE__ ); exit(10); }
  |  |  ------------------
  |  |  |  Branch (882:36): [True: 0, False: 43]
  |  |  |  Branch (882:119): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  689|     43|		gf_fatal_assert(mx->Holder);
  ------------------
  |  |  882|     43|#define gf_fatal_assert(_cond) if (! (_cond)) { fprintf(stderr, "Fatal error " #_cond " file %s line %d, exiting\n", (strstr(__FILE__, "gpac") ? strstr(__FILE__, "gpac") + 5 : __FILE__), __LINE__ ); exit(10); }
  |  |  ------------------
  |  |  |  Branch (882:36): [True: 0, False: 43]
  |  |  |  Branch (882:119): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  690|     43|		mx->HolderCount += 1;
  691|     43|		return 1;
  692|     43|	}
  693|       |
  694|     43|#ifndef GPAC_DISABLE_LOG
  695|     43|	if (mx->Holder && mx->log_name && !mx->nolog) {
  ------------------
  |  Branch (695:6): [True: 0, False: 43]
  |  Branch (695:20): [True: 0, False: 0]
  |  Branch (695:36): [True: 0, False: 0]
  ------------------
  696|      0|		char szName[100];
  697|      0|		mx_holder_name = mx->Holder ? log_th_name(mx->Holder, szName) : "none";
  ------------------
  |  Branch (697:20): [True: 0, False: 0]
  ------------------
  698|      0|		GF_LOG(GF_LOG_DEBUG, GF_LOG_MUTEX, ("[Mutex %s] Thread %s waiting a release from thread %s (hcount %d)\n", mx->log_name, log_th_name(caller, szName), mx_holder_name, mx->HolderCount ));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  699|      0|	}
  700|     43|#endif
  701|       |
  702|       |#ifdef WIN32
  703|       |	switch (WaitForSingleObject(mx->hMutex, INFINITE)) {
  704|       |	case WAIT_ABANDONED:
  705|       |	case WAIT_TIMEOUT:
  706|       |		return 0;
  707|       |	default:
  708|       |		break;
  709|       |	}
  710|       |#else
  711|     43|	retCode = pthread_mutex_lock(&mx->hMutex);
  712|     43|	if (retCode != 0) {
  ------------------
  |  Branch (712:6): [True: 0, False: 43]
  ------------------
  713|      0|#ifndef GPAC_DISABLE_LOG
  714|      0|		char name[100] = {0};
  715|      0|		if (mx->log_name)
  ------------------
  |  Branch (715:7): [True: 0, False: 0]
  ------------------
  716|      0|			strncpy(name, mx->log_name, sizeof(name)-1);
  717|      0|		else
  718|      0|			sprintf(name, "id=%u", gf_th_id());
  719|       |
  720|      0|		if (retCode == EINVAL)
  ------------------
  |  Branch (720:7): [True: 0, False: 0]
  ------------------
  721|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex %p:%s] Not properly initialized.\n", mx, name));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  722|      0|		if (retCode == EDEADLK)
  ------------------
  |  Branch (722:7): [True: 0, False: 0]
  ------------------
  723|      0|			GF_LOG(GF_LOG_ERROR, GF_LOG_MUTEX, ("[Mutex %p:%s] Deadlock detected.\n", mx, name));
  ------------------
  |  | 1086|      0|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  724|      0|#endif /* GPAC_DISABLE_LOG */
  725|      0|		gf_assert(0);
  726|      0|		return 0;
  727|      0|	}
  728|     43|#endif /* NOT WIN32 */
  729|     43|	gf_assert(mx->Holder == 0);
  730|     43|	gf_assert(mx->HolderCount == 0);
  731|     43|	mx->HolderCount = 1;
  732|     43|	mx->Holder = caller;
  733|     43|	gf_fatal_assert(mx->Holder);
  ------------------
  |  |  882|     43|#define gf_fatal_assert(_cond) if (! (_cond)) { fprintf(stderr, "Fatal error " #_cond " file %s line %d, exiting\n", (strstr(__FILE__, "gpac") ? strstr(__FILE__, "gpac") + 5 : __FILE__), __LINE__ ); exit(10); }
  |  |  ------------------
  |  |  |  Branch (882:36): [True: 0, False: 43]
  |  |  |  Branch (882:119): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  734|     43|#ifndef GPAC_DISABLE_LOG
  735|     43|	if (mx->log_name && !mx->nolog) {
  ------------------
  |  Branch (735:6): [True: 43, False: 0]
  |  Branch (735:22): [True: 43, False: 0]
  ------------------
  736|     43|		char szName[100];
  737|     43|		GF_LOG(GF_LOG_DEBUG, GF_LOG_MUTEX, ("[Mutex %s] Grabbed by thread %s\n", mx->log_name, log_th_name(mx->Holder, szName) ));
  ------------------
  |  | 1086|     43|#define GF_LOG(_log_level, _log_tools, __args) if (gf_log_tool_level_on(_log_tools, _log_level) ) { gf_log_lt(_log_level, _log_tools); gf_log __args ;}
  |  |  ------------------
  |  |  |  Branch (1086:52): [True: 0, False: 43]
  |  |  ------------------
  ------------------
  738|     43|	}
  739|     43|#endif
  740|     43|	return 1;
  741|     43|}

gf_path_reset:
   43|     12|{
   44|     12|	Fixed fineness;
   45|     12|	u32 flags;
   46|     12|	if (!gp) return;
  ------------------
  |  Branch (46:6): [True: 0, False: 12]
  ------------------
   47|     12|	if (gp->contours) gf_free(gp->contours);
  ------------------
  |  Branch (47:6): [True: 0, False: 12]
  ------------------
   48|     12|	if (gp->tags) gf_free(gp->tags);
  ------------------
  |  Branch (48:6): [True: 0, False: 12]
  ------------------
   49|     12|	if (gp->points) gf_free(gp->points);
  ------------------
  |  Branch (49:6): [True: 0, False: 12]
  ------------------
   50|     12|	fineness = gp->fineness ? gp->fineness : FIX_ONE;
  ------------------
  |  |  118|     22|#define FIX_ONE			1.0f
  ------------------
  |  Branch (50:13): [True: 2, False: 10]
  ------------------
   51|     12|	flags = gp->flags;
   52|     12|	memset(gp, 0, sizeof(GF_Path));
   53|     12|	gp->flags = flags | GF_PATH_FLATTENED | GF_PATH_BBOX_DIRTY;
   54|     12|	gp->fineness = fineness;
   55|     12|}
gf_path_del:
   94|     10|{
   95|     10|	if (!gp) return;
  ------------------
  |  Branch (95:6): [True: 0, False: 10]
  ------------------
   96|     10|	if (gp->contours) gf_free(gp->contours);
  ------------------
  |  Branch (96:6): [True: 5, False: 5]
  ------------------
   97|     10|	if (gp->tags) gf_free(gp->tags);
  ------------------
  |  Branch (97:6): [True: 5, False: 5]
  ------------------
   98|     10|	if (gp->points) gf_free(gp->points);
  ------------------
  |  Branch (98:6): [True: 5, False: 5]
  ------------------
   99|     10|	gf_free(gp);
  100|     10|}
gf_path_add_move_to:
  112|      6|{
  113|      6|	if (!gp) return GF_BAD_PARAM;
  ------------------
  |  Branch (113:6): [True: 0, False: 6]
  ------------------
  114|       |
  115|       |#if 0
  116|       |	/*skip empty paths*/
  117|       |	if ((gp->n_contours>=2) && (gp->contours[gp->n_contours-2]+1==gp->contours[gp->n_contours-1])) {
  118|       |		gp->points[gp->n_points].x = x;
  119|       |		gp->points[gp->n_points].y = y;
  120|       |		return GF_OK;
  121|       |	}
  122|       |#endif
  123|       |
  124|      6|	gp->contours = (u32 *) gf_realloc(gp->contours, sizeof(u32)*(gp->n_contours+1));
  125|      6|	GF_2D_REALLOC(gp)
  ------------------
  |  |  103|      6|	if (_gp->n_alloc_points < _gp->n_points+3) {	\
  |  |  ------------------
  |  |  |  Branch (103:6): [True: 5, False: 1]
  |  |  ------------------
  |  |  104|      5|		_gp->n_alloc_points = (_gp->n_alloc_points<5) ? 10 : (_gp->n_alloc_points*2);	\
  |  |  ------------------
  |  |  |  Branch (104:25): [True: 5, False: 0]
  |  |  ------------------
  |  |  105|      5|		_gp->points = (GF_Point2D *)gf_realloc(_gp->points, sizeof(GF_Point2D)*(_gp->n_alloc_points));	\
  |  |  106|      5|		_gp->tags = (u8 *) gf_realloc(_gp->tags, sizeof(u8)*(_gp->n_alloc_points));	\
  |  |  107|      5|	}	\
  ------------------
  126|       |
  127|      6|	gp->points[gp->n_points].x = x;
  128|      6|	gp->points[gp->n_points].y = y;
  129|      6|	gp->tags[gp->n_points] = 1;
  130|       |	/*set end point*/
  131|      6|	gp->contours[gp->n_contours] = gp->n_points;
  132|       |	/*new contour*/
  133|      6|	gp->n_contours++;
  134|      6|	gp->n_points++;
  135|      6|	gp->flags |= GF_PATH_BBOX_DIRTY;
  136|      6|	return GF_OK;
  137|      6|}
gf_path_add_move_to_vec:
  140|      6|GF_Err gf_path_add_move_to_vec(GF_Path *gp, GF_Point2D *pt) {
  141|      6|	return gf_path_add_move_to(gp, pt->x, pt->y);
  142|      6|}
gf_path_add_line_to:
  146|      9|{
  147|      9|	if (!gp || !gp->n_contours) return GF_BAD_PARAM;
  ------------------
  |  Branch (147:6): [True: 0, False: 9]
  |  Branch (147:13): [True: 0, False: 9]
  ------------------
  148|       |	/*we allow line to same point as move (seen in SVG sequences) - striking will make a point*/
  149|       |
  150|      9|	GF_2D_REALLOC(gp)
  ------------------
  |  |  103|      9|	if (_gp->n_alloc_points < _gp->n_points+3) {	\
  |  |  ------------------
  |  |  |  Branch (103:6): [True: 1, False: 8]
  |  |  ------------------
  |  |  104|      1|		_gp->n_alloc_points = (_gp->n_alloc_points<5) ? 10 : (_gp->n_alloc_points*2);	\
  |  |  ------------------
  |  |  |  Branch (104:25): [True: 0, False: 1]
  |  |  ------------------
  |  |  105|      1|		_gp->points = (GF_Point2D *)gf_realloc(_gp->points, sizeof(GF_Point2D)*(_gp->n_alloc_points));	\
  |  |  106|      1|		_gp->tags = (u8 *) gf_realloc(_gp->tags, sizeof(u8)*(_gp->n_alloc_points));	\
  |  |  107|      1|	}	\
  ------------------
  151|      9|	gp->points[gp->n_points].x = x;
  152|      9|	gp->points[gp->n_points].y = y;
  153|      9|	gp->tags[gp->n_points] = 1;
  154|       |	/*set end point*/
  155|      9|	gp->contours[gp->n_contours-1] = gp->n_points;
  156|      9|	gp->n_points++;
  157|      9|	gp->flags |= GF_PATH_BBOX_DIRTY;
  158|      9|	return GF_OK;
  159|      9|}
gf_path_add_line_to_vec:
  162|      7|GF_Err gf_path_add_line_to_vec(GF_Path *gp, GF_Point2D *pt) {
  163|      7|	return gf_path_add_line_to(gp, pt->x, pt->y);
  164|      7|}
gf_path_close:
  168|      8|{
  169|      8|	GF_Point2D start, end;
  170|      8|	if (!gp || !gp->n_contours) return GF_BAD_PARAM;
  ------------------
  |  Branch (170:6): [True: 0, False: 8]
  |  Branch (170:13): [True: 2, False: 6]
  ------------------
  171|       |
  172|      6|	if (gp->n_contours<=1) start = gp->points[0];
  ------------------
  |  Branch (172:6): [True: 6, False: 0]
  ------------------
  173|      0|	else start = gp->points[gp->contours[gp->n_contours-2] + 1];
  174|      6|	end = gp->points[gp->n_points-1];
  175|      6|	end.x -= start.x;
  176|      6|	end.y -= start.y;
  177|      6|	if (FIX_ONE/100 < ABS(end.x) || FIX_ONE/100 < ABS(end.y)) {
  ------------------
  |  |  118|      6|#define FIX_ONE			1.0f
  ------------------
              	if (FIX_ONE/100 < ABS(end.x) || FIX_ONE/100 < ABS(end.y)) {
  ------------------
  |  |  467|     12|#define ABS(a)	( ( (a) > 0 ) ? (a) : - (a) )
  |  |  ------------------
  |  |  |  Branch (467:18): [True: 0, False: 6]
  |  |  ------------------
  ------------------
              	if (FIX_ONE/100 < ABS(end.x) || FIX_ONE/100 < ABS(end.y)) {
  ------------------
  |  |  118|      5|#define FIX_ONE			1.0f
  ------------------
              	if (FIX_ONE/100 < ABS(end.x) || FIX_ONE/100 < ABS(end.y)) {
  ------------------
  |  |  467|      5|#define ABS(a)	( ( (a) > 0 ) ? (a) : - (a) )
  |  |  ------------------
  |  |  |  Branch (467:18): [True: 1, False: 4]
  |  |  ------------------
  ------------------
  |  Branch (177:6): [True: 1, False: 5]
  |  Branch (177:34): [True: 1, False: 4]
  ------------------
  178|      2|		GF_Err e = gf_path_add_line_to(gp, start.x, start.y);
  179|      2|		if (e) return e;
  ------------------
  |  Branch (179:7): [True: 0, False: 2]
  ------------------
  180|      2|	}
  181|      6|	gp->tags[gp->n_points-1] = GF_PATH_CLOSE;
  182|      6|	return GF_OK;
  183|      6|}
gf_path_add_cubic_to:
  187|      3|{
  188|      3|	if (!gp || !gp->n_contours) return GF_BAD_PARAM;
  ------------------
  |  Branch (188:6): [True: 0, False: 3]
  |  Branch (188:13): [True: 0, False: 3]
  ------------------
  189|      3|	GF_2D_REALLOC(gp)
  ------------------
  |  |  103|      3|	if (_gp->n_alloc_points < _gp->n_points+3) {	\
  |  |  ------------------
  |  |  |  Branch (103:6): [True: 0, False: 3]
  |  |  ------------------
  |  |  104|      0|		_gp->n_alloc_points = (_gp->n_alloc_points<5) ? 10 : (_gp->n_alloc_points*2);	\
  |  |  ------------------
  |  |  |  Branch (104:25): [True: 0, False: 0]
  |  |  ------------------
  |  |  105|      0|		_gp->points = (GF_Point2D *)gf_realloc(_gp->points, sizeof(GF_Point2D)*(_gp->n_alloc_points));	\
  |  |  106|      0|		_gp->tags = (u8 *) gf_realloc(_gp->tags, sizeof(u8)*(_gp->n_alloc_points));	\
  |  |  107|      0|	}	\
  ------------------
  190|      3|	gp->points[gp->n_points].x = c1_x;
  191|      3|	gp->points[gp->n_points].y = c1_y;
  192|      3|	gp->tags[gp->n_points] = GF_PATH_CURVE_CUBIC;
  193|      3|	gp->n_points++;
  194|      3|	gp->points[gp->n_points].x = c2_x;
  195|      3|	gp->points[gp->n_points].y = c2_y;
  196|      3|	gp->tags[gp->n_points] = GF_PATH_CURVE_CUBIC;
  197|      3|	gp->n_points++;
  198|      3|	gp->points[gp->n_points].x = x;
  199|      3|	gp->points[gp->n_points].y = y;
  200|      3|	gp->tags[gp->n_points] = GF_PATH_CURVE_ON;
  201|       |	/*set end point*/
  202|      3|	gp->contours[gp->n_contours-1] = gp->n_points;
  203|      3|	gp->n_points++;
  204|      3|	gp->flags |= GF_PATH_BBOX_DIRTY;
  205|      3|	gp->flags &= ~GF_PATH_FLATTENED;
  206|      3|	return GF_OK;
  207|      3|}
gf_path_add_cubic_to_vec:
  211|      3|{
  212|      3|	return gf_path_add_cubic_to(gp, c1->x, c1->y, c2->x, c2->y, pt->x, pt->y);
  213|      3|}
gf_path_add_quadratic_to:
  218|      3|{
  219|      3|	if (!gp || !gp->n_contours) return GF_BAD_PARAM;
  ------------------
  |  Branch (219:6): [True: 0, False: 3]
  |  Branch (219:13): [True: 0, False: 3]
  ------------------
  220|      3|	GF_2D_REALLOC(gp)
  ------------------
  |  |  103|      3|	if (_gp->n_alloc_points < _gp->n_points+3) {	\
  |  |  ------------------
  |  |  |  Branch (103:6): [True: 1, False: 2]
  |  |  ------------------
  |  |  104|      1|		_gp->n_alloc_points = (_gp->n_alloc_points<5) ? 10 : (_gp->n_alloc_points*2);	\
  |  |  ------------------
  |  |  |  Branch (104:25): [True: 0, False: 1]
  |  |  ------------------
  |  |  105|      1|		_gp->points = (GF_Point2D *)gf_realloc(_gp->points, sizeof(GF_Point2D)*(_gp->n_alloc_points));	\
  |  |  106|      1|		_gp->tags = (u8 *) gf_realloc(_gp->tags, sizeof(u8)*(_gp->n_alloc_points));	\
  |  |  107|      1|	}	\
  ------------------
  221|      3|	gp->points[gp->n_points].x = c_x;
  222|      3|	gp->points[gp->n_points].y = c_y;
  223|      3|	gp->tags[gp->n_points] = GF_PATH_CURVE_CONIC;
  224|      3|	gp->n_points++;
  225|      3|	gp->points[gp->n_points].x = x;
  226|      3|	gp->points[gp->n_points].y = y;
  227|      3|	gp->tags[gp->n_points] = GF_PATH_CURVE_ON;
  228|       |	/*set end point*/
  229|      3|	gp->contours[gp->n_contours-1] = gp->n_points;
  230|      3|	gp->n_points++;
  231|      3|	gp->flags |= GF_PATH_BBOX_DIRTY;
  232|      3|	gp->flags &= ~GF_PATH_FLATTENED;
  233|      3|	return GF_OK;
  234|      3|}
gf_path_add_quadratic_to_vec:
  237|      3|{
  238|      3|	return gf_path_add_quadratic_to(gp, c->x, c->y, pt->x, pt->y);
  239|      3|}

LLVMFuzzerInitialize:
   11|      2|int LLVMFuzzerInitialize(int *argc, char ***argv) {
   12|      2|    gf_log_set_tool_level(GF_LOG_ALL, GF_LOG_QUIET);
   13|      2|    return 0;
   14|      2|}
LLVMFuzzerTestOneInput:
   16|     29|int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
   17|     29|    if (size < 10) return 0;
  ------------------
  |  Branch (17:9): [True: 0, False: 29]
  ------------------
   18|       |
   19|     29|    GF_SceneGraph *sg = gf_sg_new();
   20|     29|    if (!sg) return 0;
  ------------------
  |  Branch (20:9): [True: 0, False: 29]
  ------------------
   21|       |
   22|     29|    uint8_t type = data[0] % 2;
   23|     29|    uint16_t es_id = (data[1] << 8) | data[2];
   24|     29|    uint32_t config_size = data[3] % 16;
   25|     29|    if (config_size + 5 > size) config_size = 0;
  ------------------
  |  Branch (25:9): [True: 0, False: 29]
  ------------------
   26|       |
   27|     29|    const uint8_t *config = config_size ? &data[4] : NULL;
  ------------------
  |  Branch (27:29): [True: 27, False: 2]
  ------------------
   28|     29|    const uint8_t *payload = &data[4 + config_size];
   29|     29|    size_t payload_size = size - (4 + config_size);
   30|       |
   31|     29|    if (type == 0) {
  ------------------
  |  Branch (31:9): [True: 4, False: 25]
  ------------------
   32|      4|#ifndef GPAC_DISABLE_BIFS
   33|      4|        GF_BifsDecoder *dec = gf_bifs_decoder_new(sg, GF_FALSE);
   34|      4|        if (dec) {
  ------------------
  |  Branch (34:13): [True: 4, False: 0]
  ------------------
   35|      4|            if (config_size) {
  ------------------
  |  Branch (35:17): [True: 3, False: 1]
  ------------------
   36|      3|                gf_bifs_decoder_configure_stream(dec, es_id, (uint8_t *)config, config_size, GF_CODECID_BIFS);
   37|      3|            }
   38|      4|            gf_bifs_decode_au(dec, es_id, payload, payload_size, 0);
   39|      4|            gf_bifs_decoder_del(dec);
   40|      4|        }
   41|      4|#endif
   42|     25|    } else {
   43|     25|#ifndef GPAC_DISABLE_LASER
   44|     25|        GF_LASeRCodec *dec = gf_laser_decoder_new(sg);
   45|     25|        if (dec) {
  ------------------
  |  Branch (45:13): [True: 25, False: 0]
  ------------------
   46|     25|            if (config_size) {
  ------------------
  |  Branch (46:17): [True: 24, False: 1]
  ------------------
   47|     24|                gf_laser_decoder_configure_stream(dec, es_id, (uint8_t *)config, config_size);
   48|     24|            }
   49|     25|            gf_laser_decode_au(dec, es_id, payload, payload_size);
   50|     25|            gf_laser_decoder_del(dec);
   51|     25|        }
   52|     25|#endif
   53|     25|    }
   54|       |
   55|     29|    gf_sg_del(sg);
   56|       |
   57|     29|    return 0;
   58|     29|}

