@@ -1228,17 +1228,31 @@ sv_tlv_find_tag(const uint8_t *tlv_data, size_t tlv_data_size, sv_tlv_tag_t tag,
12281228 return NULL ;
12291229}
12301230
1231- bool
1232- sv_tlv_find_and_decode_optional_tags (signed_video_t * self ,
1231+ static bool
1232+ tag_is_present (sv_tlv_tag_t tag , const sv_tlv_tag_t * tags , size_t num_of_tags )
1233+ {
1234+ for (size_t i = 0 ; i < num_of_tags ; i ++ ) {
1235+ if (tag == tags [i ]) {
1236+ return true;
1237+ }
1238+ }
1239+
1240+ return false;
1241+ }
1242+
1243+ static bool
1244+ sv_tlv_find_and_decode_tags (signed_video_t * self ,
12331245 const uint8_t * tlv_data ,
1234- size_t tlv_data_size )
1246+ size_t tlv_data_size ,
1247+ const sv_tlv_tag_t * tags ,
1248+ size_t num_of_tags )
12351249{
12361250 const uint8_t * tlv_data_ptr = tlv_data ;
12371251
12381252 if (!self || !tlv_data || tlv_data_size == 0 ) return false;
12391253
12401254 svrc_t status = SV_UNKNOWN_FAILURE ;
1241- bool optional_tags_decoded = false ;
1255+ int decoded_tags = 0 ;
12421256 while (tlv_data_ptr < tlv_data + tlv_data_size ) {
12431257 size_t tlv_header_size = 0 ;
12441258 size_t length = 0 ;
@@ -1249,19 +1263,30 @@ sv_tlv_find_and_decode_optional_tags(signed_video_t *self,
12491263 break ;
12501264 }
12511265 tlv_data_ptr += tlv_header_size ;
1252- if (! tlv_tuples [ this_tag ]. is_always_present ) {
1266+ if (tag_is_present ( this_tag , tags , num_of_tags ) ) {
12531267 sv_tlv_decoder_t decoder = get_decoder (this_tag );
12541268 status = decoder (self , tlv_data_ptr , length );
12551269 if (status != SV_OK ) {
12561270 DEBUG_LOG ("Could not decode tlv values" );
12571271 break ;
12581272 }
1259- optional_tags_decoded = true ;
1273+ decoded_tags ++ ;
12601274 }
12611275 tlv_data_ptr += length ;
12621276 }
12631277
1264- return optional_tags_decoded ;
1278+ return decoded_tags > 0 ;
1279+ }
1280+
1281+ bool
1282+ sv_tlv_find_and_decode_optional_tags (signed_video_t * self ,
1283+ const uint8_t * tlv_data ,
1284+ size_t tlv_data_size )
1285+ {
1286+ size_t num_of_tags = 0 ;
1287+ const sv_tlv_tag_t * optional_tags = sv_get_optional_tags (& num_of_tags );
1288+
1289+ return sv_tlv_find_and_decode_tags (self , tlv_data , tlv_data_size , optional_tags , num_of_tags );
12651290}
12661291
12671292const sv_tlv_tag_t *
0 commit comments