RIO-7671:(Part A MIO fixes) MIO should unregister the observer when the clock is reset.
http://b/issue?id=2171037
diff --git a/android/author/android_audio_input.cpp b/android/author/android_audio_input.cpp
index 27bb681..e2fcc0d 100644
--- a/android/author/android_audio_input.cpp
+++ b/android/author/android_audio_input.cpp
@@ -1360,6 +1360,10 @@
else if (pv_mime_strcmp(aKvp->key, PVMF_AUTHORING_CLOCK_KEY) == 0)
{
LOGV("AndroidAudioInput::VerifyAndSetParameter() PVMF_AUTHORING_CLOCK_KEY value %p", aKvp->value.key_specific_value);
+ if( (NULL == aKvp->value.key_specific_value) && ( iAuthorClock ) )
+ {
+ RemoveDestroyClockStateObs();
+ }
iAuthorClock = (PVMFMediaClock*) aKvp->value.key_specific_value;
return PVMFSuccess;
}
diff --git a/android/author/android_camera_input.cpp b/android/author/android_camera_input.cpp
index c703ea4..943cbca 100644
--- a/android/author/android_camera_input.cpp
+++ b/android/author/android_camera_input.cpp
@@ -1064,7 +1064,11 @@
else if (pv_mime_strcmp(aKvp->key, PVMF_AUTHORING_CLOCK_KEY) == 0)
{
LOGV("AndroidCameraInput::VerifyAndSetParameter() PVMF_AUTHORING_CLOCK_KEY value %p", aKvp->value.key_specific_value);
- iAuthorClock = (PVMFMediaClock*)aKvp->value.key_specific_value;
+ if( (NULL == aKvp->value.key_specific_value) && ( iAuthorClock ) )
+ {
+ RemoveDestroyClockObs();
+ }
+ iAuthorClock = (PVMFMediaClock*)aKvp->value.key_specific_value;
return PVMFSuccess;
}
@@ -1116,8 +1120,15 @@
return PVMFFailure;
}
- if((!iPeer) || (!isRecorderStarting()) || (iWriteState == EWriteBusy) || (iAuthorClock->GetState() != PVMFMediaClock::RUNNING)) {
- LOGE("Recording is not ready (iPeer %p iState %d iWriteState %d iClockState %d), frame dropped", iPeer, iState, iWriteState, iAuthorClock->GetState());
+ if((!iPeer) || (!isRecorderStarting()) || (iWriteState == EWriteBusy) || (NULL == iAuthorClock) || (iAuthorClock->GetState() != PVMFMediaClock::RUNNING)) {
+ if( NULL == iAuthorClock )
+ {
+ LOGE("Recording is not ready (iPeer %p iState %d iWriteState %d iAuthorClock NULL), frame dropped", iPeer, iState, iWriteState);
+ }
+ else
+ {
+ LOGE("Recording is not ready (iPeer %p iState %d iWriteState %d iClockState %d), frame dropped", iPeer, iState, iWriteState, iAuthorClock->GetState());
+ }
mCamera->releaseRecordingFrame(frame);
return PVMFSuccess;
}