14bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard/* 24bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * Copyright (C) 2016 The Android Open Source Project 34bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * 44bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * Licensed under the Apache License, Version 2.0 (the "License"); 54bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * you may not use this file except in compliance with the License. 64bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * You may obtain a copy of the License at 74bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * 84bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * http://www.apache.org/licenses/LICENSE-2.0 94bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * 104bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * Unless required by applicable law or agreed to in writing, software 114bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * distributed under the License is distributed on an "AS IS" BASIS, 124bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * See the License for the specific language governing permissions and 144bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard * limitations under the License. 154bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard */ 164bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1751e076a8fc69d4275cabc3e6d54eab44d590280dKevin Rocard#ifndef ANDROID_HARDWARE_STREAM_HAL_LOCAL_4_0_H 1851e076a8fc69d4275cabc3e6d54eab44d590280dKevin Rocard#define ANDROID_HARDWARE_STREAM_HAL_LOCAL_4_0_H 194bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 204bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard#include <media/audiohal/StreamHalInterface.h> 214bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard#include "StreamPowerLog.h" 224bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 234bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocardnamespace android { 2451e076a8fc69d4275cabc3e6d54eab44d590280dKevin Rocardnamespace V4_0 { 254bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 264bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocardclass DeviceHalLocal; 274bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 284bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocardclass StreamHalLocal : public virtual StreamHalInterface 294bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard{ 304bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard public: 314bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the sampling rate in Hz - eg. 44100. 324bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getSampleRate(uint32_t *rate); 334bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 344bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return size of input/output buffer in bytes for this stream - eg. 4800. 354bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getBufferSize(size_t *size); 364bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 374bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the channel mask. 384bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getChannelMask(audio_channel_mask_t *mask); 394bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 404bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the audio format - e.g. AUDIO_FORMAT_PCM_16_BIT. 414bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getFormat(audio_format_t *format); 424bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 434bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Convenience method. 444bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getAudioProperties( 454bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard uint32_t *sampleRate, audio_channel_mask_t *mask, audio_format_t *format); 464bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 474bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Set audio stream parameters. 484bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t setParameters(const String8& kvPairs); 494bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 504bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Get audio stream parameters. 514bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getParameters(const String8& keys, String8 *values); 524bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 534bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Add or remove the effect on the stream. 544bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t addEffect(sp<EffectHalInterface> effect); 554bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t removeEffect(sp<EffectHalInterface> effect); 564bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 574bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Put the audio hardware input/output into standby mode. 584bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t standby(); 594bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 604bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t dump(int fd); 614bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 624bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Start a stream operating in mmap mode. 634bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t start() = 0; 644bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 654bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Stop a stream operating in mmap mode. 664bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t stop() = 0; 674bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 684bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Retrieve information on the data buffer in mmap mode. 694bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t createMmapBuffer(int32_t minSizeFrames, 704bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard struct audio_mmap_buffer_info *info) = 0; 714bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 724bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Get current read/write position in the mmap buffer 734bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getMmapPosition(struct audio_mmap_position *position) = 0; 744bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 754bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Set the priority of the thread that interacts with the HAL 764bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // (must match the priority of the audioflinger's thread that calls 'read' / 'write') 774bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t setHalThreadPriority(int priority); 784bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 794bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard protected: 804bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Subclasses can not be constructed directly by clients. 814bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard StreamHalLocal(audio_stream_t *stream, sp<DeviceHalLocal> device); 824bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 834bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // The destructor automatically closes the stream. 844bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual ~StreamHalLocal(); 854bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 864bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard sp<DeviceHalLocal> mDevice; 874bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 884bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // mStreamPowerLog is used for audio signal power logging. 894bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard StreamPowerLog mStreamPowerLog; 904bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 914bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard private: 924bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard audio_stream_t *mStream; 934bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard}; 944bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 954bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocardclass StreamOutHalLocal : public StreamOutHalInterface, public StreamHalLocal { 964bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard public: 974bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the frame size (number of bytes per sample) of a stream. 984bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getFrameSize(size_t *size); 994bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1004bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the audio hardware driver estimated latency in milliseconds. 1014bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getLatency(uint32_t *latency); 1024bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1034bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Use this method in situations where audio mixing is done in the hardware. 1044bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t setVolume(float left, float right); 1054bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1064bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Write audio buffer to driver. 1074bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t write(const void *buffer, size_t bytes, size_t *written); 1084bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1094bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the number of audio frames written by the audio dsp to DAC since 1104bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // the output has exited standby. 1114bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getRenderPosition(uint32_t *dspFrames); 1124bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1134bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Get the local time at which the next write to the audio driver will be presented. 1144bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getNextWriteTimestamp(int64_t *timestamp); 1154bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1164bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Set the callback for notifying completion of non-blocking write and drain. 1174bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t setCallback(wp<StreamOutHalInterfaceCallback> callback); 1184bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1194bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Returns whether pause and resume operations are supported. 1204bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t supportsPauseAndResume(bool *supportsPause, bool *supportsResume); 1214bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1224bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Notifies to the audio driver to resume playback following a pause. 1234bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t pause(); 1244bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1254bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Notifies to the audio driver to resume playback following a pause. 1264bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t resume(); 1274bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1284bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Returns whether drain operation is supported. 1294bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t supportsDrain(bool *supportsDrain); 1304bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1314bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Requests notification when data buffered by the driver/hardware has been played. 1324bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t drain(bool earlyNotify); 1334bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1344bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Notifies to the audio driver to flush the queued data. 1354bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t flush(); 1364bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1374bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return a recent count of the number of audio frames presented to an external observer. 1384bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getPresentationPosition(uint64_t *frames, struct timespec *timestamp); 1394bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1404bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Start a stream operating in mmap mode. 1414bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t start(); 1424bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1434bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Stop a stream operating in mmap mode. 1444bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t stop(); 1454bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1464bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Retrieve information on the data buffer in mmap mode. 1474bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t createMmapBuffer(int32_t minSizeFrames, 1484bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard struct audio_mmap_buffer_info *info); 1494bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1504bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Get current read/write position in the mmap buffer 1514bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getMmapPosition(struct audio_mmap_position *position); 1524bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 153a8975a7e857fd745fc88d226d86b53ae088eafb9Kevin Rocard // Called when the metadata of the stream's source has been changed. 154a8975a7e857fd745fc88d226d86b53ae088eafb9Kevin Rocard status_t updateSourceMetadata(const SourceMetadata& sourceMetadata) override; 155a8975a7e857fd745fc88d226d86b53ae088eafb9Kevin Rocard 1564bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard private: 1574bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard audio_stream_out_t *mStream; 1584bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard wp<StreamOutHalInterfaceCallback> mCallback; 1594bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1604bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard friend class DeviceHalLocal; 1614bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1624bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Can not be constructed directly by clients. 1634bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard StreamOutHalLocal(audio_stream_out_t *stream, sp<DeviceHalLocal> device); 1644bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1654bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual ~StreamOutHalLocal(); 1664bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1674bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard static int asyncCallback(stream_callback_event_t event, void *param, void *cookie); 1684bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard}; 1694bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1704bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocardclass StreamInHalLocal : public StreamInHalInterface, public StreamHalLocal { 1714bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard public: 1724bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the frame size (number of bytes per sample) of a stream. 1734bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getFrameSize(size_t *size); 1744bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1754bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Set the input gain for the audio driver. 1764bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t setGain(float gain); 1774bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1784bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Read audio buffer in from driver. 1794bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t read(void *buffer, size_t bytes, size_t *read); 1804bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1814bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return the amount of input frames lost in the audio driver. 1824bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getInputFramesLost(uint32_t *framesLost); 1834bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1844bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Return a recent count of the number of audio frames received and 1854bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // the clock time associated with that frame count. 1864bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getCapturePosition(int64_t *frames, int64_t *time); 1874bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1884bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Start a stream operating in mmap mode. 1894bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t start(); 1904bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1914bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Stop a stream operating in mmap mode. 1924bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t stop(); 1934bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1944bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Retrieve information on the data buffer in mmap mode. 1954bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t createMmapBuffer(int32_t minSizeFrames, 1964bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard struct audio_mmap_buffer_info *info); 1974bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 1984bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Get current read/write position in the mmap buffer 1994bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual status_t getMmapPosition(struct audio_mmap_position *position); 2004bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 2019ff780e58ff96ff98acaae4166bb218880bf9e73jiabin // Get active microphones 2029ff780e58ff96ff98acaae4166bb218880bf9e73jiabin virtual status_t getActiveMicrophones(std::vector<media::MicrophoneInfo> *microphones); 2039ff780e58ff96ff98acaae4166bb218880bf9e73jiabin 204a8975a7e857fd745fc88d226d86b53ae088eafb9Kevin Rocard // Called when the metadata of the stream's sink has been changed. 205a8975a7e857fd745fc88d226d86b53ae088eafb9Kevin Rocard status_t updateSinkMetadata(const SinkMetadata& sinkMetadata) override; 206a8975a7e857fd745fc88d226d86b53ae088eafb9Kevin Rocard 2074bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard private: 2084bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard audio_stream_in_t *mStream; 2094bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 2104bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard friend class DeviceHalLocal; 2114bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 2124bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard // Can not be constructed directly by clients. 2134bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard StreamInHalLocal(audio_stream_in_t *stream, sp<DeviceHalLocal> device); 2144bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 2154bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard virtual ~StreamInHalLocal(); 2164bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard}; 2174bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 21851e076a8fc69d4275cabc3e6d54eab44d590280dKevin Rocard} // namespace V4_0 2194bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard} // namespace android 2204bcd67fbb4eca3654ea929742bdf6ccc7c70daecKevin Rocard 22151e076a8fc69d4275cabc3e6d54eab44d590280dKevin Rocard#endif // ANDROID_HARDWARE_STREAM_HAL_LOCAL_4_0_H 222