void VoIP::decodeMessage(VoIPMessage *message){ qDebug() << "Recv:" << message->getHost() << message->getPort() << message->payload().size(); AudioData *outdata = new AudioData; audiocodec->decode(message->payload(), outdata); delete message; //qDebug() << "Decoded:" << outdata->size(); emit decodedAudio(outdata); }
static void playNextAudioFrame(struct nodeInstanceData *context, VuoOutputTrigger(decodedAudio, VuoList_VuoAudioSamples)) { if(context->lastAudioSamples) { // Send Audio if(VuoListGetCount_VuoAudioSamples(context->lastAudioSamples) > 0) { VuoAudioSamples as = VuoListGetValueAtIndex_VuoAudioSamples(context->lastAudioSamples, 1); decodedAudio(context->lastAudioSamples); } VuoRelease(context->lastAudioSamples); context->lastAudioSamples = NULL; } uint64_t cur_time = dispatch_time(DISPATCH_TIME_NOW, 0); if(!context->movie) return; context->lastAudioSamples = VuoListCreate_VuoAudioSamples(); double frameTimestampInSecs = 0; bool gotFrame = VuoMovie_getNextAudioSample(context->movie, context->lastAudioSamples, &frameTimestampInSecs); if(gotFrame) { VuoRetain(context->lastAudioSamples); context->lastAudioTimestamp = frameTimestampInSecs; } else { VLog("bad"); if(context->lastAudioSamples) VuoRelease(context->lastAudioSamples); context->lastAudioSamples = NULL; } uint64_t presentationTime = (cur_time + NSEC_PER_SEC * AUDIO_SEC_PER_SAMPLE - 100000); dispatch_source_set_timer(context->audio_timer, presentationTime, DISPATCH_TIME_FOREVER, NSEC_PER_SEC / 100000 ); }