123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- * Copyright 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef NUPLAYER2_DECODER_BASE_H_
- #define NUPLAYER2_DECODER_BASE_H_
- #include "NuPlayer2.h"
- #include <media/stagefright/foundation/AHandler.h>
- namespace android {
- struct ABuffer;
- struct ANativeWindowWrapper;
- struct MediaCodec;
- class MediaBuffer;
- class MediaCodecBuffer;
- struct NuPlayer2::DecoderBase : public AHandler {
- explicit DecoderBase(const sp<AMessage> ¬ify);
- void configure(const sp<AMessage> &format);
- void init();
- void setParameters(const sp<AMessage> ¶ms);
- // Synchronous call to ensure decoder will not request or send out data.
- void pause();
- void setRenderer(const sp<Renderer> &renderer);
- virtual status_t setVideoSurface(const sp<ANativeWindowWrapper> &) { return INVALID_OPERATION; }
- void signalFlush();
- void signalResume(bool notifyComplete);
- void initiateShutdown();
- virtual sp<AMessage> getStats() const {
- return mStats;
- }
- virtual status_t releaseCrypto() {
- return INVALID_OPERATION;
- }
- enum {
- kWhatInputDiscontinuity = 'inDi',
- kWhatVideoSizeChanged = 'viSC',
- kWhatFlushCompleted = 'flsC',
- kWhatShutdownCompleted = 'shDC',
- kWhatResumeCompleted = 'resC',
- kWhatEOS = 'eos ',
- kWhatError = 'err ',
- };
- protected:
- virtual ~DecoderBase();
- void stopLooper();
- virtual void onMessageReceived(const sp<AMessage> &msg);
- virtual void onConfigure(const sp<AMessage> &format) = 0;
- virtual void onSetParameters(const sp<AMessage> ¶ms) = 0;
- virtual void onSetRenderer(const sp<Renderer> &renderer) = 0;
- virtual void onResume(bool notifyComplete) = 0;
- virtual void onFlush() = 0;
- virtual void onShutdown(bool notifyComplete) = 0;
- void onRequestInputBuffers();
- virtual bool doRequestBuffers() = 0;
- virtual void handleError(int32_t err);
- sp<AMessage> mNotify;
- int32_t mBufferGeneration;
- bool mPaused;
- sp<AMessage> mStats;
- private:
- enum {
- kWhatConfigure = 'conf',
- kWhatSetParameters = 'setP',
- kWhatSetRenderer = 'setR',
- kWhatPause = 'paus',
- kWhatRequestInputBuffers = 'reqB',
- kWhatFlush = 'flus',
- kWhatShutdown = 'shuD',
- };
- sp<ALooper> mDecoderLooper;
- bool mRequestInputBuffersPending;
- DISALLOW_EVIL_CONSTRUCTORS(DecoderBase);
- };
- } // namespace android
- #endif // NUPLAYER2_DECODER_BASE_H_
|