开发者使用OH_AVDemuxer配合OH_AVCodec实现对音频解码成pcm数据的功能。
当音频文件读取结束时,调用者第一次调用OH_AudioCodec_PushInputBuffer对缓冲区完成数据填充时返回正常(OH_AVCodecBufferAttr的flags参数为AVCODEC_BUFFER_FLAGS_EOS),设置完成最后一个数据后依然可以继续收到OnInputBufferAvailable回调。再次输入数据给编码器时返回错误码8,并停止解码。
首次解码成功的流程:
循环(收到输入缓存区回调->使用解码器读取buffer(buffer属性中flags不为AVCODEC_BUFFER_FLAGS_EOS)->设置buffer到缓存区)。
解码异常流程:
当读到音频文件末尾时:
OnInputBufferAvailable的作用是通过异步方式提供了可用的buffer给调用者输入,输入AVCODEC_BUFFER_FLAGS_EOS之后,即是结束标识,解码器不再接收新的数据,再次进行设置buffer到缓存区处理就会出现当前状态不支持此操作,取值为8的报错。
当读取的buffer属性中flag为AVCODEC_BUFFER_FLAGS_EOS后,解码器将不再接收新的数据,未使用的buffer,可以不做处理。假如是保存在调用者的队列中,可以在EOS后,清空调用者记录的队列,相关内存会在OH_AudioCodec_Destroy时清理。