1388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber/* 2388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * Copyright (C) 2010 The Android Open Source Project 3388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * 4388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * you may not use this file except in compliance with the License. 6388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * You may obtain a copy of the License at 7388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * 8388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * 10388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * Unless required by applicable law or agreed to in writing, software 11388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * See the License for the specific language governing permissions and 14388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber * limitations under the License. 15388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber */ 16388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 17388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber#ifndef VORBIS_DECODER_H_ 18388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 19388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber#define VORBIS_DECODER_H_ 20388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 21388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber#include <media/stagefright/MediaSource.h> 22388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 23388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberstruct vorbis_dsp_state; 24388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberstruct vorbis_info; 25388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 26388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Hubernamespace android { 27388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 28388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberstruct MediaBufferGroup; 29388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 30388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberstruct VorbisDecoder : public MediaSource { 31388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber VorbisDecoder(const sp<MediaSource> &source); 32388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 33388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber virtual status_t start(MetaData *params); 34388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber virtual status_t stop(); 35388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 36388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber virtual sp<MetaData> getFormat(); 37388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 38388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber virtual status_t read( 39388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber MediaBuffer **buffer, const ReadOptions *options); 40388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 41388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberprotected: 42388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber virtual ~VorbisDecoder(); 43388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 44388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huberprivate: 45388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber enum { 46388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber kMaxNumSamplesPerBuffer = 8192 * 2 47388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber }; 48388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 49388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber sp<MediaSource> mSource; 50388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber bool mStarted; 51388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 52388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber MediaBufferGroup *mBufferGroup; 53388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 54388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber int32_t mNumChannels; 55388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber int32_t mSampleRate; 56388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber int64_t mAnchorTimeUs; 57388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber int64_t mNumFramesOutput; 5838ae220bb7c06e3cc82f96dada769c6b12a79d09Andreas Huber int32_t mNumFramesLeftOnPage; 59388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 60388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber vorbis_dsp_state *mState; 61388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber vorbis_info *mVi; 62388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 63388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber int decodePacket(MediaBuffer *packet, MediaBuffer *out); 64388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 65388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber VorbisDecoder(const VorbisDecoder &); 66388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber VorbisDecoder &operator=(const VorbisDecoder &); 67388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber}; 68388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 69388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber} // namespace android 70388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 71388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber#endif // VORBIS_DECODER_H_ 72388379f8b4cabe7bccf280d450a6db2c3149796bAndreas Huber 73