Commit 3e5f9c61 authored by vaclav's avatar vaclav
Browse files

differentiate OBJ_EDITING_EXAMPLE and API support

parent 979318d7
Loading
Loading
Loading
Loading
+50 −39
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ static int16_t app_own_random( int16_t *seed );
static IVAS_DEC_FORCED_REND_MODE parseForcedRendModeDec( char *forcedRendModeChar );
#endif
#ifdef OBJ_EDITING_EXAMPLE
static ivas_error do_object_editing( IVAS_DEC_HANDLE hIvasDec );
static void do_object_editing( IVAS_EDITABLE_PARAMETERS *editableParameters );
#endif


@@ -2463,15 +2463,29 @@ static ivas_error decodeG192(
                }

#ifdef OBJ_EDITING_API
                /* Object metadata editing */
                if ( arg.objEditEnabled )
                {
                    /* Do object metadata editing here */
#ifdef OBJ_EDITING_EXAMPLE
                    if ( ( error = do_object_editing( hIvasDec ) ) != IVAS_ERR_OK )
                    IVAS_EDITABLE_PARAMETERS editableParameters;

                    /* get object parameters */
                    if ( ( error = IVAS_DEC_GetEditableParameters( hIvasDec, &editableParameters ) ) != IVAS_ERR_OK )
                    {
                        goto cleanup;
                        fprintf( stderr, "\nError: could not get the editable parameters: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
                        return error;
                    }

                    /* Do object metadata editing here ... */
#ifdef OBJ_EDITING_EXAMPLE
                    do_object_editing( &editableParameters );

#endif
                    /* set new object parameters */
                    if ( ( error = IVAS_DEC_SetEditableParameters( hIvasDec, editableParameters ) ) != IVAS_ERR_OK )
                    {
                        fprintf( stderr, "\nError: could not set the editable parameters: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
                        return error;
                    }
                }

                /* Do the final preparations needed for rendering */
@@ -3339,14 +3353,29 @@ static ivas_error decodeVoIP(
            }

#ifdef OBJ_EDITING_API
            /* Object metadata editing */
            if ( parameterAvailableForEditing == true ) // VE: harmonize it with decodeG192()
            {
#ifdef OBJ_EDITING_EXAMPLE
                if ( ( error = do_object_editing( hIvasDec ) ) != IVAS_ERR_OK )
                IVAS_EDITABLE_PARAMETERS editableParameters;

                /* get object parameters */
                if ( ( error = IVAS_DEC_GetEditableParameters( hIvasDec, &editableParameters ) ) != IVAS_ERR_OK )
                {
                    goto cleanup;
                    fprintf( stderr, "\nError: could not get the editable parameters: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
                    return error;
                }

                /* Do object metadata editing here ... */
#ifdef OBJ_EDITING_EXAMPLE
                do_object_editing( &editableParameters );

#endif
                /* set new object parameters */
                if ( ( error = IVAS_DEC_SetEditableParameters( hIvasDec, editableParameters ) ) != IVAS_ERR_OK )
                {
                    fprintf( stderr, "\nError: could not set the editable parameters: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
                    return error;
                }
            }
        } /* while ( nSamplesRendered < nOutSamples ) */
#endif
@@ -3637,33 +3666,21 @@ cleanup:
/*---------------------------------------------------------------------*
 * do_object_editing()
 *
 * Example function of how to edit objects metadata
 * Example function to edit objects parameters
 *---------------------------------------------------------------------*/

static ivas_error do_object_editing(
    IVAS_DEC_HANDLE hIvasDec )
{
    IVAS_EDITABLE_PARAMETERS editableParameters;
    ivas_error error;

    /* get object parameters */
    if ( ( error = IVAS_DEC_GetEditableParameters( hIvasDec, &editableParameters ) ) != IVAS_ERR_OK )
static void do_object_editing(
    IVAS_EDITABLE_PARAMETERS *editableParameters )
{
        fprintf( stderr, "\nError: could not get the editable parameters: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
        return error;
    }

    /* edit object parameters...*/

    /* put the objects equally spaced at the horizontal plane */
    /* and play a little bit with the gains... */
    int16_t obj_idx, non_diegetic_obj_idx;
    int16_t num_nondiegetic_objects;

    num_nondiegetic_objects = 0;
    for ( obj_idx = 0; obj_idx < editableParameters.num_obj; obj_idx++ )
    for ( obj_idx = 0; obj_idx < editableParameters->num_obj; obj_idx++ )
    {
        if ( !editableParameters.ism_metadata[obj_idx].non_diegetic_flag )
        if ( !editableParameters->ism_metadata[obj_idx].non_diegetic_flag )
        {
            num_nondiegetic_objects++;
        }
@@ -3674,33 +3691,27 @@ static ivas_error do_object_editing(
        float start_angle, angle_inc;
        angle_inc = 360.0f / (float) num_nondiegetic_objects;
        start_angle = angle_inc / 2.0f;
        for ( obj_idx = 0, non_diegetic_obj_idx = 0; obj_idx < editableParameters.num_obj; obj_idx++ )
        for ( obj_idx = 0, non_diegetic_obj_idx = 0; obj_idx < editableParameters->num_obj; obj_idx++ )
        {
            if ( !editableParameters.ism_metadata[obj_idx].non_diegetic_flag )
            if ( !editableParameters->ism_metadata[obj_idx].non_diegetic_flag )
            {
                editableParameters.ism_metadata[obj_idx].elevation = 0.0f;
                editableParameters.ism_metadata[obj_idx].azimuth = start_angle + (float) non_diegetic_obj_idx * angle_inc;
                editableParameters->ism_metadata[obj_idx].elevation = 0.0f;
                editableParameters->ism_metadata[obj_idx].azimuth = start_angle + (float) non_diegetic_obj_idx * angle_inc;
                non_diegetic_obj_idx++;
            }
        }
    }

    /* breakover object gains */
    for ( obj_idx = 0; obj_idx < editableParameters.num_obj; obj_idx++ )
    for ( obj_idx = 0; obj_idx < editableParameters->num_obj; obj_idx++ )
    {
        editableParameters.ism_metadata[obj_idx].gain = 0.5f + (float) ( ( frame + obj_idx * 50 ) % 250 ) / 250.0f;
        editableParameters->ism_metadata[obj_idx].gain = 0.5f + (float) ( ( frame + obj_idx * 50 ) % 250 ) / 250.0f;
    }

    editableParameters.gain_bed = 0.5f;
    editableParameters->gain_bed = 0.5f;

    /* set new object parameters */
    if ( ( error = IVAS_DEC_SetEditableParameters( hIvasDec, editableParameters ) ) != IVAS_ERR_OK )
    {
        fprintf( stderr, "\nError: could not set the editable parameters: %s\n\n", IVAS_DEC_GetErrorMessage( error ) );
        return error;
    }

    return IVAS_ERR_OK;
    return;
}

#endif