Skip to content

Extended metadata issues

I came across several issues in contribution 17 on extended metadata in ISM format:

  1. In IsmFileReader_readNextFrame():
  • I think the following verification is still valuable:
#ifndef TD5
    if ( char_ptr != NULL )
    {
        /* Too many values provided in one line */
        return IVAS_ERR_ISM_FILE_READER_INVALID_METADATA_FORMAT;
    }
#endif
  • What are the expected values for the radius? Could you review/amend the following condition, please?
if ( ismMetadata->radius < 0 ) // Ivas_fmToDo: to be reviewed
  1. Metadata default value for radius seems to be inconsistent between encoder and decoder:
 meta_prm_default[NUM_ISM_METADATA_PER_LINE] = { 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f };

in IsmFileReader_readNextFrame() vs.

    if ( hIsmMeta == NULL || zero_flag )
    {
        metadata->azimuth = 0.f;
        metadata->elevation = 0.f;
        metadata->radius = 0.f;
        metadata->spread = 0.f;
        metadata->gainFactor = 1.f;
    }

in IVAS_DEC_GetObjectMetadata(). Moreover, yaw and pitch are missing in this if() branch.

  1. In renderer.c, there is
if ( ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ) ) != IVAS_ERR_OK ) && ( IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ) != IVAS_ERR_INVALID_OUTPUT_FORMAT ) ) // VE: TBC

I would avoid calling of IVAS_REND_SetHeadRotation() twice and rather do sth. like

if ( ( ( error = IVAS_REND_SetHeadRotation( hIvasRend, NULL, NULL ) ) != IVAS_ERR_OK ) 
{
   if ( error != IVAS_ERR_INVALID_OUTPUT_FORMAT )
   {
      ... 
   }
  1. In ivas_cnst.c, there is
    IND_ISM_EXTENDED_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS,
    IND_ISM_METADATA_FLAG = IND_ISM_EXTENDED_FLAG + MAX_NUM_OBJECTS, /* EN2VE: Is this not supposed to be in the loop part below since it is one per ISm? */

In the current framework, ISM metadata flag per object is written after the signaling before the metadata writing in a loop, so it is correct. If we want to write the flag in a loop, then the decoding order would need to be updated as well.

However, I understand that IND_ISM_METADATA_FLAG is just one bit per frame, so it is sufficient to define it simply

IND_ISM_EXTENDED_FLAG = IND_ISM_NUM_OBJECTS + MAX_NUM_OBJECTS,
IND_ISM_METADATA_FLAG,
  1. Others
  • readme.txt should be updated to take into account the new metadata.
  • the parameter name hIsmMetaData->angle is misleading to me, could we use a better name like last_direction, last_angles, etc.?
  • was it tested for bit-rate switching (low bitrate vs. high bitrate)?
Edited by norvell