OSDN Git Service

Logging to investigate a crash
authorGlenn Kasten <gkasten@google.com>
Fri, 7 Dec 2012 22:13:35 +0000 (14:13 -0800)
committerGlenn Kasten <gkasten@google.com>
Sat, 8 Dec 2012 00:19:09 +0000 (16:19 -0800)
Bug: 6490974
Change-Id: Ib926a9258bde4ee05ed42eea662dff68e426a997

include/media/AudioBufferProvider.h
services/audioflinger/AudioMixer.cpp

index 43e4de7..865ed7e 100644 (file)
@@ -36,8 +36,11 @@ public:
         size_t frameCount;
     };
 
-    virtual ~AudioBufferProvider() {}
+protected:
+    AudioBufferProvider() : mValid(kValid) { }
+    virtual ~AudioBufferProvider() { mValid = kDead; }
 
+public:
     // value representing an invalid presentation timestamp
     static const int64_t kInvalidPTS = 0x7FFFFFFFFFFFFFFFLL;    // <stdint.h> is too painful
 
@@ -47,6 +50,13 @@ public:
     virtual status_t getNextBuffer(Buffer* buffer, int64_t pts = kInvalidPTS) = 0;
 
     virtual void releaseBuffer(Buffer* buffer) = 0;
+
+    int getValid() const { return mValid; }
+    static const int kValid = 'GOOD';
+    static const int kDead = 'DEAD';
+
+private:
+    int mValid;
 };
 
 // ----------------------------------------------------------------------------
index af169d5..1e4049a 100644 (file)
@@ -1098,6 +1098,12 @@ void AudioMixer::process__genericNoResampling(state_t* state, int64_t pts)
         e0 &= ~(1<<i);
         track_t& t = state->tracks[i];
         t.buffer.frameCount = state->frameCount;
+        int valid = t.bufferProvider->getValid();
+        if (valid != AudioBufferProvider::kValid) {
+            ALOGE("invalid bufferProvider=%p name=%d frameCount=%d valid=%#x enabledTracks=%#x",
+                    t.bufferProvider, i, t.buffer.frameCount, valid, enabledTracks);
+            // expect to crash
+        }
         t.bufferProvider->getNextBuffer(&t.buffer, pts);
         t.frameCount = t.buffer.frameCount;
         t.in = t.buffer.raw;