Better support for fake timestamps in RTP, H.263 video now also requests FIR.

Change-Id: I2385461887197fe4062d329086e0204f6d6620fc
diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp
index 86a02f6..e426fca 100644
--- a/media/libstagefright/AwesomePlayer.cpp
+++ b/media/libstagefright/AwesomePlayer.cpp
@@ -1225,7 +1225,10 @@
     } else if (!strcmp("rtsp://gtalk", mUri.string())) {
         if (mLooper == NULL) {
             mLooper = new ALooper;
-            mLooper->start();
+            mLooper->start(
+                    false /* runOnCallingThread */,
+                    false /* canCallJava */,
+                    PRIORITY_HIGHEST);
         }
 
 #if 0
diff --git a/media/libstagefright/rtsp/ARTPConnection.cpp b/media/libstagefright/rtsp/ARTPConnection.cpp
index 9abdab4..5bd306b 100644
--- a/media/libstagefright/rtsp/ARTPConnection.cpp
+++ b/media/libstagefright/rtsp/ARTPConnection.cpp
@@ -405,6 +405,14 @@
     buffer->setInt32Data(u16at(&data[2]));
     buffer->setRange(payloadOffset, size - payloadOffset);
 
+#if IGNORE_RTCP_TIME
+    if (!source->timeEstablished()) {
+        source->timeUpdate(rtpTime, 0);
+        source->timeUpdate(rtpTime + 20, 0x100000000ll);
+        CHECK(source->timeEstablished());
+    }
+#endif
+
     source->processRTPPacket(buffer);
 
     return OK;
@@ -541,12 +549,6 @@
         source = new ARTPSource(
                 srcId, info->mSessionDesc, info->mIndex, info->mNotifyMsg);
 
-#if IGNORE_RTCP_TIME
-        // For H.263 gtalk to work...
-        source->timeUpdate(0, 0);
-        source->timeUpdate(30, 0x100000000ll);
-#endif
-
         info->mSources.add(srcId, source);
     } else {
         source = info->mSources.valueAt(index);
diff --git a/media/libstagefright/rtsp/ARTPSource.cpp b/media/libstagefright/rtsp/ARTPSource.cpp
index 2aa0c1f..e08183e 100644
--- a/media/libstagefright/rtsp/ARTPSource.cpp
+++ b/media/libstagefright/rtsp/ARTPSource.cpp
@@ -58,6 +58,7 @@
     } else if (!strncmp(desc.c_str(), "H263-1998/", 10)
             || !strncmp(desc.c_str(), "H263-2000/", 10)) {
         mAssembler = new AH263Assembler(notify);
+        mIssueFIRRequests = true;
     } else if (!strncmp(desc.c_str(), "AMR/", 4)) {
         mAssembler = new AAMRAssembler(notify, false /* isWide */, params);
     } else  if (!strncmp(desc.c_str(), "AMR-WB/", 7)) {
diff --git a/media/libstagefright/rtsp/ARTPSource.h b/media/libstagefright/rtsp/ARTPSource.h
index 8e483a8..252d6d6 100644
--- a/media/libstagefright/rtsp/ARTPSource.h
+++ b/media/libstagefright/rtsp/ARTPSource.h
@@ -46,6 +46,10 @@
     void addReceiverReport(const sp<ABuffer> &buffer);
     void addFIR(const sp<ABuffer> &buffer);
 
+    bool timeEstablished() const {
+        return mNumTimes == 2;
+    }
+
 private:
     uint32_t mID;
     uint32_t mHighestSeqNumber;