OSDN Git Service

Add an implementation of get_next_write_timestamp.
authorJohn Grossman <johngro@google.com>
Mon, 29 Aug 2011 17:56:08 +0000 (10:56 -0700)
committerJohn Grossman <johngro@google.com>
Wed, 31 Aug 2011 18:49:34 +0000 (11:49 -0700)
Add a default implementation of get_next_write_timestamp to the C <--> C++
legacy audio HAL implementation allowing HALs using the legacy C++
AudioStreamOut to overload and implement get_next_write_timestamp.  Default
implementation returns INVALID_OPERATION to indicate that the functionality is
not supported.

Change-Id: I2f32858197696cb46ba6b96f30acc08e0b737a3f

audio/AudioHardwareInterface.cpp
audio/audio_hw_hal.cpp
include/hardware_legacy/AudioHardwareInterface.h

index 4997a6a..c116669 100644 (file)
@@ -73,6 +73,12 @@ AudioStreamOut::~AudioStreamOut()
 {
 }
 
+// default implementation is unsupported
+status_t AudioStreamOut::getNextWriteTimestamp(int64_t *timestamp)
+{
+    return INVALID_OPERATION;
+}
+
 AudioStreamIn::~AudioStreamIn() {}
 
 AudioHardwareBase::AudioHardwareBase()
@@ -125,6 +131,7 @@ size_t AudioHardwareBase::getInputBufferSize(uint32_t sampleRate, int format, in
     return 320;
 }
 
+// default implementation is unsupported
 status_t AudioHardwareBase::getMasterVolume(float *volume)
 {
     return INVALID_OPERATION;
index f249f88..dd56c80 100644 (file)
@@ -162,6 +162,14 @@ static int out_get_render_position(const struct audio_stream_out *stream,
     return out->legacy_out->getRenderPosition(dsp_frames);
 }
 
+static int out_get_next_write_timestamp(const struct audio_stream_out *stream,
+                                        int64_t *timestamp)
+{
+    const struct legacy_stream_out *out =
+        reinterpret_cast<const struct legacy_stream_out *>(stream);
+    return out->legacy_out->getNextWriteTimestamp(timestamp);
+}
+
 static int out_add_audio_effect(const struct audio_stream *stream, effect_handle_t effect)
 {
     return 0;
@@ -433,6 +441,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev,
     out->stream.set_volume = out_set_volume;
     out->stream.write = out_write;
     out->stream.get_render_position = out_get_render_position;
+    out->stream.get_next_write_timestamp = out_get_next_write_timestamp;
 
     *stream_out = &out->stream;
     return 0;
index 425b0a5..87f933c 100644 (file)
@@ -109,6 +109,13 @@ public:
     // return the number of audio frames written by the audio dsp to DAC since
     // the output has exited standby
     virtual status_t    getRenderPosition(uint32_t *dspFrames) = 0;
+
+    /**
+     * get the local time at which the next write to the audio driver will be
+     * presented
+     */
+    virtual status_t    getNextWriteTimestamp(int64_t *timestamp);
+
 };
 
 /**