OSDN Git Service

NJ-1422 :- Native crash after record the 1 min video
authorSahil Sachdeva <sahils@google.com>
Mon, 1 Jun 2009 18:34:43 +0000 (11:34 -0700)
committerSahil Sachdeva <sahils@google.com>
Wed, 3 Jun 2009 01:12:40 +0000 (18:12 -0700)
After 1min of recording AuthorEngine issues an internal Stop()
which Stops the MediaInputNode port and queues Stop on MIO component.
MIO component still has some data queued in its queue and keeps sending
data to MediaInputNode. MediaInputNode port does a OsclLeave with OsclErrNotReady
since it has moved to Stopped State. Audio MIO does not handle this leave and leave is
transferred to upper leaves, resulting in Abort. Fixed Audio MIO to handle leave properly
by adding TRY CATCH block around writeAsync call.
TBD - We need to also make sure that leave is caught in PlayerDriver and AuthorDriver rather
thank transferring it to upper layers, so that we can avoid call of abort and avoiding a crash.

android/author/android_audio_input.cpp

index 0d43f85..c34a4eb 100644 (file)
@@ -1131,7 +1131,17 @@ void AndroidAudioInput::SendMicData(void)
     data_hdr.flags=0;
     data_hdr.duration = data.iDuration;
     data_hdr.stream_id=0;
-    uint32 writeAsyncID = iPeer->writeAsync(PVMI_MEDIAXFER_FMT_TYPE_DATA, 0, data.iData, data.iDataLen, data_hdr);
+    int32 err = 0;
+    PVMFCommandId writeAsyncID = 0;
+    OSCL_TRY(err,
+             writeAsyncID = iPeer->writeAsync(PVMI_MEDIAXFER_FMT_TYPE_DATA, 0, data.iData, data.iDataLen, data_hdr);
+            );
+    OSCL_FIRST_CATCH_ANY(err,
+             // send data failed, data sent out in wrong state.
+             LOGE("send data failed");
+             iWriteResponseQueueLock.Unlock();
+             return;
+             );
 
     // Save the id and data pointer on iSentMediaData queue for writeComplete call
     AndroidAudioInputMediaData sentData;