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;
     }