OSDN Git Service

The AMRSource failed to properly release a media buffer in case of error.
authorAndreas Huber <andih@google.com>
Tue, 16 Feb 2010 18:46:02 +0000 (10:46 -0800)
committerAndreas Huber <andih@google.com>
Tue, 16 Feb 2010 18:46:02 +0000 (10:46 -0800)
related-to-bug: 2441307

media/libstagefright/AMRExtractor.cpp

index 3193d5e..2a16d26 100644 (file)
@@ -225,27 +225,32 @@ status_t AMRSource::read(
         return ERROR_IO;
     }
 
-    MediaBuffer *buffer;
-    status_t err = mGroup->acquire_buffer(&buffer);
-    if (err != OK) {
-        return err;
-    }
-
     if (header & 0x83) {
         // Padding bits must be 0.
 
+        LOGE("padding bits must be 0, header is 0x%02x", header);
+
         return ERROR_MALFORMED;
     }
 
     unsigned FT = (header >> 3) & 0x0f;
 
     if (FT > 8 || (!mIsWide && FT > 7)) {
+
+        LOGE("illegal AMR frame type %d", FT);
+
         return ERROR_MALFORMED;
     }
 
     size_t frameSize = getFrameSize(mIsWide, FT);
     CHECK_EQ(frameSize, mFrameSize);
 
+    MediaBuffer *buffer;
+    status_t err = mGroup->acquire_buffer(&buffer);
+    if (err != OK) {
+        return err;
+    }
+
     n = mDataSource->readAt(mOffset, buffer->data(), frameSize);
 
     if (n != (ssize_t)frameSize) {