1bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber/* 2bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Copyright (C) 2011 The Android Open Source Project 3bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * 4bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * you may not use this file except in compliance with the License. 6bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * You may obtain a copy of the License at 7bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * 8bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * 10bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Unless required by applicable law or agreed to in writing, software 11bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * See the License for the specific language governing permissions and 14bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * limitations under the License. 15bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber */ 16bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 17bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#ifndef SOFT_VORBIS_H_ 18bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 19bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#define SOFT_VORBIS_H_ 20bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 21bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include "SimpleSoftOMXComponent.h" 22bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 23bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct vorbis_dsp_state; 24bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct vorbis_info; 25bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 26bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubernamespace android { 27bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 28bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct SoftVorbis : public SimpleSoftOMXComponent { 29bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber SoftVorbis(const char *name, 30bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber const OMX_CALLBACKTYPE *callbacks, 31bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR appData, 32bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_COMPONENTTYPE **component); 33bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 34bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprotected: 35bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual ~SoftVorbis(); 36bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 37bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE internalGetParameter( 38bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, OMX_PTR params); 39bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 40bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE internalSetParameter( 41bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 42bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual void onQueueFilled(OMX_U32 portIndex); 44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual void onPortFlushCompleted(OMX_U32 portIndex); 45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual void onPortEnableCompleted(OMX_U32 portIndex, bool enabled); 466fc72b01a3b67903b52f1d33b1ad5c960b5365f1Marco Nelissen virtual void onReset(); 47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprivate: 49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber enum { 50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber kNumBuffers = 4, 51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber kMaxNumSamplesPerBuffer = 8192 * 2 52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber }; 53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber size_t mInputBufferCount; 55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber vorbis_dsp_state *mState; 57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber vorbis_info *mVi; 58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber int64_t mAnchorTimeUs; 60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber int64_t mNumFramesOutput; 61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber int32_t mNumFramesLeftOnPage; 62d089c2540e4f0897c166693f4f13e2023241720eMarco Nelissen bool mSawInputEos; 63d089c2540e4f0897c166693f4f13e2023241720eMarco Nelissen bool mSignalledOutputEos; 641277aea8405ea3256a2b0f730506c4610cadafa4Marco Nelissen bool mSignalledError; 65bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 66bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber enum { 67bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber NONE, 68bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber AWAITING_DISABLED, 69bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber AWAITING_ENABLED 70bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber } mOutputPortSettingsChange; 71bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 72bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void initPorts(); 73bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber status_t initDecoder(); 74bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber bool isConfigured() const; 75bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 76bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(SoftVorbis); 77bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}; 78bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 79bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber} // namespace android 80bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 81bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#endif // SOFT_VORBIS_H_ 82bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 83