/*
 * Copyright (C) 2012 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 CTSAUDIO_AUDIOPLAYBACKLOCAL_H
#define CTSAUDIO_AUDIOPLAYBACKLOCAL_H

#include <utils/String8.h>

#include <tinyalsa/asoundlib.h>

#include "AudioLocal.h"


class AudioPlaybackLocal: public AudioLocal {
public:
    explicit AudioPlaybackLocal(int hwId);
    virtual ~AudioPlaybackLocal();
protected:
    bool doPrepare(AudioHardware::SamplingRate, int samplesInOneGo);
    bool doPlaybackOrRecord(android::sp<Buffer>& buffer);
    void doStop();
    void releaseHw();

private:
    int mHwId;
    struct pcm* mPcmHandle;
    // unit playback samples
    int mSamples;
    // unit playback sizes
    int mSizes;
};


#endif // CTSAUDIO_AUDIOPLAYBACKLOCAL_H
