NuPlayerDecoder.h revision 1cd139824b2e6832f239cd27d8962d3239053c02
1f933441648ef6a71dee783d733aac17b9508b452Andreas Huber/* 2f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Copyright (C) 2010 The Android Open Source Project 3f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 4f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * you may not use this file except in compliance with the License. 6f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * You may obtain a copy of the License at 7f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 8f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * 10f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * Unless required by applicable law or agreed to in writing, software 11f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * See the License for the specific language governing permissions and 14f933441648ef6a71dee783d733aac17b9508b452Andreas Huber * limitations under the License. 15f933441648ef6a71dee783d733aac17b9508b452Andreas Huber */ 16f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 17f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#ifndef NUPLAYER_DECODER_H_ 18f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 19f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#define NUPLAYER_DECODER_H_ 20f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 21f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include "NuPlayer.h" 22f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 23f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#include <media/stagefright/foundation/AHandler.h> 24f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 25f933441648ef6a71dee783d733aac17b9508b452Andreas Hubernamespace android { 26f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 275bc087c573c70c84c6a39946457590b42d392a33Andreas Huberstruct ABuffer; 281cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnarstruct MediaCodec; 29f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 30f933441648ef6a71dee783d733aac17b9508b452Andreas Huberstruct NuPlayer::Decoder : public AHandler { 311173118eace0e9e347cb007f0da817cee87579edGlenn Kasten Decoder(const sp<AMessage> ¬ify, 321173118eace0e9e347cb007f0da817cee87579edGlenn Kasten const sp<NativeWindowWrapper> &nativeWindow = NULL); 33f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 34840667883fd09d44015716d79bc3ac4d60edc0f0Andreas Huber void configure(const sp<AMessage> &format); 351cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void init(); 363831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber 37f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void signalFlush(); 38f933441648ef6a71dee783d733aac17b9508b452Andreas Huber void signalResume(); 393831a066bcf1019864a94d2bc7b4c9241efc5c22Andreas Huber void initiateShutdown(); 40f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 416d0a94ead4f6e62b8ca9b2b1d775ffcd0a7a7aabRobert Shih bool supportsSeamlessFormatChange(const sp<AMessage> &to) const; 426d0a94ead4f6e62b8ca9b2b1d775ffcd0a7a7aabRobert Shih 431cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar enum { 441cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatFillThisBuffer = 'flTB', 451cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatDrainThisBuffer = 'drTB', 461cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatOutputFormatChanged = 'fmtC', 471cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatFlushCompleted = 'flsC', 481cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatShutdownCompleted = 'shDC', 491cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatEOS = 'eos ', 501cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatError = 'err ', 511cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar }; 521cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar 53f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprotected: 541cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar 55f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual ~Decoder(); 56f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 57f933441648ef6a71dee783d733aac17b9508b452Andreas Huber virtual void onMessageReceived(const sp<AMessage> &msg); 58f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 59f933441648ef6a71dee783d733aac17b9508b452Andreas Huberprivate: 60f933441648ef6a71dee783d733aac17b9508b452Andreas Huber enum { 61078cfcf7cce9185ec7559910d08b0bc02bfc88a3Andreas Huber kWhatCodecNotify = 'cdcN', 621cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatConfigure = 'conf', 631cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatInputBufferFilled = 'inpF', 641cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatRenderBuffer = 'rndr', 651cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatFlush = 'flus', 661cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar kWhatShutdown = 'shuD', 67f933441648ef6a71dee783d733aac17b9508b452Andreas Huber }; 68f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 69f933441648ef6a71dee783d733aac17b9508b452Andreas Huber sp<AMessage> mNotify; 701173118eace0e9e347cb007f0da817cee87579edGlenn Kasten sp<NativeWindowWrapper> mNativeWindow; 71f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 721cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar sp<AMessage> mInputFormat; 731cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar sp<AMessage> mOutputFormat; 741cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar sp<MediaCodec> mCodec; 75078cfcf7cce9185ec7559910d08b0bc02bfc88a3Andreas Huber sp<ALooper> mCodecLooper; 761cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar sp<ALooper> mDecoderLooper; 771cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar 781cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar Vector<sp<ABuffer> > mInputBuffers; 791cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar Vector<sp<ABuffer> > mOutputBuffers; 801cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar 811cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void handleError(int32_t err); 821cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar bool handleAnInputBuffer(); 831cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar bool handleAnOutputBuffer(); 84f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 851cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void requestCodecNotification(); 861cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar bool isStaleReply(const sp<AMessage> &msg); 87f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 881cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void onConfigure(const sp<AMessage> &format); 891cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void onFlush(); 901cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void onInputBufferFilled(const sp<AMessage> &msg); 911cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void onRenderBuffer(const sp<AMessage> &msg); 921cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar void onShutdown(); 93f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 941cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar int32_t mBufferGeneration; 951cd139824b2e6832f239cd27d8962d3239053c02Lajos Molnar AString mComponentName; 96f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 976d0a94ead4f6e62b8ca9b2b1d775ffcd0a7a7aabRobert Shih bool supportsSeamlessAudioFormatChange(const sp<AMessage> &targetFormat) const; 986d0a94ead4f6e62b8ca9b2b1d775ffcd0a7a7aabRobert Shih 99f933441648ef6a71dee783d733aac17b9508b452Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(Decoder); 100f933441648ef6a71dee783d733aac17b9508b452Andreas Huber}; 101f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 102f933441648ef6a71dee783d733aac17b9508b452Andreas Huber} // namespace android 103f933441648ef6a71dee783d733aac17b9508b452Andreas Huber 104f933441648ef6a71dee783d733aac17b9508b452Andreas Huber#endif // NUPLAYER_DECODER_H_ 105