OSDN Git Service

Fix bug in test-resample's AudioBufferProvider
authorGlenn Kasten <gkasten@google.com>
Wed, 18 Dec 2013 00:14:04 +0000 (16:14 -0800)
committerGlenn Kasten <gkasten@google.com>
Wed, 18 Dec 2013 00:16:24 +0000 (16:16 -0800)
The contract for AudioBufferProvider::releaseBuffer() was missing.

Bug: 12194314
Change-Id: I2fcf75e7b8eaf6db34f360206d79457a04a73565

include/media/AudioBufferProvider.h
services/audioflinger/test-resample.cpp

index ef392f0..7be449c 100644 (file)
@@ -61,6 +61,17 @@ public:
     //  buffer->frameCount  0
     virtual status_t getNextBuffer(Buffer* buffer, int64_t pts = kInvalidPTS) = 0;
 
+    // Release (a portion of) the buffer previously obtained by getNextBuffer().
+    // It is permissible to call releaseBuffer() multiple times per getNextBuffer().
+    // On entry:
+    //  buffer->frameCount  number of frames to release, must be <= number of frames
+    //                      obtained but not yet released
+    //  buffer->raw         unused
+    // On return:
+    //  buffer->frameCount  0; implementation MUST set to zero
+    //  buffer->raw         undefined; implementation is PERMITTED to set to any value,
+    //                      so if caller needs to continue using this buffer it must
+    //                      keep track of the pointer itself
     virtual void releaseBuffer(Buffer* buffer) = 0;
 };
 
index 0d00a0f..403bb6d 100644 (file)
@@ -202,6 +202,8 @@ int main(int argc, char* argv[]) {
                 mNextFrame += buffer->frameCount;
                 mUnrel -= buffer->frameCount;
             }
+            buffer->frameCount = 0;
+            buffer->i16 = NULL;
         }
     } provider(input_vaddr, input_size, channels);