1*ec779b8eSAndroid Build Coastguard Worker /* 2*ec779b8eSAndroid Build Coastguard Worker * Copyright 2019 The Android Open Source Project 3*ec779b8eSAndroid Build Coastguard Worker * 4*ec779b8eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*ec779b8eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*ec779b8eSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*ec779b8eSAndroid Build Coastguard Worker * 8*ec779b8eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*ec779b8eSAndroid Build Coastguard Worker * 10*ec779b8eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*ec779b8eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*ec779b8eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*ec779b8eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*ec779b8eSAndroid Build Coastguard Worker * limitations under the License. 15*ec779b8eSAndroid Build Coastguard Worker */ 16*ec779b8eSAndroid Build Coastguard Worker 17*ec779b8eSAndroid Build Coastguard Worker #ifndef FRAME_REASSEMBLER_H_ 18*ec779b8eSAndroid Build Coastguard Worker #define FRAME_REASSEMBLER_H_ 19*ec779b8eSAndroid Build Coastguard Worker 20*ec779b8eSAndroid Build Coastguard Worker #include <set> 21*ec779b8eSAndroid Build Coastguard Worker #include <memory> 22*ec779b8eSAndroid Build Coastguard Worker 23*ec779b8eSAndroid Build Coastguard Worker #include <media/MediaCodecBuffer.h> 24*ec779b8eSAndroid Build Coastguard Worker 25*ec779b8eSAndroid Build Coastguard Worker #include <C2Config.h> 26*ec779b8eSAndroid Build Coastguard Worker #include <C2Work.h> 27*ec779b8eSAndroid Build Coastguard Worker 28*ec779b8eSAndroid Build Coastguard Worker namespace android { 29*ec779b8eSAndroid Build Coastguard Worker 30*ec779b8eSAndroid Build Coastguard Worker class FrameReassembler { 31*ec779b8eSAndroid Build Coastguard Worker public: 32*ec779b8eSAndroid Build Coastguard Worker FrameReassembler(); 33*ec779b8eSAndroid Build Coastguard Worker 34*ec779b8eSAndroid Build Coastguard Worker void init( 35*ec779b8eSAndroid Build Coastguard Worker const std::shared_ptr<C2BlockPool> &pool, 36*ec779b8eSAndroid Build Coastguard Worker C2MemoryUsage usage, 37*ec779b8eSAndroid Build Coastguard Worker uint32_t frameSize, 38*ec779b8eSAndroid Build Coastguard Worker uint32_t sampleRate, 39*ec779b8eSAndroid Build Coastguard Worker uint32_t channelCount, 40*ec779b8eSAndroid Build Coastguard Worker C2Config::pcm_encoding_t encoding); 41*ec779b8eSAndroid Build Coastguard Worker void updateFrameSize(uint32_t frameSize); 42*ec779b8eSAndroid Build Coastguard Worker void updateSampleRate(uint32_t sampleRate); 43*ec779b8eSAndroid Build Coastguard Worker void updateChannelCount(uint32_t channelCount); 44*ec779b8eSAndroid Build Coastguard Worker void updatePcmEncoding(C2Config::pcm_encoding_t encoding); 45*ec779b8eSAndroid Build Coastguard Worker void reset(); 46*ec779b8eSAndroid Build Coastguard Worker void flush(); 47*ec779b8eSAndroid Build Coastguard Worker 48*ec779b8eSAndroid Build Coastguard Worker explicit operator bool() const; 49*ec779b8eSAndroid Build Coastguard Worker 50*ec779b8eSAndroid Build Coastguard Worker c2_status_t process( 51*ec779b8eSAndroid Build Coastguard Worker const sp<MediaCodecBuffer> &buffer, 52*ec779b8eSAndroid Build Coastguard Worker std::list<std::unique_ptr<C2Work>> *items); 53*ec779b8eSAndroid Build Coastguard Worker 54*ec779b8eSAndroid Build Coastguard Worker private: 55*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr<C2BlockPool> mBlockPool; 56*ec779b8eSAndroid Build Coastguard Worker C2MemoryUsage mUsage; 57*ec779b8eSAndroid Build Coastguard Worker std::optional<uint32_t> mFrameSize; 58*ec779b8eSAndroid Build Coastguard Worker uint32_t mSampleRate; 59*ec779b8eSAndroid Build Coastguard Worker uint32_t mChannelCount; 60*ec779b8eSAndroid Build Coastguard Worker C2Config::pcm_encoding_t mEncoding; 61*ec779b8eSAndroid Build Coastguard Worker std::list<std::unique_ptr<C2Work>> mPendingWork; 62*ec779b8eSAndroid Build Coastguard Worker C2WorkOrdinalStruct mCurrentOrdinal; 63*ec779b8eSAndroid Build Coastguard Worker std::shared_ptr<C2LinearBlock> mCurrentBlock; 64*ec779b8eSAndroid Build Coastguard Worker std::optional<C2WriteView> mWriteView; 65*ec779b8eSAndroid Build Coastguard Worker 66*ec779b8eSAndroid Build Coastguard Worker uint64_t bytesToSamples(size_t numBytes) const; 67*ec779b8eSAndroid Build Coastguard Worker size_t usToSamples(uint64_t us) const; 68*ec779b8eSAndroid Build Coastguard Worker uint32_t bytesPerSample() const; 69*ec779b8eSAndroid Build Coastguard Worker 70*ec779b8eSAndroid Build Coastguard Worker void finishCurrentBlock(std::list<std::unique_ptr<C2Work>> *items); 71*ec779b8eSAndroid Build Coastguard Worker }; 72*ec779b8eSAndroid Build Coastguard Worker 73*ec779b8eSAndroid Build Coastguard Worker } // namespace android 74*ec779b8eSAndroid Build Coastguard Worker 75*ec779b8eSAndroid Build Coastguard Worker #endif // FRAME_REASSEMBLER_H_ 76