AudioQueueStop (atdec->queue, drain);
AudioQueueDispose (atdec->queue, true);
atdec->queue = NULL;
+ atdec->output_position = 0;
}
void
GstATDec *atdec = GST_ATDEC (decoder);
GST_DEBUG_OBJECT (atdec, "start");
+ atdec->output_position = 0;
return TRUE;
}
goto allocate_output_failed;
/* pull the frames */
+ timestamp.kAudioTimeStampSampleTimeValid;
+ timestamp.mSampleTime = atdec->output_position;
status =
AudioQueueOfflineRender (atdec->queue, ×tamp, output_buffer,
out_frames);
goto offline_render_failed;
if (output_buffer->mAudioDataByteSize) {
+ if (output_buffer->mAudioDataByteSize % audio_info->bpf != 0)
+ goto invalid_buffer_size;
+
+ atdec->output_position +=
+ output_buffer->mAudioDataByteSize / audio_info->bpf;
+
out =
gst_audio_decoder_allocate_output_buffer (decoder,
output_buffer->mAudioDataByteSize);
return flow_ret;
}
+
+invalid_buffer_size:
+ {
+ GST_AUDIO_DECODER_ERROR (atdec, 1, STREAM, DECODE, (NULL),
+ ("AudioQueueOfflineRender returned invalid buffer size: %u (bpf %d)",
+ output_buffer->mAudioDataByteSize, audio_info->bpf), flow_ret);
+
+ AudioQueueFreeBuffer (atdec->queue, output_buffer);
+
+ return flow_ret;
+ }
}
static void
GstATDec *atdec = GST_ATDEC (decoder);
AudioQueueReset (atdec->queue);
+ atdec->output_position = 0;
}