diff --git a/lib_dec/ivas_binRenderer_internal.c b/lib_dec/ivas_binRenderer_internal.c index 0e95aa2af47f0ca81d5f4011204a97dae15722e5..b6a7eec20ac6f83d91f1e83a1aadcdcf05f49d6b 100644 --- a/lib_dec/ivas_binRenderer_internal.c +++ b/lib_dec/ivas_binRenderer_internal.c @@ -1085,6 +1085,7 @@ ivas_error ivas_rend_openCldfbRend( hBinRenderer->conv_band = convBand; } hBinRenderer->hInputSetup->is_loudspeaker_setup = 0; + hBinRenderer->hInputSetup->output_config = in_config; getAudioConfigNumChannels( inConfig, &hBinRenderer->hInputSetup->nchan_out_woLFE ); if ( ( out_config == AUDIO_CONFIG_BINAURAL_SPLIT_CODED ) || ( out_config == AUDIO_CONFIG_BINAURAL_SPLIT_PCM ) ) diff --git a/lib_rend/lib_rend.c b/lib_rend/lib_rend.c index 8a023a108782e0d9103f393370c2cdb050819b85..147c5e2127db9ac05bbca182ed0fedb287e86a11 100644 --- a/lib_rend/lib_rend.c +++ b/lib_rend/lib_rend.c @@ -2215,12 +2215,12 @@ static ivas_error initMcBinauralRendering( /* Needs optimization, see issue 513 */ // bool initTDRend; // initTDRend = false; - //#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG + // #ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG // if ( ( outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) && // ( outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR ) && ( outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB ) ) - //#else + // #else // if ( outConfig != IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM ) - //#endif + // #endif // { // if ( inConfig == IVAS_REND_AUDIO_CONFIG_LS_CUSTOM ) // { @@ -4117,6 +4117,47 @@ static ivas_error findFreeInputSlot( } #ifdef SPLIT_REND_WITH_HEAD_ROT +static int16_t getCldfbRendFlag( + IVAS_REND_HANDLE hIvasRend, /* i: Renderer handle */ + IVAS_REND_AudioConfigType new_config ) +{ + int16_t i; + int16_t numMasaInputs = 0, numSbaInputs = 0, numIsmInputs = 0, numMcInputs = 0; + int16_t isCldfbRend; + + isCldfbRend = 0; + if ( hIvasRend->hRendererConfig != NULL ) + { + for ( i = 0; i < RENDERER_MAX_MASA_INPUTS; ++i ) + { + numMasaInputs += ( hIvasRend->inputsMasa[i].base.inConfig == IVAS_REND_AUDIO_CONFIG_UNKNOWN && new_config != IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) ? 0 : 1; + } + for ( i = 0; i < RENDERER_MAX_SBA_INPUTS; ++i ) + { + numSbaInputs += ( hIvasRend->inputsSba[i].base.inConfig == IVAS_REND_AUDIO_CONFIG_UNKNOWN && new_config != IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS ) ? 0 : 1; + } + for ( i = 0; i < RENDERER_MAX_ISM_INPUTS; ++i ) + { + numIsmInputs += ( hIvasRend->inputsIsm[i].base.inConfig == IVAS_REND_AUDIO_CONFIG_UNKNOWN && new_config != IVAS_REND_AUDIO_CONFIG_TYPE_OBJECT_BASED ) ? 0 : 1; + } + for ( i = 0; i < RENDERER_MAX_MC_INPUTS; ++i ) + { + numMcInputs += ( hIvasRend->inputsMc[i].base.inConfig == IVAS_REND_AUDIO_CONFIG_UNKNOWN && new_config != IVAS_REND_AUDIO_CONFIG_TYPE_CHANNEL_BASED ) ? 0 : 1; + } + + if ( numIsmInputs > 0 || numMcInputs > 0 ) + { + isCldfbRend = 0; + } + else if ( ( numMasaInputs > 0 ) || + ( numSbaInputs > 0 && hIvasRend->hRendererConfig->split_rend_config.rendererSelection == IVAS_SPLIT_REND_RENDERER_SELECTION_FASTCONV ) ) + { + isCldfbRend = 1; + } + } + + return isCldfbRend; +} static void closeSplitRend( SPLIT_REND_WRAPPER *pSplitRendWrapper, IVAS_REND_AudioBuffer *pSplitRendEncBuffer ) { ivas_split_renderer_close( pSplitRendWrapper ); @@ -4159,12 +4200,8 @@ ivas_error IVAS_REND_AddInput( if ( hIvasRend->splitRendEncBuffer.data == NULL && hIvasRend->hRendererConfig != NULL ) { int16_t cldfb_in; - cldfb_in = 0; - if ( ( getAudioConfigType( inConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_MASA ) || - ( getAudioConfigType( inConfig ) == IVAS_REND_AUDIO_CONFIG_TYPE_AMBISONICS && hIvasRend->hRendererConfig->split_rend_config.rendererSelection == IVAS_SPLIT_REND_RENDERER_SELECTION_FASTCONV ) ) - { - cldfb_in = 1; - } + cldfb_in = getCldfbRendFlag( hIvasRend, getAudioConfigType( inConfig ) ); + #ifdef FIX_658_SPLIT_REND_MASA ivas_split_rend_choose_default_codec( &hIvasRend->hRendererConfig->split_rend_config.codec, ( cldfb_in == 0 ), @@ -5029,10 +5066,12 @@ int16_t IVAS_REND_FeedRenderConfig( if ( hIvasRend->splitRendEncBuffer.data != NULL && hIvasRend->hRendererConfig != NULL ) #endif { + int16_t cldfb_in; + cldfb_in = getCldfbRendFlag( hIvasRend, IVAS_REND_AUDIO_CONFIG_TYPE_UNKNOWN ); closeSplitRend( &hIvasRend->splitRendWrapper, &hIvasRend->splitRendEncBuffer ); - /* TODO : Do not hard code TDin to 1 here*/ + ivas_split_rend_choose_default_codec( &hIvasRend->hRendererConfig->split_rend_config.codec, - 1, + ( cldfb_in == 0 ), hIvasRend->outputConfig == IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM ); if ( ( error = initSplitRend( &hIvasRend->splitRendWrapper, &hIvasRend->splitRendEncBuffer, @@ -5040,7 +5079,7 @@ int16_t IVAS_REND_FeedRenderConfig( hIvasRend->headRotData, hIvasRend->sampleRateOut, hIvasRend->outputConfig, - 0 ) ) != IVAS_ERR_OK ) + cldfb_in ) ) != IVAS_ERR_OK ) { return error; } @@ -7280,7 +7319,7 @@ static ivas_error renderSplitBinauralWithPostRot( { if ( bits.pose_correction == IVAS_SPLIT_REND_POSE_CORRECTION_MODE_CLDFB ) { - if ( !SplitRendBFI ) /* ToDo: this is always true */ + if ( !SplitRendBFI ) { ivas_splitBinPostRendMdDec( &bits, @@ -8233,18 +8272,17 @@ static ivas_error renderInputMasa( ); break; /* ToDo */ - //#ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG - // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR: - // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: - //#else - // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: - //#endif - // renderMasaToBinauralRoom( masaInput, outConfig, outAudio ); - // break; + // #ifdef FIX_196_REFACTOR_RENDERER_OUTPUT_CONFIG + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_IR: + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM_REVERB: + // #else + // case IVAS_REND_AUDIO_CONFIG_BINAURAL_ROOM: + // #endif + // renderMasaToBinauralRoom( masaInput, outConfig, outAudio ); + // break; #ifdef SPLIT_REND_WITH_HEAD_ROT_PARAMBIN case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_CODED: case IVAS_REND_AUDIO_CONFIG_BINAURAL_SPLIT_PCM: - /* TODO: implement */ renderMasaToBinaural( masaInput, outAudio #ifdef SPLIT_REND_WITH_HEAD_ROT , diff --git a/lib_util/split_render_file_read_write.c b/lib_util/split_render_file_read_write.c index bb75f9fa9d74f3badd6be02b5badf87b9c53f506..9c69b3de1dc60d7da5f6e698e52b2fef5de57b9a 100644 --- a/lib_util/split_render_file_read_write.c +++ b/lib_util/split_render_file_read_write.c @@ -160,6 +160,7 @@ ivas_error split_rend_write_bitstream_to_file( { char header[SPLIT_RENDERER_FRAME_HEADER_LEN] = "SPLIT_FRAME"; size_t header_len, i, num_bytes; + uint8_t version = 0; if ( hSplitRendFileReadWrite == NULL ) { @@ -182,6 +183,12 @@ ivas_error split_rend_write_bitstream_to_file( } } + /* Write versioning signalling */ + if ( fwrite( &version, 1, 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + /* Write codec signalling */ if ( fwrite( &codec, sizeof( codec ), 1, hSplitRendFileReadWrite->file ) != 1 ) { @@ -222,6 +229,7 @@ ivas_error split_rend_read_bits_from_file( char header[SPLIT_RENDERER_FRAME_HEADER_LEN] = "SPLIT_FRAME"; char header_read[SPLIT_RENDERER_FRAME_HEADER_LEN]; int32_t header_len, i, num_bytes, bit_len = 0; + uint8_t version; if ( hSplitRendFileReadWrite == NULL ) { @@ -249,6 +257,17 @@ ivas_error split_rend_read_bits_from_file( return IVAS_ERR_FAILED_FILE_READ; } + /* read versioning signalling */ + if ( fread( &version, 1, 1, hSplitRendFileReadWrite->file ) != 1 ) + { + return IVAS_ERR_FAILED_FILE_WRITE; + } + if ( version != 0 ) + { + fprintf( stderr, "Error bitstream version mismatch\n" ); + return IVAS_ERR_FAILED_FILE_READ; + } + /* read codec signalling */ if ( fread( codec, sizeof( *codec ), 1, hSplitRendFileReadWrite->file ) != 1 ) { diff --git a/scripts/trajectories/rotate_euler_quaternion_5s.csv b/scripts/trajectories/rotate_euler_quaternion_5s.csv new file mode 100644 index 0000000000000000000000000000000000000000..0052e3d7c7a49f78f8880e203ee2fd99b4c19f29 --- /dev/null +++ b/scripts/trajectories/rotate_euler_quaternion_5s.csv @@ -0,0 +1,1000 @@ +-3,360,0,0 +-3,359.1,0,0 +-3,358.2,0,0 +-3,357.3,0,0 +-3,356.4,0,0 +-3,355.5,0,0 +-3,354.6,0,0 +-3,353.7,0,0 +-3,352.8,0,0 +-3,351.9,0,0 +-3,351,0,0 +-3,350.1,0,0 +-3,349.2,0,0 +-3,348.3,0,0 +-3,347.4,0,0 +-3,346.5,0,0 +-3,345.6,0,0 +-3,344.7,0,0 +-3,343.8,0,0 +-3,342.9,0,0 +-3,342,0,0 +-3,341.1,0,0 +-3,340.2,0,0 +-3,339.2,0,0 +-3,338.3,0,0 +-3,337.4,0,0 +-3,336.5,0,0 +-3,335.6,0,0 +-3,334.7,0,0 +-3,333.8,0,0 +-3,332.9,0,0 +-3,332,0,0 +-3,331.1,0,0 +-3,330.2,0,0 +-3,329.3,0,0 +-3,328.4,0,0 +-3,327.5,0,0 +-3,326.6,0,0 +-3,325.7,0,0 +-3,324.8,0,0 +-3,323.9,0,0 +-3,323,0,0 +-3,322.1,0,0 +-3,321.2,0,0 +-3,320.3,0,0 +-3,319.4,0,0 +-3,318.5,0,0 +-3,317.6,0,0 +-3,316.7,0,0 +-3,315.8,0,0 +-3,314.9,0,0 +-3,314,0,0 +-3,313.1,0,0 +-3,312.2,0,0 +-3,311.3,0,0 +-3,310.4,0,0 +-3,309.5,0,0 +-3,308.6,0,0 +-3,307.7,0,0 +-3,306.8,0,0 +-3,305.9,0,0 +-3,305,0,0 +-3,304.1,0,0 +-3,303.2,0,0 +-3,302.3,0,0 +-3,301.4,0,0 +-3,300.5,0,0 +-3,299.5,0,0 +-3,298.6,0,0 +-3,297.7,0,0 +-3,296.8,0,0 +-3,295.9,0,0 +-3,295,0,0 +-3,294.1,0,0 +-3,293.2,0,0 +-3,292.3,0,0 +-3,291.4,0,0 +-3,290.5,0,0 +-3,289.6,0,0 +-3,288.7,0,0 +-3,287.8,0,0 +-3,286.9,0,0 +-3,286,0,0 +-3,285.1,0,0 +-3,284.2,0,0 +-3,283.3,0,0 +-3,282.4,0,0 +-3,281.5,0,0 +-3,280.6,0,0 +-3,279.7,0,0 +-3,278.8,0,0 +-3,277.9,0,0 +-3,277,0,0 +-3,276.1,0,0 +-3,275.2,0,0 +-3,274.3,0,0 +-3,273.4,0,0 +-3,272.5,0,0 +-3,271.6,0,0 +-3,270.7,0,0 +-3,269.8,0,0 +-3,268.9,0,0 +-3,268,0,0 +-3,267.1,0,0 +-3,266.2,0,0 +-3,265.3,0,0 +-3,264.4,0,0 +-3,263.5,0,0 +-3,262.6,0,0 +-3,261.7,0,0 +-3,260.8,0,0 +-3,259.8,0,0 +-3,258.9,0,0 +-3,258,0,0 +-3,257.1,0,0 +-3,256.2,0,0 +-3,255.3,0,0 +-3,254.4,0,0 +-3,253.5,0,0 +-3,252.6,0,0 +-3,251.7,0,0 +-3,250.8,0,0 +-3,249.9,0,0 +-3,249,0,0 +-3,248.1,0,0 +-3,247.2,0,0 +-3,246.3,0,0 +-3,245.4,0,0 +-3,244.5,0,0 +-3,243.6,0,0 +-3,242.7,0,0 +-3,241.8,0,0 +-3,240.9,0,0 +-3,240,0,0 +-3,239.1,0,0 +-3,238.2,0,0 +-3,237.3,0,0 +-3,236.4,0,0 +-3,235.5,0,0 +-3,234.6,0,0 +-3,233.7,0,0 +-3,232.8,0,0 +-3,231.9,0,0 +-3,231,0,0 +-3,230.1,0,0 +-3,229.2,0,0 +-3,228.3,0,0 +-3,227.4,0,0 +-3,226.5,0,0 +-3,225.6,0,0 +-3,224.7,0,0 +-3,223.8,0,0 +-3,222.9,0,0 +-3,222,0,0 +-3,221.1,0,0 +-3,220.2,0,0 +-3,219.2,0,0 +-3,218.3,0,0 +-3,217.4,0,0 +-3,216.5,0,0 +-3,215.6,0,0 +-3,214.7,0,0 +-3,213.8,0,0 +-3,212.9,0,0 +-3,212,0,0 +-3,211.1,0,0 +-3,210.2,0,0 +-3,209.3,0,0 +-3,208.4,0,0 +-3,207.5,0,0 +-3,206.6,0,0 +-3,205.7,0,0 +-3,204.8,0,0 +-3,203.9,0,0 +-3,203,0,0 +-3,202.1,0,0 +-3,201.2,0,0 +-3,200.3,0,0 +-3,199.4,0,0 +-3,198.5,0,0 +-3,197.6,0,0 +-3,196.7,0,0 +-3,195.8,0,0 +-3,194.9,0,0 +-3,194,0,0 +-3,193.1,0,0 +-3,192.2,0,0 +-3,191.3,0,0 +-3,190.4,0,0 +-3,189.5,0,0 +-3,188.6,0,0 +-3,187.7,0,0 +-3,186.8,0,0 +-3,185.9,0,0 +-3,185,0,0 +-3,184.1,0,0 +-3,183.2,0,0 +-3,182.3,0,0 +-3,181.4,0,0 +-3,180.5,0,0 +-3,179.5,-90,0 +-3,178.6,-89.5,0 +-3,177.7,-89.1,0 +-3,176.8,-88.6,0 +-3,175.9,-88.2,0 +-3,175,-87.7,0 +-3,174.1,-87.3,0 +-3,173.2,-86.8,0 +-3,172.3,-86.4,0 +-3,171.4,-85.9,0 +-3,170.5,-85.5,0 +-3,169.6,-85,0 +-3,168.7,-84.6,0 +-3,167.8,-84.1,0 +-3,166.9,-83.7,0 +-3,166,-83.2,0 +-3,165.1,-82.8,0 +-3,164.2,-82.3,0 +-3,163.3,-81.9,0 +-3,162.4,-81.4,0 +-3,161.5,-81,0 +-3,160.6,-80.5,0 +-3,159.7,-80.1,0 +-3,158.8,-79.6,0 +-3,157.9,-79.1,0 +-3,157,-78.7,0 +-3,156.1,-78.2,0 +-3,155.2,-77.8,0 +-3,154.3,-77.3,0 +-3,153.4,-76.9,0 +-3,152.5,-76.4,0 +-3,151.6,-76,0 +-3,150.7,-75.5,0 +-3,149.8,-75.1,0 +-3,148.9,-74.6,0 +-3,148,-74.2,0 +-3,147.1,-73.7,0 +-3,146.2,-73.3,0 +-3,145.3,-72.8,0 +-3,144.4,-72.4,0 +-3,143.5,-71.9,0 +-3,142.6,-71.5,0 +-3,141.7,-71,0 +-3,140.8,-70.6,0 +-3,139.8,-70.1,0 +-3,138.9,-69.6,0 +-3,138,-69.2,0 +-3,137.1,-68.7,0 +-3,136.2,-68.3,0 +-3,135.3,-67.8,0 +-3,134.4,-67.4,0 +-3,133.5,-66.9,0 +-3,132.6,-66.5,0 +-3,131.7,-66,0 +-3,130.8,-65.6,0 +-3,129.9,-65.1,0 +-3,129,-64.7,0 +-3,128.1,-64.2,0 +-3,127.2,-63.8,0 +-3,126.3,-63.3,0 +-3,125.4,-62.9,0 +-3,124.5,-62.4,0 +-3,123.6,-62,0 +-3,122.7,-61.5,0 +-3,121.8,-61.1,0 +-3,120.9,-60.6,0 +-3,120,-60.2,0 +-3,119.1,-59.7,0 +-3,118.2,-59.2,0 +-3,117.3,-58.8,0 +-3,116.4,-58.3,0 +-3,115.5,-57.9,0 +-3,114.6,-57.4,0 +-3,113.7,-57,0 +-3,112.8,-56.5,0 +-3,111.9,-56.1,0 +-3,111,-55.6,0 +-3,110.1,-55.2,0 +-3,109.2,-54.7,0 +-3,108.3,-54.3,0 +-3,107.4,-53.8,0 +-3,106.5,-53.4,0 +-3,105.6,-52.9,0 +-3,104.7,-52.5,0 +-3,103.8,-52,0 +-3,102.9,-51.6,0 +-3,102,-51.1,0 +-3,101.1,-50.7,0 +-3,100.2,-50.2,0 +-3,99.2,-49.7,0 +-3,98.3,-49.3,0 +-3,97.4,-48.8,0 +-3,96.5,-48.4,0 +-3,95.6,-47.9,0 +-3,94.7,-47.5,0 +-3,93.8,-47,0 +-3,92.9,-46.6,0 +-3,92,-46.1,0 +-3,91.1,-45.7,0 +-3,90.2,-45.2,0 +-3,89.3,-44.8,90 +-3,88.4,-44.3,89.1 +-3,87.5,-43.9,88.2 +-3,86.6,-43.4,87.3 +-3,85.7,-43,86.4 +-3,84.8,-42.5,85.5 +-3,83.9,-42.1,84.5 +-3,83,-41.6,83.6 +-3,82.1,-41.2,82.7 +-3,81.2,-40.7,81.8 +-3,80.3,-40.3,80.9 +-3,79.4,-39.8,80 +-3,78.5,-39.3,79.1 +-3,77.6,-38.9,78.2 +-3,76.7,-38.4,77.3 +-3,75.8,-38,76.4 +-3,74.9,-37.5,75.5 +-3,74,-37.1,74.5 +-3,73.1,-36.6,73.6 +-3,72.2,-36.2,72.7 +-3,71.3,-35.7,71.8 +-3,70.4,-35.3,70.9 +-3,69.5,-34.8,70 +-3,68.6,-34.4,69.1 +-3,67.7,-33.9,68.2 +-3,66.8,-33.5,67.3 +-3,65.9,-33,66.4 +-3,65,-32.6,65.5 +-3,64.1,-32.1,64.5 +-3,63.2,-31.7,63.6 +-3,62.3,-31.2,62.7 +-3,61.4,-30.8,61.8 +-3,60.5,-30.3,60.9 +-3,59.5,-29.8,60 +-3,58.6,-29.4,59.1 +-3,57.7,-28.9,58.2 +-3,56.8,-28.5,57.3 +-3,55.9,-28,56.4 +-3,55,-27.6,55.5 +-3,54.1,-27.1,54.5 +-3,53.2,-26.7,53.6 +-3,52.3,-26.2,52.7 +-3,51.4,-25.8,51.8 +-3,50.5,-25.3,50.9 +-3,49.6,-24.9,50 +-3,48.7,-24.4,49.1 +-3,47.8,-24,48.2 +-3,46.9,-23.5,47.3 +-3,46,-23.1,46.4 +-3,45.1,-22.6,45.5 +-3,44.2,-22.2,44.5 +-3,43.3,-21.7,43.6 +-3,42.4,-21.3,42.7 +-3,41.5,-20.8,41.8 +-3,40.6,-20.4,40.9 +-3,39.7,-19.9,40 +-3,38.8,-19.4,39.1 +-3,37.9,-19,38.2 +-3,37,-18.5,37.3 +-3,36.1,-18.1,36.4 +-3,35.2,-17.6,35.5 +-3,34.3,-17.2,34.5 +-3,33.4,-16.7,33.6 +-3,32.5,-16.3,32.7 +-3,31.6,-15.8,31.8 +-3,30.7,-15.4,30.9 +-3,29.8,-14.9,30 +-3,28.9,-14.5,29.1 +-3,28,-14,28.2 +-3,27.1,-13.6,27.3 +-3,26.2,-13.1,26.4 +-3,25.3,-12.7,25.5 +-3,24.4,-12.2,24.5 +-3,23.5,-11.8,23.6 +-3,22.6,-11.3,22.7 +-3,21.7,-10.9,21.8 +-3,20.8,-10.4,20.9 +-3,19.8,-9.9,20 +-3,18.9,-9.5,19.1 +-3,18,-9,18.2 +-3,17.1,-8.6,17.3 +-3,16.2,-8.1,16.4 +-3,15.3,-7.7,15.5 +-3,14.4,-7.2,14.5 +-3,13.5,-6.8,13.6 +-3,12.6,-6.3,12.7 +-3,11.7,-5.9,11.8 +-3,10.8,-5.4,10.9 +-3,9.9,-5,10 +-3,9,-4.5,9.1 +-3,8.1,-4.1,8.2 +-3,7.2,-3.6,7.3 +-3,6.3,-3.2,6.4 +-3,5.4,-2.7,5.5 +-3,4.5,-2.3,4.5 +-3,3.6,-1.8,3.6 +-3,2.7,-1.4,2.7 +-3,1.8,-0.9,1.8 +-3,0.9,-0.5,0.9 +-3,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +0.9,0,0,0.3 +0.9,0,0,0.3 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.8,0,0,0.5 +0.8,0,0,0.5 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.5,0,0,0.8 +0.5,0,0,0.8 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.3,0,0,0.9 +0.3,0,0,0.9 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,0.9 +0.3,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.8 +0.5,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.7,0,0,0.8 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.8,0,0,0.7 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.5 +0.8,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.3 +0.9,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0 +-3,0,0,0 +-3,0.9,-0.5,0.9 +-3,1.8,-0.9,1.8 +-3,2.7,-1.4,2.7 +-3,3.6,-1.8,3.6 +-3,4.5,-2.3,4.5 +-3,5.4,-2.7,5.5 +-3,6.3,-3.2,6.4 +-3,7.2,-3.6,7.3 +-3,8.1,-4.1,8.2 +-3,9,-4.5,9.1 +-3,9.9,-5,10 +-3,10.8,-5.4,10.9 +-3,11.7,-5.9,11.8 +-3,12.6,-6.3,12.7 +-3,13.5,-6.8,13.6 +-3,14.4,-7.2,14.5 +-3,15.3,-7.7,15.5 +-3,16.2,-8.1,16.4 +-3,17.1,-8.6,17.3 +-3,18,-9,18.2 +-3,18.9,-9.5,19.1 +-3,19.8,-9.9,20 +-3,20.8,-10.4,20.9 +-3,21.7,-10.9,21.8 +-3,22.6,-11.3,22.7 +-3,23.5,-11.8,23.6 +-3,24.4,-12.2,24.5 +-3,25.3,-12.7,25.5 +-3,26.2,-13.1,26.4 +-3,27.1,-13.6,27.3 +-3,28,-14,28.2 +-3,28.9,-14.5,29.1 +-3,29.8,-14.9,30 +-3,30.7,-15.4,30.9 +-3,31.6,-15.8,31.8 +-3,32.5,-16.3,32.7 +-3,33.4,-16.7,33.6 +-3,34.3,-17.2,34.5 +-3,35.2,-17.6,35.5 +-3,36.1,-18.1,36.4 +-3,37,-18.5,37.3 +-3,37.9,-19,38.2 +-3,38.8,-19.4,39.1 +-3,39.7,-19.9,40 +-3,40.6,-20.4,40.9 +-3,41.5,-20.8,41.8 +-3,42.4,-21.3,42.7 +-3,43.3,-21.7,43.6 +-3,44.2,-22.2,44.5 +-3,45.1,-22.6,45.5 +-3,46,-23.1,46.4 +-3,46.9,-23.5,47.3 +-3,47.8,-24,48.2 +-3,48.7,-24.4,49.1 +-3,49.6,-24.9,50 +-3,50.5,-25.3,50.9 +-3,51.4,-25.8,51.8 +-3,52.3,-26.2,52.7 +-3,53.2,-26.7,53.6 +-3,54.1,-27.1,54.5 +-3,55,-27.6,55.5 +-3,55.9,-28,56.4 +-3,56.8,-28.5,57.3 +-3,57.7,-28.9,58.2 +-3,58.6,-29.4,59.1 +-3,59.5,-29.8,60 +-3,60.5,-30.3,60.9 +-3,61.4,-30.8,61.8 +-3,62.3,-31.2,62.7 +-3,63.2,-31.7,63.6 +-3,64.1,-32.1,64.5 +-3,65,-32.6,65.5 +-3,65.9,-33,66.4 +-3,66.8,-33.5,67.3 +-3,67.7,-33.9,68.2 +-3,68.6,-34.4,69.1 +-3,69.5,-34.8,70 +-3,70.4,-35.3,70.9 +-3,71.3,-35.7,71.8 +-3,72.2,-36.2,72.7 +-3,73.1,-36.6,73.6 +-3,74,-37.1,74.5 +-3,74.9,-37.5,75.5 +-3,75.8,-38,76.4 +-3,76.7,-38.4,77.3 +-3,77.6,-38.9,78.2 +-3,78.5,-39.3,79.1 +-3,79.4,-39.8,80 +-3,80.3,-40.3,80.9 +-3,81.2,-40.7,81.8 +-3,82.1,-41.2,82.7 +-3,83,-41.6,83.6 +-3,83.9,-42.1,84.5 +-3,84.8,-42.5,85.5 +-3,85.7,-43,86.4 +-3,86.6,-43.4,87.3 +-3,87.5,-43.9,88.2 +-3,88.4,-44.3,89.1 +-3,89.3,-44.8,90 +-3,90.2,-45.2,0 +-3,91.1,-45.7,0 +-3,92,-46.1,0 +-3,92.9,-46.6,0 +-3,93.8,-47,0 +-3,94.7,-47.5,0 +-3,95.6,-47.9,0 +-3,96.5,-48.4,0 +-3,97.4,-48.8,0 +-3,98.3,-49.3,0 +-3,99.2,-49.7,0 +-3,100.2,-50.2,0 +-3,101.1,-50.7,0 +-3,102,-51.1,0 +-3,102.9,-51.6,0 +-3,103.8,-52,0 +-3,104.7,-52.5,0 +-3,105.6,-52.9,0 +-3,106.5,-53.4,0 +-3,107.4,-53.8,0 +-3,108.3,-54.3,0 +-3,109.2,-54.7,0 +-3,110.1,-55.2,0 +-3,111,-55.6,0 +-3,111.9,-56.1,0 +-3,112.8,-56.5,0 +-3,113.7,-57,0 +-3,114.6,-57.4,0 +-3,115.5,-57.9,0 +-3,116.4,-58.3,0 +-3,117.3,-58.8,0 +-3,118.2,-59.2,0 +-3,119.1,-59.7,0 +-3,120,-60.2,0 +-3,120.9,-60.6,0 +-3,121.8,-61.1,0 +-3,122.7,-61.5,0 +-3,123.6,-62,0 +-3,124.5,-62.4,0 +-3,125.4,-62.9,0 +-3,126.3,-63.3,0 +-3,127.2,-63.8,0 +-3,128.1,-64.2,0 +-3,129,-64.7,0 +-3,129.9,-65.1,0 +-3,130.8,-65.6,0 +-3,131.7,-66,0 +-3,132.6,-66.5,0 +-3,133.5,-66.9,0 +-3,134.4,-67.4,0 +-3,135.3,-67.8,0 +-3,136.2,-68.3,0 +-3,137.1,-68.7,0 +-3,138,-69.2,0 +-3,138.9,-69.6,0 +-3,139.8,-70.1,0 +-3,140.8,-70.6,0 +-3,141.7,-71,0 +-3,142.6,-71.5,0 +-3,143.5,-71.9,0 +-3,144.4,-72.4,0 +-3,145.3,-72.8,0 +-3,146.2,-73.3,0 +-3,147.1,-73.7,0 +-3,148,-74.2,0 +-3,148.9,-74.6,0 +-3,149.8,-75.1,0 +-3,150.7,-75.5,0 +-3,151.6,-76,0 +-3,152.5,-76.4,0 +-3,153.4,-76.9,0 +-3,154.3,-77.3,0 +-3,155.2,-77.8,0 +-3,156.1,-78.2,0 +-3,157,-78.7,0 +-3,157.9,-79.1,0 +-3,158.8,-79.6,0 +-3,159.7,-80.1,0 +-3,160.6,-80.5,0 +-3,161.5,-81,0 +-3,162.4,-81.4,0 +-3,163.3,-81.9,0 +-3,164.2,-82.3,0 +-3,165.1,-82.8,0 +-3,166,-83.2,0 +-3,166.9,-83.7,0 +-3,167.8,-84.1,0 +-3,168.7,-84.6,0 +-3,169.6,-85,0 +-3,170.5,-85.5,0 +-3,171.4,-85.9,0 +-3,172.3,-86.4,0 +-3,173.2,-86.8,0 +-3,174.1,-87.3,0 +-3,175,-87.7,0 +-3,175.9,-88.2,0 +-3,176.8,-88.6,0 +-3,177.7,-89.1,0 +-3,178.6,-89.5,0 +-3,179.5,-90,0 +-3,180.5,0,0 +-3,181.4,0,0 +-3,182.3,0,0 +-3,183.2,0,0 +-3,184.1,0,0 +-3,185,0,0 +-3,185.9,0,0 +-3,186.8,0,0 +-3,187.7,0,0 +-3,188.6,0,0 +-3,189.5,0,0 +-3,190.4,0,0 +-3,191.3,0,0 +-3,192.2,0,0 +-3,193.1,0,0 +-3,194,0,0 +-3,194.9,0,0 +-3,195.8,0,0 +-3,196.7,0,0 +-3,197.6,0,0 +-3,198.5,0,0 +-3,199.4,0,0 +-3,200.3,0,0 +-3,201.2,0,0 +-3,202.1,0,0 +-3,203,0,0 +-3,203.9,0,0 +-3,204.8,0,0 +-3,205.7,0,0 +-3,206.6,0,0 +-3,207.5,0,0 +-3,208.4,0,0 +-3,209.3,0,0 +-3,210.2,0,0 +-3,211.1,0,0 +-3,212,0,0 +-3,212.9,0,0 +-3,213.8,0,0 +-3,214.7,0,0 +-3,215.6,0,0 +-3,216.5,0,0 +-3,217.4,0,0 +-3,218.3,0,0 +-3,219.2,0,0 +-3,220.2,0,0 +-3,221.1,0,0 +-3,222,0,0 +-3,222.9,0,0 +-3,223.8,0,0 +-3,224.7,0,0 +-3,225.6,0,0 +-3,226.5,0,0 +-3,227.4,0,0 +-3,228.3,0,0 +-3,229.2,0,0 +-3,230.1,0,0 +-3,231,0,0 +-3,231.9,0,0 +-3,232.8,0,0 +-3,233.7,0,0 +-3,234.6,0,0 +-3,235.5,0,0 +-3,236.4,0,0 +-3,237.3,0,0 +-3,238.2,0,0 +-3,239.1,0,0 +-3,240,0,0 +-3,240.9,0,0 +-3,241.8,0,0 +-3,242.7,0,0 +-3,243.6,0,0 +-3,244.5,0,0 +-3,245.4,0,0 +-3,246.3,0,0 +-3,247.2,0,0 +-3,248.1,0,0 +-3,249,0,0 +-3,249.9,0,0 +-3,250.8,0,0 +-3,251.7,0,0 +-3,252.6,0,0 +-3,253.5,0,0 +-3,254.4,0,0 +-3,255.3,0,0 +-3,256.2,0,0 +-3,257.1,0,0 +-3,258,0,0 +-3,258.9,0,0 +-3,259.8,0,0 +-3,260.8,0,0 +-3,261.7,0,0 +-3,262.6,0,0 +-3,263.5,0,0 +-3,264.4,0,0 +-3,265.3,0,0 +-3,266.2,0,0 +-3,267.1,0,0 +-3,268,0,0 +-3,268.9,0,0 +-3,269.8,0,0 +-3,270.7,0,0 +-3,271.6,0,0 +-3,272.5,0,0 +-3,273.4,0,0 +-3,274.3,0,0 +-3,275.2,0,0 +-3,276.1,0,0 +-3,277,0,0 +-3,277.9,0,0 +-3,278.8,0,0 +-3,279.7,0,0 +-3,280.6,0,0 +-3,281.5,0,0 +-3,282.4,0,0 +-3,283.3,0,0 +-3,284.2,0,0 +-3,285.1,0,0 +-3,286,0,0 +-3,286.9,0,0 +-3,287.8,0,0 +-3,288.7,0,0 +-3,289.6,0,0 +-3,290.5,0,0 +-3,291.4,0,0 +-3,292.3,0,0 +-3,293.2,0,0 +-3,294.1,0,0 +-3,295,0,0 +-3,295.9,0,0 +-3,296.8,0,0 +-3,297.7,0,0 +-3,298.6,0,0 +-3,299.5,0,0 +-3,300.5,0,0 +-3,301.4,0,0 +-3,302.3,0,0 +-3,303.2,0,0 +-3,304.1,0,0 +-3,305,0,0 +-3,305.9,0,0 +-3,306.8,0,0 +-3,307.7,0,0 +-3,308.6,0,0 +-3,309.5,0,0 +-3,310.4,0,0 +-3,311.3,0,0 +-3,312.2,0,0 +-3,313.1,0,0 +-3,314,0,0 +-3,314.9,0,0 +-3,315.8,0,0 +-3,316.7,0,0 +-3,317.6,0,0 +-3,318.5,0,0 +-3,319.4,0,0 +-3,320.3,0,0 +-3,321.2,0,0 +-3,322.1,0,0 +-3,323,0,0 +-3,323.9,0,0 +-3,324.8,0,0 +-3,325.7,0,0 +-3,326.6,0,0 +-3,327.5,0,0 +-3,328.4,0,0 +-3,329.3,0,0 +-3,330.2,0,0 +-3,331.1,0,0 +-3,332,0,0 +-3,332.9,0,0 +-3,333.8,0,0 +-3,334.7,0,0 +-3,335.6,0,0 +-3,336.5,0,0 +-3,337.4,0,0 +-3,338.3,0,0 +-3,339.2,0,0 +-3,340.2,0,0 +-3,341.1,0,0 +-3,342,0,0 +-3,342.9,0,0 +-3,343.8,0,0 +-3,344.7,0,0 +-3,345.6,0,0 +-3,346.5,0,0 +-3,347.4,0,0 +-3,348.3,0,0 +-3,349.2,0,0 +-3,350.1,0,0 +-3,351,0,0 +-3,351.9,0,0 +-3,352.8,0,0 +-3,353.7,0,0 +-3,354.6,0,0 +-3,355.5,0,0 +-3,356.4,0,0 +-3,357.3,0,0 +-3,358.2,0,0 +-3,359.1,0,0 +-3,360,0,0 diff --git a/scripts/trajectories/rotate_euler_quaternion_5s_delayed.csv b/scripts/trajectories/rotate_euler_quaternion_5s_delayed.csv new file mode 100644 index 0000000000000000000000000000000000000000..99c54e3c52a9252d38520920c392e0df553611e1 --- /dev/null +++ b/scripts/trajectories/rotate_euler_quaternion_5s_delayed.csv @@ -0,0 +1,1020 @@ +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,360,0,0 +-3,359.1,0,0 +-3,358.2,0,0 +-3,357.3,0,0 +-3,356.4,0,0 +-3,355.5,0,0 +-3,354.6,0,0 +-3,353.7,0,0 +-3,352.8,0,0 +-3,351.9,0,0 +-3,351,0,0 +-3,350.1,0,0 +-3,349.2,0,0 +-3,348.3,0,0 +-3,347.4,0,0 +-3,346.5,0,0 +-3,345.6,0,0 +-3,344.7,0,0 +-3,343.8,0,0 +-3,342.9,0,0 +-3,342,0,0 +-3,341.1,0,0 +-3,340.2,0,0 +-3,339.2,0,0 +-3,338.3,0,0 +-3,337.4,0,0 +-3,336.5,0,0 +-3,335.6,0,0 +-3,334.7,0,0 +-3,333.8,0,0 +-3,332.9,0,0 +-3,332,0,0 +-3,331.1,0,0 +-3,330.2,0,0 +-3,329.3,0,0 +-3,328.4,0,0 +-3,327.5,0,0 +-3,326.6,0,0 +-3,325.7,0,0 +-3,324.8,0,0 +-3,323.9,0,0 +-3,323,0,0 +-3,322.1,0,0 +-3,321.2,0,0 +-3,320.3,0,0 +-3,319.4,0,0 +-3,318.5,0,0 +-3,317.6,0,0 +-3,316.7,0,0 +-3,315.8,0,0 +-3,314.9,0,0 +-3,314,0,0 +-3,313.1,0,0 +-3,312.2,0,0 +-3,311.3,0,0 +-3,310.4,0,0 +-3,309.5,0,0 +-3,308.6,0,0 +-3,307.7,0,0 +-3,306.8,0,0 +-3,305.9,0,0 +-3,305,0,0 +-3,304.1,0,0 +-3,303.2,0,0 +-3,302.3,0,0 +-3,301.4,0,0 +-3,300.5,0,0 +-3,299.5,0,0 +-3,298.6,0,0 +-3,297.7,0,0 +-3,296.8,0,0 +-3,295.9,0,0 +-3,295,0,0 +-3,294.1,0,0 +-3,293.2,0,0 +-3,292.3,0,0 +-3,291.4,0,0 +-3,290.5,0,0 +-3,289.6,0,0 +-3,288.7,0,0 +-3,287.8,0,0 +-3,286.9,0,0 +-3,286,0,0 +-3,285.1,0,0 +-3,284.2,0,0 +-3,283.3,0,0 +-3,282.4,0,0 +-3,281.5,0,0 +-3,280.6,0,0 +-3,279.7,0,0 +-3,278.8,0,0 +-3,277.9,0,0 +-3,277,0,0 +-3,276.1,0,0 +-3,275.2,0,0 +-3,274.3,0,0 +-3,273.4,0,0 +-3,272.5,0,0 +-3,271.6,0,0 +-3,270.7,0,0 +-3,269.8,0,0 +-3,268.9,0,0 +-3,268,0,0 +-3,267.1,0,0 +-3,266.2,0,0 +-3,265.3,0,0 +-3,264.4,0,0 +-3,263.5,0,0 +-3,262.6,0,0 +-3,261.7,0,0 +-3,260.8,0,0 +-3,259.8,0,0 +-3,258.9,0,0 +-3,258,0,0 +-3,257.1,0,0 +-3,256.2,0,0 +-3,255.3,0,0 +-3,254.4,0,0 +-3,253.5,0,0 +-3,252.6,0,0 +-3,251.7,0,0 +-3,250.8,0,0 +-3,249.9,0,0 +-3,249,0,0 +-3,248.1,0,0 +-3,247.2,0,0 +-3,246.3,0,0 +-3,245.4,0,0 +-3,244.5,0,0 +-3,243.6,0,0 +-3,242.7,0,0 +-3,241.8,0,0 +-3,240.9,0,0 +-3,240,0,0 +-3,239.1,0,0 +-3,238.2,0,0 +-3,237.3,0,0 +-3,236.4,0,0 +-3,235.5,0,0 +-3,234.6,0,0 +-3,233.7,0,0 +-3,232.8,0,0 +-3,231.9,0,0 +-3,231,0,0 +-3,230.1,0,0 +-3,229.2,0,0 +-3,228.3,0,0 +-3,227.4,0,0 +-3,226.5,0,0 +-3,225.6,0,0 +-3,224.7,0,0 +-3,223.8,0,0 +-3,222.9,0,0 +-3,222,0,0 +-3,221.1,0,0 +-3,220.2,0,0 +-3,219.2,0,0 +-3,218.3,0,0 +-3,217.4,0,0 +-3,216.5,0,0 +-3,215.6,0,0 +-3,214.7,0,0 +-3,213.8,0,0 +-3,212.9,0,0 +-3,212,0,0 +-3,211.1,0,0 +-3,210.2,0,0 +-3,209.3,0,0 +-3,208.4,0,0 +-3,207.5,0,0 +-3,206.6,0,0 +-3,205.7,0,0 +-3,204.8,0,0 +-3,203.9,0,0 +-3,203,0,0 +-3,202.1,0,0 +-3,201.2,0,0 +-3,200.3,0,0 +-3,199.4,0,0 +-3,198.5,0,0 +-3,197.6,0,0 +-3,196.7,0,0 +-3,195.8,0,0 +-3,194.9,0,0 +-3,194,0,0 +-3,193.1,0,0 +-3,192.2,0,0 +-3,191.3,0,0 +-3,190.4,0,0 +-3,189.5,0,0 +-3,188.6,0,0 +-3,187.7,0,0 +-3,186.8,0,0 +-3,185.9,0,0 +-3,185,0,0 +-3,184.1,0,0 +-3,183.2,0,0 +-3,182.3,0,0 +-3,181.4,0,0 +-3,180.5,0,0 +-3,179.5,-90,0 +-3,178.6,-89.5,0 +-3,177.7,-89.1,0 +-3,176.8,-88.6,0 +-3,175.9,-88.2,0 +-3,175,-87.7,0 +-3,174.1,-87.3,0 +-3,173.2,-86.8,0 +-3,172.3,-86.4,0 +-3,171.4,-85.9,0 +-3,170.5,-85.5,0 +-3,169.6,-85,0 +-3,168.7,-84.6,0 +-3,167.8,-84.1,0 +-3,166.9,-83.7,0 +-3,166,-83.2,0 +-3,165.1,-82.8,0 +-3,164.2,-82.3,0 +-3,163.3,-81.9,0 +-3,162.4,-81.4,0 +-3,161.5,-81,0 +-3,160.6,-80.5,0 +-3,159.7,-80.1,0 +-3,158.8,-79.6,0 +-3,157.9,-79.1,0 +-3,157,-78.7,0 +-3,156.1,-78.2,0 +-3,155.2,-77.8,0 +-3,154.3,-77.3,0 +-3,153.4,-76.9,0 +-3,152.5,-76.4,0 +-3,151.6,-76,0 +-3,150.7,-75.5,0 +-3,149.8,-75.1,0 +-3,148.9,-74.6,0 +-3,148,-74.2,0 +-3,147.1,-73.7,0 +-3,146.2,-73.3,0 +-3,145.3,-72.8,0 +-3,144.4,-72.4,0 +-3,143.5,-71.9,0 +-3,142.6,-71.5,0 +-3,141.7,-71,0 +-3,140.8,-70.6,0 +-3,139.8,-70.1,0 +-3,138.9,-69.6,0 +-3,138,-69.2,0 +-3,137.1,-68.7,0 +-3,136.2,-68.3,0 +-3,135.3,-67.8,0 +-3,134.4,-67.4,0 +-3,133.5,-66.9,0 +-3,132.6,-66.5,0 +-3,131.7,-66,0 +-3,130.8,-65.6,0 +-3,129.9,-65.1,0 +-3,129,-64.7,0 +-3,128.1,-64.2,0 +-3,127.2,-63.8,0 +-3,126.3,-63.3,0 +-3,125.4,-62.9,0 +-3,124.5,-62.4,0 +-3,123.6,-62,0 +-3,122.7,-61.5,0 +-3,121.8,-61.1,0 +-3,120.9,-60.6,0 +-3,120,-60.2,0 +-3,119.1,-59.7,0 +-3,118.2,-59.2,0 +-3,117.3,-58.8,0 +-3,116.4,-58.3,0 +-3,115.5,-57.9,0 +-3,114.6,-57.4,0 +-3,113.7,-57,0 +-3,112.8,-56.5,0 +-3,111.9,-56.1,0 +-3,111,-55.6,0 +-3,110.1,-55.2,0 +-3,109.2,-54.7,0 +-3,108.3,-54.3,0 +-3,107.4,-53.8,0 +-3,106.5,-53.4,0 +-3,105.6,-52.9,0 +-3,104.7,-52.5,0 +-3,103.8,-52,0 +-3,102.9,-51.6,0 +-3,102,-51.1,0 +-3,101.1,-50.7,0 +-3,100.2,-50.2,0 +-3,99.2,-49.7,0 +-3,98.3,-49.3,0 +-3,97.4,-48.8,0 +-3,96.5,-48.4,0 +-3,95.6,-47.9,0 +-3,94.7,-47.5,0 +-3,93.8,-47,0 +-3,92.9,-46.6,0 +-3,92,-46.1,0 +-3,91.1,-45.7,0 +-3,90.2,-45.2,0 +-3,89.3,-44.8,90 +-3,88.4,-44.3,89.1 +-3,87.5,-43.9,88.2 +-3,86.6,-43.4,87.3 +-3,85.7,-43,86.4 +-3,84.8,-42.5,85.5 +-3,83.9,-42.1,84.5 +-3,83,-41.6,83.6 +-3,82.1,-41.2,82.7 +-3,81.2,-40.7,81.8 +-3,80.3,-40.3,80.9 +-3,79.4,-39.8,80 +-3,78.5,-39.3,79.1 +-3,77.6,-38.9,78.2 +-3,76.7,-38.4,77.3 +-3,75.8,-38,76.4 +-3,74.9,-37.5,75.5 +-3,74,-37.1,74.5 +-3,73.1,-36.6,73.6 +-3,72.2,-36.2,72.7 +-3,71.3,-35.7,71.8 +-3,70.4,-35.3,70.9 +-3,69.5,-34.8,70 +-3,68.6,-34.4,69.1 +-3,67.7,-33.9,68.2 +-3,66.8,-33.5,67.3 +-3,65.9,-33,66.4 +-3,65,-32.6,65.5 +-3,64.1,-32.1,64.5 +-3,63.2,-31.7,63.6 +-3,62.3,-31.2,62.7 +-3,61.4,-30.8,61.8 +-3,60.5,-30.3,60.9 +-3,59.5,-29.8,60 +-3,58.6,-29.4,59.1 +-3,57.7,-28.9,58.2 +-3,56.8,-28.5,57.3 +-3,55.9,-28,56.4 +-3,55,-27.6,55.5 +-3,54.1,-27.1,54.5 +-3,53.2,-26.7,53.6 +-3,52.3,-26.2,52.7 +-3,51.4,-25.8,51.8 +-3,50.5,-25.3,50.9 +-3,49.6,-24.9,50 +-3,48.7,-24.4,49.1 +-3,47.8,-24,48.2 +-3,46.9,-23.5,47.3 +-3,46,-23.1,46.4 +-3,45.1,-22.6,45.5 +-3,44.2,-22.2,44.5 +-3,43.3,-21.7,43.6 +-3,42.4,-21.3,42.7 +-3,41.5,-20.8,41.8 +-3,40.6,-20.4,40.9 +-3,39.7,-19.9,40 +-3,38.8,-19.4,39.1 +-3,37.9,-19,38.2 +-3,37,-18.5,37.3 +-3,36.1,-18.1,36.4 +-3,35.2,-17.6,35.5 +-3,34.3,-17.2,34.5 +-3,33.4,-16.7,33.6 +-3,32.5,-16.3,32.7 +-3,31.6,-15.8,31.8 +-3,30.7,-15.4,30.9 +-3,29.8,-14.9,30 +-3,28.9,-14.5,29.1 +-3,28,-14,28.2 +-3,27.1,-13.6,27.3 +-3,26.2,-13.1,26.4 +-3,25.3,-12.7,25.5 +-3,24.4,-12.2,24.5 +-3,23.5,-11.8,23.6 +-3,22.6,-11.3,22.7 +-3,21.7,-10.9,21.8 +-3,20.8,-10.4,20.9 +-3,19.8,-9.9,20 +-3,18.9,-9.5,19.1 +-3,18,-9,18.2 +-3,17.1,-8.6,17.3 +-3,16.2,-8.1,16.4 +-3,15.3,-7.7,15.5 +-3,14.4,-7.2,14.5 +-3,13.5,-6.8,13.6 +-3,12.6,-6.3,12.7 +-3,11.7,-5.9,11.8 +-3,10.8,-5.4,10.9 +-3,9.9,-5,10 +-3,9,-4.5,9.1 +-3,8.1,-4.1,8.2 +-3,7.2,-3.6,7.3 +-3,6.3,-3.2,6.4 +-3,5.4,-2.7,5.5 +-3,4.5,-2.3,4.5 +-3,3.6,-1.8,3.6 +-3,2.7,-1.4,2.7 +-3,1.8,-0.9,1.8 +-3,0.9,-0.5,0.9 +-3,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +0.9,0,0,0.3 +0.9,0,0,0.3 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.8,0,0,0.5 +0.8,0,0,0.5 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.5,0,0,0.8 +0.5,0,0,0.8 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.3,0,0,0.9 +0.3,0,0,0.9 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.1,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.2,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,1 +0.3,0,0,0.9 +0.3,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.4,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.9 +0.5,0,0,0.8 +0.5,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.6,0,0,0.8 +0.7,0,0,0.8 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.7,0,0,0.7 +0.8,0,0,0.7 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.6 +0.8,0,0,0.5 +0.8,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.5 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.4 +0.9,0,0,0.3 +0.9,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.3 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.2 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0.1 +1,0,0,0 +1,0,0,0 +1,0,0,0 +1,0,0,0 +-3,0,0,0 +-3,0.9,-0.5,0.9 +-3,1.8,-0.9,1.8 +-3,2.7,-1.4,2.7 +-3,3.6,-1.8,3.6 +-3,4.5,-2.3,4.5 +-3,5.4,-2.7,5.5 +-3,6.3,-3.2,6.4 +-3,7.2,-3.6,7.3 +-3,8.1,-4.1,8.2 +-3,9,-4.5,9.1 +-3,9.9,-5,10 +-3,10.8,-5.4,10.9 +-3,11.7,-5.9,11.8 +-3,12.6,-6.3,12.7 +-3,13.5,-6.8,13.6 +-3,14.4,-7.2,14.5 +-3,15.3,-7.7,15.5 +-3,16.2,-8.1,16.4 +-3,17.1,-8.6,17.3 +-3,18,-9,18.2 +-3,18.9,-9.5,19.1 +-3,19.8,-9.9,20 +-3,20.8,-10.4,20.9 +-3,21.7,-10.9,21.8 +-3,22.6,-11.3,22.7 +-3,23.5,-11.8,23.6 +-3,24.4,-12.2,24.5 +-3,25.3,-12.7,25.5 +-3,26.2,-13.1,26.4 +-3,27.1,-13.6,27.3 +-3,28,-14,28.2 +-3,28.9,-14.5,29.1 +-3,29.8,-14.9,30 +-3,30.7,-15.4,30.9 +-3,31.6,-15.8,31.8 +-3,32.5,-16.3,32.7 +-3,33.4,-16.7,33.6 +-3,34.3,-17.2,34.5 +-3,35.2,-17.6,35.5 +-3,36.1,-18.1,36.4 +-3,37,-18.5,37.3 +-3,37.9,-19,38.2 +-3,38.8,-19.4,39.1 +-3,39.7,-19.9,40 +-3,40.6,-20.4,40.9 +-3,41.5,-20.8,41.8 +-3,42.4,-21.3,42.7 +-3,43.3,-21.7,43.6 +-3,44.2,-22.2,44.5 +-3,45.1,-22.6,45.5 +-3,46,-23.1,46.4 +-3,46.9,-23.5,47.3 +-3,47.8,-24,48.2 +-3,48.7,-24.4,49.1 +-3,49.6,-24.9,50 +-3,50.5,-25.3,50.9 +-3,51.4,-25.8,51.8 +-3,52.3,-26.2,52.7 +-3,53.2,-26.7,53.6 +-3,54.1,-27.1,54.5 +-3,55,-27.6,55.5 +-3,55.9,-28,56.4 +-3,56.8,-28.5,57.3 +-3,57.7,-28.9,58.2 +-3,58.6,-29.4,59.1 +-3,59.5,-29.8,60 +-3,60.5,-30.3,60.9 +-3,61.4,-30.8,61.8 +-3,62.3,-31.2,62.7 +-3,63.2,-31.7,63.6 +-3,64.1,-32.1,64.5 +-3,65,-32.6,65.5 +-3,65.9,-33,66.4 +-3,66.8,-33.5,67.3 +-3,67.7,-33.9,68.2 +-3,68.6,-34.4,69.1 +-3,69.5,-34.8,70 +-3,70.4,-35.3,70.9 +-3,71.3,-35.7,71.8 +-3,72.2,-36.2,72.7 +-3,73.1,-36.6,73.6 +-3,74,-37.1,74.5 +-3,74.9,-37.5,75.5 +-3,75.8,-38,76.4 +-3,76.7,-38.4,77.3 +-3,77.6,-38.9,78.2 +-3,78.5,-39.3,79.1 +-3,79.4,-39.8,80 +-3,80.3,-40.3,80.9 +-3,81.2,-40.7,81.8 +-3,82.1,-41.2,82.7 +-3,83,-41.6,83.6 +-3,83.9,-42.1,84.5 +-3,84.8,-42.5,85.5 +-3,85.7,-43,86.4 +-3,86.6,-43.4,87.3 +-3,87.5,-43.9,88.2 +-3,88.4,-44.3,89.1 +-3,89.3,-44.8,90 +-3,90.2,-45.2,0 +-3,91.1,-45.7,0 +-3,92,-46.1,0 +-3,92.9,-46.6,0 +-3,93.8,-47,0 +-3,94.7,-47.5,0 +-3,95.6,-47.9,0 +-3,96.5,-48.4,0 +-3,97.4,-48.8,0 +-3,98.3,-49.3,0 +-3,99.2,-49.7,0 +-3,100.2,-50.2,0 +-3,101.1,-50.7,0 +-3,102,-51.1,0 +-3,102.9,-51.6,0 +-3,103.8,-52,0 +-3,104.7,-52.5,0 +-3,105.6,-52.9,0 +-3,106.5,-53.4,0 +-3,107.4,-53.8,0 +-3,108.3,-54.3,0 +-3,109.2,-54.7,0 +-3,110.1,-55.2,0 +-3,111,-55.6,0 +-3,111.9,-56.1,0 +-3,112.8,-56.5,0 +-3,113.7,-57,0 +-3,114.6,-57.4,0 +-3,115.5,-57.9,0 +-3,116.4,-58.3,0 +-3,117.3,-58.8,0 +-3,118.2,-59.2,0 +-3,119.1,-59.7,0 +-3,120,-60.2,0 +-3,120.9,-60.6,0 +-3,121.8,-61.1,0 +-3,122.7,-61.5,0 +-3,123.6,-62,0 +-3,124.5,-62.4,0 +-3,125.4,-62.9,0 +-3,126.3,-63.3,0 +-3,127.2,-63.8,0 +-3,128.1,-64.2,0 +-3,129,-64.7,0 +-3,129.9,-65.1,0 +-3,130.8,-65.6,0 +-3,131.7,-66,0 +-3,132.6,-66.5,0 +-3,133.5,-66.9,0 +-3,134.4,-67.4,0 +-3,135.3,-67.8,0 +-3,136.2,-68.3,0 +-3,137.1,-68.7,0 +-3,138,-69.2,0 +-3,138.9,-69.6,0 +-3,139.8,-70.1,0 +-3,140.8,-70.6,0 +-3,141.7,-71,0 +-3,142.6,-71.5,0 +-3,143.5,-71.9,0 +-3,144.4,-72.4,0 +-3,145.3,-72.8,0 +-3,146.2,-73.3,0 +-3,147.1,-73.7,0 +-3,148,-74.2,0 +-3,148.9,-74.6,0 +-3,149.8,-75.1,0 +-3,150.7,-75.5,0 +-3,151.6,-76,0 +-3,152.5,-76.4,0 +-3,153.4,-76.9,0 +-3,154.3,-77.3,0 +-3,155.2,-77.8,0 +-3,156.1,-78.2,0 +-3,157,-78.7,0 +-3,157.9,-79.1,0 +-3,158.8,-79.6,0 +-3,159.7,-80.1,0 +-3,160.6,-80.5,0 +-3,161.5,-81,0 +-3,162.4,-81.4,0 +-3,163.3,-81.9,0 +-3,164.2,-82.3,0 +-3,165.1,-82.8,0 +-3,166,-83.2,0 +-3,166.9,-83.7,0 +-3,167.8,-84.1,0 +-3,168.7,-84.6,0 +-3,169.6,-85,0 +-3,170.5,-85.5,0 +-3,171.4,-85.9,0 +-3,172.3,-86.4,0 +-3,173.2,-86.8,0 +-3,174.1,-87.3,0 +-3,175,-87.7,0 +-3,175.9,-88.2,0 +-3,176.8,-88.6,0 +-3,177.7,-89.1,0 +-3,178.6,-89.5,0 +-3,179.5,-90,0 +-3,180.5,0,0 +-3,181.4,0,0 +-3,182.3,0,0 +-3,183.2,0,0 +-3,184.1,0,0 +-3,185,0,0 +-3,185.9,0,0 +-3,186.8,0,0 +-3,187.7,0,0 +-3,188.6,0,0 +-3,189.5,0,0 +-3,190.4,0,0 +-3,191.3,0,0 +-3,192.2,0,0 +-3,193.1,0,0 +-3,194,0,0 +-3,194.9,0,0 +-3,195.8,0,0 +-3,196.7,0,0 +-3,197.6,0,0 +-3,198.5,0,0 +-3,199.4,0,0 +-3,200.3,0,0 +-3,201.2,0,0 +-3,202.1,0,0 +-3,203,0,0 +-3,203.9,0,0 +-3,204.8,0,0 +-3,205.7,0,0 +-3,206.6,0,0 +-3,207.5,0,0 +-3,208.4,0,0 +-3,209.3,0,0 +-3,210.2,0,0 +-3,211.1,0,0 +-3,212,0,0 +-3,212.9,0,0 +-3,213.8,0,0 +-3,214.7,0,0 +-3,215.6,0,0 +-3,216.5,0,0 +-3,217.4,0,0 +-3,218.3,0,0 +-3,219.2,0,0 +-3,220.2,0,0 +-3,221.1,0,0 +-3,222,0,0 +-3,222.9,0,0 +-3,223.8,0,0 +-3,224.7,0,0 +-3,225.6,0,0 +-3,226.5,0,0 +-3,227.4,0,0 +-3,228.3,0,0 +-3,229.2,0,0 +-3,230.1,0,0 +-3,231,0,0 +-3,231.9,0,0 +-3,232.8,0,0 +-3,233.7,0,0 +-3,234.6,0,0 +-3,235.5,0,0 +-3,236.4,0,0 +-3,237.3,0,0 +-3,238.2,0,0 +-3,239.1,0,0 +-3,240,0,0 +-3,240.9,0,0 +-3,241.8,0,0 +-3,242.7,0,0 +-3,243.6,0,0 +-3,244.5,0,0 +-3,245.4,0,0 +-3,246.3,0,0 +-3,247.2,0,0 +-3,248.1,0,0 +-3,249,0,0 +-3,249.9,0,0 +-3,250.8,0,0 +-3,251.7,0,0 +-3,252.6,0,0 +-3,253.5,0,0 +-3,254.4,0,0 +-3,255.3,0,0 +-3,256.2,0,0 +-3,257.1,0,0 +-3,258,0,0 +-3,258.9,0,0 +-3,259.8,0,0 +-3,260.8,0,0 +-3,261.7,0,0 +-3,262.6,0,0 +-3,263.5,0,0 +-3,264.4,0,0 +-3,265.3,0,0 +-3,266.2,0,0 +-3,267.1,0,0 +-3,268,0,0 +-3,268.9,0,0 +-3,269.8,0,0 +-3,270.7,0,0 +-3,271.6,0,0 +-3,272.5,0,0 +-3,273.4,0,0 +-3,274.3,0,0 +-3,275.2,0,0 +-3,276.1,0,0 +-3,277,0,0 +-3,277.9,0,0 +-3,278.8,0,0 +-3,279.7,0,0 +-3,280.6,0,0 +-3,281.5,0,0 +-3,282.4,0,0 +-3,283.3,0,0 +-3,284.2,0,0 +-3,285.1,0,0 +-3,286,0,0 +-3,286.9,0,0 +-3,287.8,0,0 +-3,288.7,0,0 +-3,289.6,0,0 +-3,290.5,0,0 +-3,291.4,0,0 +-3,292.3,0,0 +-3,293.2,0,0 +-3,294.1,0,0 +-3,295,0,0 +-3,295.9,0,0 +-3,296.8,0,0 +-3,297.7,0,0 +-3,298.6,0,0 +-3,299.5,0,0 +-3,300.5,0,0 +-3,301.4,0,0 +-3,302.3,0,0 +-3,303.2,0,0 +-3,304.1,0,0 +-3,305,0,0 +-3,305.9,0,0 +-3,306.8,0,0 +-3,307.7,0,0 +-3,308.6,0,0 +-3,309.5,0,0 +-3,310.4,0,0 +-3,311.3,0,0 +-3,312.2,0,0 +-3,313.1,0,0 +-3,314,0,0 +-3,314.9,0,0 +-3,315.8,0,0 +-3,316.7,0,0 +-3,317.6,0,0 +-3,318.5,0,0 +-3,319.4,0,0 +-3,320.3,0,0 +-3,321.2,0,0 +-3,322.1,0,0 +-3,323,0,0 +-3,323.9,0,0 +-3,324.8,0,0 +-3,325.7,0,0 +-3,326.6,0,0 +-3,327.5,0,0 +-3,328.4,0,0 +-3,329.3,0,0 +-3,330.2,0,0 +-3,331.1,0,0 +-3,332,0,0 +-3,332.9,0,0 +-3,333.8,0,0 +-3,334.7,0,0 +-3,335.6,0,0 +-3,336.5,0,0 +-3,337.4,0,0 +-3,338.3,0,0 +-3,339.2,0,0 +-3,340.2,0,0 +-3,341.1,0,0 +-3,342,0,0 +-3,342.9,0,0 +-3,343.8,0,0 +-3,344.7,0,0 +-3,345.6,0,0 +-3,346.5,0,0 +-3,347.4,0,0 +-3,348.3,0,0 +-3,349.2,0,0 +-3,350.1,0,0 +-3,351,0,0 +-3,351.9,0,0 +-3,352.8,0,0 +-3,353.7,0,0 +-3,354.6,0,0 +-3,355.5,0,0 +-3,356.4,0,0 +-3,357.3,0,0 +-3,358.2,0,0 +-3,359.1,0,0 +-3,360,0,0 diff --git a/tests/split_rendering/README.md b/tests/split_rendering/README.md index 27dad9f32db786de607309a101e8801f9f9d98e6..7ac5d1c9819134f26dccf4553857d98ec46c2d45 100644 --- a/tests/split_rendering/README.md +++ b/tests/split_rendering/README.md @@ -98,7 +98,7 @@ Commands executed for a test can be found from the corresponding test output. ```bash IVAS_cod -sba 3 512000 48 tests/renderer/data/spectral_test_16ch_48kHz.wav ivas.192 -IVAS_dec -T scripts/trajectories/rotate_yaw_pitch_roll1_delayed.csv -render_config tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_default.txt BINAURAL_SPLIT_CODED 48 ivas.192 split.bit +IVAS_dec -T scripts/trajectories/rotate_euler_quaternion_5s_delayed.csv -render_config tests/split_rendering/renderer_configs/split_renderer_config_3dof_768k_default.txt BINAURAL_SPLIT_CODED 48 ivas.192 split.bit -IVAS_rend -fs 48 -i split.bit -if BINAURAL_SPLIT_CODED -o tests/split_rendering/cut/HOA3_512000bps_rotate_yaw_pitch_roll1_delayed_split_full_rotate_yaw_pitch_roll1__config_split_renderer_config_3dof_768k_default.wav -of BINAURAL -tf scripts/trajectories/rotate_yaw_pitch_roll1.csv +IVAS_rend -fs 48 -i split.bit -if BINAURAL_SPLIT_CODED -o tests/split_rendering/cut/HOA3_512000bps_rotate_euler_quaternion_5s_delayed_split_full_rotate_euler_quaternion_5s__config_split_renderer_config_3dof_768k_default.wav -of BINAURAL -tf scripts/trajectories/rotate_euler_quaternion_5s.csv ``` diff --git a/tests/split_rendering/constants.py b/tests/split_rendering/constants.py index ef5f3188360aaa0276e091d691ad3237faa69d08..751b632f93015a4065282ecb03310f02fda08786 100644 --- a/tests/split_rendering/constants.py +++ b/tests/split_rendering/constants.py @@ -36,6 +36,7 @@ from pathlib import Path """ Set up paths """ TESTS_DIR = Path(__file__).parent RENDER_CFG_DIR = TESTS_DIR.joinpath("renderer_configs").resolve() +ERROR_PATTERNS_DIR = TESTS_DIR.joinpath("error_patterns").resolve() OUTPUT_PATH_REF = TESTS_DIR.joinpath("ref") OUTPUT_PATH_CUT = TESTS_DIR.joinpath("cut") @@ -52,7 +53,6 @@ from tests.renderer.constants import ( FORMAT_TO_FILE_COMPARETEST, FORMAT_TO_FILE_SMOKETEST, FORMAT_TO_METADATA_FILES, - HR_TRAJECTORIES_TO_TEST, INPUT_FORMATS_AMBI, INPUT_FORMATS_ISM, INPUT_FORMATS_MASA, @@ -70,6 +70,9 @@ RENDERER_CONFIGS_LCLD_CODEC = [ RENDERER_CONFIGS_LC3PLUS_CODEC = [ str(cfg.stem) for cfg in RENDER_CFG_DIR.glob("*_lc3plus.txt") ] +RENDERER_CONFIGS_FASTCONV_RENDERER = [ + str(cfg.stem) for cfg in RENDER_CFG_DIR.glob("*_fastconv.txt") +] RENDERER_CONFIGS_TO_TEST_AMBI = ( RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC @@ -83,6 +86,12 @@ RENDERER_CONFIGS_TO_TEST_ISM = ( RENDERER_CONFIGS_TO_TEST_MASA = ( RENDERER_CONFIGS_DEFAULT_CODEC + RENDERER_CONFIGS_LC3PLUS_CODEC ) +RENDERER_CONFIGS_TO_TEST_PLC = RENDERER_CONFIGS_FASTCONV_RENDERER + +""" Trajectories """ +SPLIT_REND_HR_TRAJECTORIES_TO_TEST = [ + "rotate_euler_quaternion_5s", +] """ IVAS specific constants """ FORMAT_TO_IVAS_COD_FORMAT = { @@ -123,7 +132,7 @@ FORMAT_TO_NCHAN = { "MASA2": 2, } -IVAS_BITRATES_AMBI = ["96000", "512000"] +IVAS_BITRATES_AMBI = ["80000", "512000"] IVAS_BITRATES_MC = ["128000", "160000", "384000"] IVAS_BITRATES_ISM = ["128000"] IVAS_BITRATES_MASA = ["24400", "128000"] @@ -137,6 +146,9 @@ IVAS_MAX_ISM_BITRATE = { INPUT_DURATION_SEC = 5 +""" PLC constants """ +PLC_ERROR_PATTERNS = [str(ep.stem) for ep in ERROR_PATTERNS_DIR.glob("*.ep")] + """ Encoder commandline template """ SPLIT_PRE_COD_CMD = [ str(TESTS_DIR.parent.parent.joinpath("IVAS_cod")), diff --git a/tests/split_rendering/error_patterns/p0.05.ep b/tests/split_rendering/error_patterns/p0.05.ep new file mode 100644 index 0000000000000000000000000000000000000000..a5996aa8aeaac8992b652df16f72fe052d87e94e Binary files /dev/null and b/tests/split_rendering/error_patterns/p0.05.ep differ diff --git a/tests/split_rendering/error_patterns/p0.10.ep b/tests/split_rendering/error_patterns/p0.10.ep new file mode 100644 index 0000000000000000000000000000000000000000..605a1fedd95bebb3ba1e44dd343dadadf2a120e5 Binary files /dev/null and b/tests/split_rendering/error_patterns/p0.10.ep differ diff --git a/tests/split_rendering/error_patterns/p0.20.ep b/tests/split_rendering/error_patterns/p0.20.ep new file mode 100644 index 0000000000000000000000000000000000000000..96e710edb9e29b4b0bc7a4b838e6b62ad5448138 Binary files /dev/null and b/tests/split_rendering/error_patterns/p0.20.ep differ diff --git a/tests/split_rendering/error_patterns/p0.50.ep b/tests/split_rendering/error_patterns/p0.50.ep new file mode 100644 index 0000000000000000000000000000000000000000..01c30abbc19553efdd6d5a80388b4c1cb38cb714 Binary files /dev/null and b/tests/split_rendering/error_patterns/p0.50.ep differ diff --git a/tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k_default_fastconv.txt b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k_default_fastconv.txt new file mode 100644 index 0000000000000000000000000000000000000000..cbafadf47cf5b9893e8d816106b84f772868e8e6 --- /dev/null +++ b/tests/split_rendering/renderer_configs/split_renderer_config_3dof_512k_default_fastconv.txt @@ -0,0 +1,7 @@ +[SPLITREND] +BITRATE = 512000; +DOF = 3; +HQMODE = 0; +CODEC = LCLD; + + diff --git a/tests/split_rendering/test_split_rendering.py b/tests/split_rendering/test_split_rendering.py index d48e305e6cf357d969f9c80eb0e1263e023ac71b..7d0ef2439334cde8c422e9f55c02d664912d7575 100644 --- a/tests/split_rendering/test_split_rendering.py +++ b/tests/split_rendering/test_split_rendering.py @@ -65,7 +65,7 @@ def check_xfail(test_info, in_fmt, render_config, bitrate=None): """ Ambisonics """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) @@ -87,7 +87,7 @@ def test_ambisonics_full_chain_split( ) -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory): @@ -108,7 +108,7 @@ def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory) """ Multichannel """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) @@ -130,7 +130,7 @@ def test_multichannel_full_chain_split( ) -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) def test_multichannel_external_split(test_info, in_fmt, render_config, trajectory): @@ -151,7 +151,7 @@ def test_multichannel_external_split(test_info, in_fmt, render_config, trajector """ ISM """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) @@ -171,7 +171,7 @@ def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, traject ) -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) def test_ism_external_split(test_info, in_fmt, render_config, trajectory): @@ -192,7 +192,7 @@ def test_ism_external_split(test_info, in_fmt, render_config, trajectory): """ MASA """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MASA) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_MASA) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA) @@ -210,3 +210,26 @@ def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajec post_trajectory=post_trajectory, output_path_base=OUTPUT_PATH_CUT, ) + + +""" PLC """ + + +@pytest.mark.parametrize("error_pattern", PLC_ERROR_PATTERNS) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_PLC) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI[-1:]) +def test_post_rend_plc(test_info, in_fmt, render_config, trajectory, error_pattern): + check_xfail(test_info, in_fmt, render_config) + + post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") + pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") + + run_external_split_rendering( + in_fmt=in_fmt, + render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), + pre_trajectory=pre_trajectory, + post_trajectory=post_trajectory, + output_path_base=OUTPUT_PATH_CUT, + plc_error_pattern=ERROR_PATTERNS_DIR.joinpath(f"{error_pattern}.ep"), + ) diff --git a/tests/split_rendering/test_split_rendering_be_comparison.py b/tests/split_rendering/test_split_rendering_be_comparison.py index 396f8b36f96bcc8382cc81ab350e63f6df19461d..9b0f03b8bb995d786aba0b7c14bc527c6f532af5 100644 --- a/tests/split_rendering/test_split_rendering_be_comparison.py +++ b/tests/split_rendering/test_split_rendering_be_comparison.py @@ -38,7 +38,7 @@ from tests.split_rendering.utils import * """ Ambisonics """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) @@ -60,7 +60,7 @@ def test_ambisonics_full_chain_split( ) -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_AMBI) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI) def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory): @@ -81,7 +81,7 @@ def test_ambisonics_external_split(test_info, in_fmt, render_config, trajectory) """ Multichannel """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) @@ -103,7 +103,7 @@ def test_multichannel_full_chain_split( ) -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MC) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MC[2:]) def test_multichannel_external_split(test_info, in_fmt, render_config, trajectory): @@ -124,7 +124,7 @@ def test_multichannel_external_split(test_info, in_fmt, render_config, trajector """ ISM """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) @@ -144,7 +144,7 @@ def test_ism_full_chain_split(test_info, in_fmt, bitrate, render_config, traject ) -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_ISM) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_ISM) def test_ism_external_split(test_info, in_fmt, render_config, trajectory): @@ -165,7 +165,7 @@ def test_ism_external_split(test_info, in_fmt, render_config, trajectory): """ MASA """ -@pytest.mark.parametrize("trajectory", HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) @pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_MASA) @pytest.mark.parametrize("bitrate", IVAS_BITRATES_MASA) @pytest.mark.parametrize("in_fmt", INPUT_FORMATS_MASA) @@ -183,3 +183,26 @@ def test_masa_full_chain_split(test_info, in_fmt, bitrate, render_config, trajec pre_trajectory=pre_trajectory, post_trajectory=post_trajectory, ) + + +""" PLC """ + + +@pytest.mark.parametrize("error_pattern", PLC_ERROR_PATTERNS) +@pytest.mark.parametrize("trajectory", SPLIT_REND_HR_TRAJECTORIES_TO_TEST) +@pytest.mark.parametrize("render_config", RENDERER_CONFIGS_TO_TEST_PLC) +@pytest.mark.parametrize("in_fmt", INPUT_FORMATS_AMBI[-1:]) +def test_post_rend_plc(test_info, in_fmt, render_config, trajectory, error_pattern): + check_xfail(test_info, in_fmt, render_config) + + post_trajectory = HR_TRAJECTORY_DIR.joinpath(f"{trajectory}.csv") + pre_trajectory = post_trajectory.with_stem(f"{post_trajectory.stem}_delayed") + + compare_external_split_args( + test_info, + in_fmt=in_fmt, + render_config=RENDER_CFG_DIR.joinpath(f"{render_config}.txt"), + pre_trajectory=pre_trajectory, + post_trajectory=post_trajectory, + plc_error_pattern=ERROR_PATTERNS_DIR.joinpath(f"{error_pattern}.ep"), + ) diff --git a/tests/split_rendering/utils.py b/tests/split_rendering/utils.py index fe28f142caec401950c5597439ad1ad123b2a3cd..b9bbee20a4db967a3471baed0ba5375e765da8ea 100644 --- a/tests/split_rendering/utils.py +++ b/tests/split_rendering/utils.py @@ -140,6 +140,7 @@ def run_external_split_rendering( pre_trajectory: Path, post_trajectory: Path, output_path_base: Path, + plc_error_pattern: Path = None, binary_suffix: str = "", is_comparetest: bool = False, ) -> Tuple[np.ndarray, int]: @@ -151,9 +152,15 @@ def run_external_split_rendering( with TemporaryDirectory() as tmp_dir: tmp_dir = Path(tmp_dir) split_bitstream = tmp_dir.joinpath("split.bit") - out_file = output_path_base.joinpath( - f"{in_fmt}_{pre_trajectory.stem}_split_ext_{post_trajectory.stem}__config_{render_config.stem}.wav" - ) + if plc_error_pattern: + out_file = output_path_base.joinpath( + f"{in_fmt}_{pre_trajectory.stem}_split_ext_{post_trajectory.stem}__config_{render_config.stem}_plc_{plc_error_pattern.stem}.wav" + ) + else: + out_file = output_path_base.joinpath( + f"{in_fmt}_{pre_trajectory.stem}_split_ext_{post_trajectory.stem}__config_{render_config.stem}.wav" + ) + # check for metadata files if in_fmt.upper().startswith("ISM") or in_fmt.upper().startswith("MASA"): @@ -186,6 +193,9 @@ def run_external_split_rendering( cmd[8] = str(out_file) cmd[12] = str(post_trajectory) + if plc_error_pattern: + cmd[1:1] = ["-prbfi", str(plc_error_pattern)] + run_cmd(cmd) return readfile(out_file)