AudioDecoder * AudioDecoder::CreateDecoderForInputSourceRegion(InputSource *inputSource, SInt64 startingFrame, CFErrorRef *error) { if(nullptr == inputSource) return nullptr; if(!inputSource->SupportsSeeking()) return nullptr; AudioDecoder *decoder = CreateDecoderForInputSource(inputSource, error); if(nullptr == decoder) return nullptr; if(!decoder->SupportsSeeking()) { delete decoder, decoder = nullptr; return nullptr; } AudioDecoder *regionDecoder = CreateDecoderForDecoderRegion(decoder, startingFrame, error); if(nullptr == regionDecoder) { delete decoder, decoder = nullptr; return nullptr; } return regionDecoder; }
AudioDecoder * AudioDecoder::CreateDecoderForInputSourceRegion(InputSource *inputSource, SInt64 startingFrame, UInt32 frameCount, UInt32 repeatCount, CFErrorRef *error) { if(NULL == inputSource) return NULL; if(!inputSource->SupportsSeeking()) return NULL; AudioDecoder *decoder = CreateDecoderForInputSource(inputSource, error); if(NULL == decoder) return NULL; if(!decoder->SupportsSeeking()) { delete decoder, decoder = NULL; return NULL; } AudioDecoder *regionDecoder = CreateDecoderForDecoderRegion(decoder, startingFrame, frameCount, repeatCount, error); if(NULL == regionDecoder) { delete decoder, decoder = NULL; return NULL; } return regionDecoder; }
SFB::Audio::Decoder::unique_ptr SFB::Audio::Decoder::CreateDecoderForInputSourceRegion(InputSource::unique_ptr inputSource, SInt64 startingFrame, UInt32 frameCount, UInt32 repeatCount, CFErrorRef *error) { if(!inputSource) return nullptr; return CreateDecoderForDecoderRegion(CreateDecoderForInputSource(std::move(inputSource), error), startingFrame, frameCount, repeatCount, error); }