// Exercise the actual downlink decoder loop with a decoder that consumes one // encoded frame per invocation, including coalesced frames and invalid progress. const fs=require('node:fs'), path=require('node:path'); const src=fs.readFileSync(path.join(__dirname,'../components/volc_conv_ai/src/transports/high_quality/src/volc_rtc.c'),'utf8'); const fn=src.slice(src.indexOf('static int __rtc_decode_opus('),src.indexOf('\nstatic int __rtc_rx_decoder_reset(')); if(!fn.startsWith('static int __rtc_decode_opus(')||!fn.trimEnd().endsWith('}'))throw new Error('decoder function extraction failed'); process.stdout.write(` #include #include #include #include #include #define ESP_AUDIO_ERR_OK 0 #define VOLC_AUDIO_DATA_TYPE_PCM 2 #define LOGE(...) ((void)0) typedef struct {void *opus_decoder;uint8_t decoded_pcm[3840];unsigned rx_errors;} rtc_impl_t; typedef struct {struct {struct {int data_type;} audio;} info;} volc_data_info_t; typedef struct {uint8_t *buffer;uint32_t len,consumed;} esp_audio_dec_in_raw_t; typedef struct {uint8_t *buffer;uint32_t len,decoded_size;} esp_audio_dec_out_frame_t; typedef struct {int unused;} esp_audio_dec_info_t; static int mode,calls,sends;static uint8_t output[16384];static unsigned output_size; static int __rtc_rx_current(rtc_impl_t *rtc,unsigned generation){(void)rtc;return generation==1;} static int esp_opus_dec_decode(void *decoder,esp_audio_dec_in_raw_t *in,esp_audio_dec_out_frame_t *out,esp_audio_dec_info_t *info){ calls++; if(mode==1)return -1; if(mode==2){in->consumed=0;return 0;} if(mode==3){in->consumed=in->len+1;return 0;} if(mode==4){in->consumed=1;out->decoded_size=out->len+1;return 0;} in->consumed=1;out->decoded_size=640;memset(out->buffer,in->buffer[0],640);return 0; } static void __send_data_2_user(rtc_impl_t *rtc,void *data,unsigned size,volc_data_info_t *info){ assert(info->info.audio.data_type==VOLC_AUDIO_DATA_TYPE_PCM);assert(output_size+size<=sizeof(output));memcpy(output+output_size,data,size);output_size+=size;sends++; } ${fn} int main(void){ for(unsigned n=1;n<=12;n++){rtc_impl_t rtc={0};volc_data_info_t info={0};uint8_t packet[12];for(unsigned i=0;i