AudioStreamRecord.h revision e1ce491a25faf06fdeab00dd938515f71f28b095
1e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/*
2e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Copyright 2016 The Android Open Source Project
3e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *
4e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Licensed under the Apache License, Version 2.0 (the "License");
5e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * you may not use this file except in compliance with the License.
6e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * You may obtain a copy of the License at
7e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *
8e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *      http://www.apache.org/licenses/LICENSE-2.0
9e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk *
10e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Unless required by applicable law or agreed to in writing, software
11e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * distributed under the License is distributed on an "AS IS" BASIS,
12e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * See the License for the specific language governing permissions and
14e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * limitations under the License.
15e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */
16e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
17e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#ifndef LEGACY_AUDIOSTREAMRECORD_H
18e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#define LEGACY_AUDIOSTREAMRECORD_H
19e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
20e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include <media/AudioRecord.h>
21e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include <oboe/OboeAudio.h>
22e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
23e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include "AudioStreamBuilder.h"
24e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include "AudioStream.h"
25e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#include "OboeLegacy.h"
26e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
27e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burknamespace oboe {
28e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
29e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk/**
30e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk * Internal stream that uses the legacy AudioTrack path.
31e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk */
32e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkclass AudioStreamRecord : public AudioStream {
33e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkpublic:
34e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    AudioStreamRecord();
35e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
36e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual ~AudioStreamRecord();
37e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
38e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t open(const AudioStreamBuilder & builder) override;
39e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t close() override;
40e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
41e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t requestStart() override;
42e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t requestPause() override;
43e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t requestFlush() override;
44e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t requestStop() override;
45e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
46e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t getTimestamp(clockid_t clockId,
47e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk                                       oboe_position_frames_t *framePosition,
48e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk                                       oboe_nanoseconds_t *timeNanoseconds) override {
49e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk        return OBOE_ERROR_UNIMPLEMENTED; // TODO
50e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    }
51e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
52e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t read(void *buffer,
53e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk                             oboe_size_frames_t numFrames,
54e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk                             oboe_nanoseconds_t timeoutNanoseconds) override;
55e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
56e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t setBufferSize(oboe_size_frames_t requestedFrames,
57e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk                                             oboe_size_frames_t *actualFrames) override;
58e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
59e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_size_frames_t getBufferSize() const override;
60e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
61e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_size_frames_t getBufferCapacity() const override;
62e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
63e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual int32_t getXRunCount() const override;
64e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
65e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_size_frames_t getFramesPerBurst() const override;
66e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
67e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    virtual oboe_result_t updateState() override;
68e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
69e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burkprivate:
70e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    android::sp<android::AudioRecord> mAudioRecord;
71e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    // TODO add 64-bit position reporting to AudioRecord and use it.
72e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    oboe_wrapping_frames_t   mPositionWhenStarting = 0;
73e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk    android::String16        mOpPackageName;
74e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk};
75e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
76e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk} /* namespace oboe */
77e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk
78e1ce491a25faf06fdeab00dd938515f71f28b095Phil Burk#endif /* LEGACY_AUDIOSTREAMRECORD_H */
79