OSDN Git Service

Slighly improve the API to discover if the OMX stack is running in the local
authorAndreas Huber <andih@google.com>
Tue, 31 Jan 2012 19:16:24 +0000 (11:16 -0800)
committerAndreas Huber <andih@google.com>
Tue, 31 Jan 2012 19:16:24 +0000 (11:16 -0800)
process.

Change-Id: Idd3c2f0d4a9542af01a3fdfd3b0bfab90e083505

include/media/IOMX.h
media/libmedia/IOMX.cpp
media/libstagefright/OMXClient.cpp
media/libstagefright/OMXCodec.cpp
media/libstagefright/include/OMX.h
media/libstagefright/omx/OMX.cpp

index c4cc947..a295e9a 100644 (file)
@@ -42,10 +42,10 @@ public:
     typedef void *buffer_id;
     typedef void *node_id;
 
-    // Given the calling process' pid, returns true iff
+    // Given a node_id and the calling process' pid, returns true iff
     // the implementation of the OMX interface lives in the same
     // process.
-    virtual bool livesLocally(pid_t pid) = 0;
+    virtual bool livesLocally(node_id node, pid_t pid) = 0;
 
     struct ComponentInfo {
         String8 mName;
index d2f5f71..27c7e03 100644 (file)
@@ -59,9 +59,10 @@ public:
         : BpInterface<IOMX>(impl) {
     }
 
-    virtual bool livesLocally(pid_t pid) {
+    virtual bool livesLocally(node_id node, pid_t pid) {
         Parcel data, reply;
         data.writeInterfaceToken(IOMX::getInterfaceDescriptor());
+        data.writeIntPtr((intptr_t)node);
         data.writeInt32(pid);
         remote()->transact(LIVES_LOCALLY, data, &reply);
 
@@ -417,7 +418,9 @@ status_t BnOMX::onTransact(
         case LIVES_LOCALLY:
         {
             CHECK_INTERFACE(IOMX, data, reply);
-            reply->writeInt32(livesLocally((pid_t)data.readInt32()));
+            node_id node = (void *)data.readIntPtr();
+            pid_t pid = (pid_t)data.readInt32();
+            reply->writeInt32(livesLocally(node, pid));
 
             return OK;
         }
index 391add5..7a805aa 100644 (file)
@@ -34,7 +34,7 @@ struct MuxOMX : public IOMX {
 
     virtual IBinder *onAsBinder() { return NULL; }
 
-    virtual bool livesLocally(pid_t pid);
+    virtual bool livesLocally(node_id node, pid_t pid);
 
     virtual status_t listNodes(List<ComponentInfo> *list);
 
@@ -155,8 +155,8 @@ const sp<IOMX> &MuxOMX::getOMX_l(node_id node) const {
     return isLocalNode_l(node) ? mLocalOMX : mRemoteOMX;
 }
 
-bool MuxOMX::livesLocally(pid_t pid) {
-    return true;
+bool MuxOMX::livesLocally(node_id node, pid_t pid) {
+    return getOMX(node)->livesLocally(node, pid);
 }
 
 status_t MuxOMX::listNodes(List<ComponentInfo> *list) {
@@ -326,7 +326,7 @@ status_t OMXClient::connect() {
     mOMX = service->getOMX();
     CHECK(mOMX.get() != NULL);
 
-    if (!mOMX->livesLocally(getpid())) {
+    if (!mOMX->livesLocally(NULL /* node */, getpid())) {
         ALOGI("Using client-side OMX mux.");
         mOMX = new MuxOMX(mOMX);
     }
index 7597f64..1f26cbe 100755 (executable)
@@ -1479,7 +1479,7 @@ OMXCodec::OMXCodec(
         const sp<MediaSource> &source,
         const sp<ANativeWindow> &nativeWindow)
     : mOMX(omx),
-      mOMXLivesLocally(omx->livesLocally(getpid())),
+      mOMXLivesLocally(omx->livesLocally(node, getpid())),
       mNode(node),
       mQuirks(quirks),
       mFlags(flags),
index 53e764f..2c87b34 100644 (file)
@@ -31,7 +31,7 @@ class OMX : public BnOMX,
 public:
     OMX();
 
-    virtual bool livesLocally(pid_t pid);
+    virtual bool livesLocally(node_id node, pid_t pid);
 
     virtual status_t listNodes(List<ComponentInfo> *list);
 
index 694b12d..ace883c 100644 (file)
@@ -185,7 +185,7 @@ void OMX::binderDied(const wp<IBinder> &the_late_who) {
     instance->onObserverDied(mMaster);
 }
 
-bool OMX::livesLocally(pid_t pid) {
+bool OMX::livesLocally(node_id node, pid_t pid) {
     return pid == getpid();
 }