Loading cmds/stagefright/stream.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ #include <media/IStreamSource.h> #include <media/mediaplayer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> #include <binder/IServiceManager.h> #include <media/IMediaPlayerService.h> Loading Loading @@ -56,7 +57,7 @@ void MyStreamSource::onBufferAvailable(size_t index) { ssize_t n = read(mFd, mem->pointer(), mem->size()); if (n <= 0) { mListener->queueCommand(IStreamListener::EOS); mListener->issueCommand(IStreamListener::EOS, false /* synchronous */); } else { mListener->queueBuffer(index, n); } Loading include/media/IStreamSource.h +5 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ namespace android { struct AMessage; struct IMemory; struct IStreamListener; Loading @@ -38,13 +39,14 @@ struct IStreamListener : public IInterface { DECLARE_META_INTERFACE(StreamListener); enum Command { FLUSH, EOS, DISCONTINUITY, EOS }; virtual void queueBuffer(size_t index, size_t size) = 0; virtual void queueCommand(Command cmd) = 0; virtual void issueCommand( Command cmd, bool synchronous, const sp<AMessage> &msg = NULL) = 0; }; //////////////////////////////////////////////////////////////////////////////// Loading include/media/stagefright/foundation/AMessage.h +4 −0 Original line number Diff line number Diff line Loading @@ -26,10 +26,14 @@ namespace android { struct AString; struct Parcel; struct AMessage : public RefBase { AMessage(uint32_t what = 0, ALooper::handler_id target = 0); static sp<AMessage> FromParcel(const Parcel &parcel); void writeToParcel(Parcel *parcel) const; void setWhat(uint32_t what); uint32_t what() const; Loading media/libmedia/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -36,7 +36,8 @@ LOCAL_SRC_FILES:= \ fixedfft.cpp.arm LOCAL_SHARED_LIBRARIES := \ libui libcutils libutils libbinder libsonivox libicuuc libexpat libsurfaceflinger_client libcamera_client libui libcutils libutils libbinder libsonivox libicuuc libexpat \ libsurfaceflinger_client libcamera_client libstagefright_foundation LOCAL_MODULE:= libmedia Loading media/libmedia/IStreamSource.cpp +23 −5 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <utils/Log.h> #include <media/IStreamSource.h> #include <media/stagefright/foundation/AMessage.h> #include <binder/IMemory.h> #include <binder/Parcel.h> Loading @@ -33,7 +34,7 @@ enum { // IStreamListener QUEUE_BUFFER, QUEUE_COMMAND, ISSUE_COMMAND, }; struct BpStreamSource : public BpInterface<IStreamSource> { Loading Loading @@ -125,12 +126,21 @@ struct BpStreamListener : public BpInterface<IStreamListener> { remote()->transact(QUEUE_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); } virtual void queueCommand(Command cmd) { virtual void issueCommand( Command cmd, bool synchronous, const sp<AMessage> &msg) { Parcel data, reply; data.writeInterfaceToken(IStreamListener::getInterfaceDescriptor()); data.writeInt32(static_cast<int32_t>(cmd)); data.writeInt32(static_cast<int32_t>(synchronous)); remote()->transact(QUEUE_COMMAND, data, &reply, IBinder::FLAG_ONEWAY); if (msg != NULL) { data.writeInt32(1); msg->writeToParcel(&data); } else { data.writeInt32(0); } remote()->transact(ISSUE_COMMAND, data, &reply, IBinder::FLAG_ONEWAY); } }; Loading @@ -149,12 +159,20 @@ status_t BnStreamListener::onTransact( break; } case QUEUE_COMMAND: case ISSUE_COMMAND: { CHECK_INTERFACE(IStreamListener, data, reply); Command cmd = static_cast<Command>(data.readInt32()); queueCommand(cmd); bool synchronous = static_cast<bool>(data.readInt32()); sp<AMessage> msg; if (data.readInt32()) { msg = AMessage::FromParcel(data); } issueCommand(cmd, synchronous, msg); break; } Loading Loading
cmds/stagefright/stream.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ #include <media/IStreamSource.h> #include <media/mediaplayer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> #include <binder/IServiceManager.h> #include <media/IMediaPlayerService.h> Loading Loading @@ -56,7 +57,7 @@ void MyStreamSource::onBufferAvailable(size_t index) { ssize_t n = read(mFd, mem->pointer(), mem->size()); if (n <= 0) { mListener->queueCommand(IStreamListener::EOS); mListener->issueCommand(IStreamListener::EOS, false /* synchronous */); } else { mListener->queueBuffer(index, n); } Loading
include/media/IStreamSource.h +5 −3 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ namespace android { struct AMessage; struct IMemory; struct IStreamListener; Loading @@ -38,13 +39,14 @@ struct IStreamListener : public IInterface { DECLARE_META_INTERFACE(StreamListener); enum Command { FLUSH, EOS, DISCONTINUITY, EOS }; virtual void queueBuffer(size_t index, size_t size) = 0; virtual void queueCommand(Command cmd) = 0; virtual void issueCommand( Command cmd, bool synchronous, const sp<AMessage> &msg = NULL) = 0; }; //////////////////////////////////////////////////////////////////////////////// Loading
include/media/stagefright/foundation/AMessage.h +4 −0 Original line number Diff line number Diff line Loading @@ -26,10 +26,14 @@ namespace android { struct AString; struct Parcel; struct AMessage : public RefBase { AMessage(uint32_t what = 0, ALooper::handler_id target = 0); static sp<AMessage> FromParcel(const Parcel &parcel); void writeToParcel(Parcel *parcel) const; void setWhat(uint32_t what); uint32_t what() const; Loading
media/libmedia/Android.mk +2 −1 Original line number Diff line number Diff line Loading @@ -36,7 +36,8 @@ LOCAL_SRC_FILES:= \ fixedfft.cpp.arm LOCAL_SHARED_LIBRARIES := \ libui libcutils libutils libbinder libsonivox libicuuc libexpat libsurfaceflinger_client libcamera_client libui libcutils libutils libbinder libsonivox libicuuc libexpat \ libsurfaceflinger_client libcamera_client libstagefright_foundation LOCAL_MODULE:= libmedia Loading
media/libmedia/IStreamSource.cpp +23 −5 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ #include <utils/Log.h> #include <media/IStreamSource.h> #include <media/stagefright/foundation/AMessage.h> #include <binder/IMemory.h> #include <binder/Parcel.h> Loading @@ -33,7 +34,7 @@ enum { // IStreamListener QUEUE_BUFFER, QUEUE_COMMAND, ISSUE_COMMAND, }; struct BpStreamSource : public BpInterface<IStreamSource> { Loading Loading @@ -125,12 +126,21 @@ struct BpStreamListener : public BpInterface<IStreamListener> { remote()->transact(QUEUE_BUFFER, data, &reply, IBinder::FLAG_ONEWAY); } virtual void queueCommand(Command cmd) { virtual void issueCommand( Command cmd, bool synchronous, const sp<AMessage> &msg) { Parcel data, reply; data.writeInterfaceToken(IStreamListener::getInterfaceDescriptor()); data.writeInt32(static_cast<int32_t>(cmd)); data.writeInt32(static_cast<int32_t>(synchronous)); remote()->transact(QUEUE_COMMAND, data, &reply, IBinder::FLAG_ONEWAY); if (msg != NULL) { data.writeInt32(1); msg->writeToParcel(&data); } else { data.writeInt32(0); } remote()->transact(ISSUE_COMMAND, data, &reply, IBinder::FLAG_ONEWAY); } }; Loading @@ -149,12 +159,20 @@ status_t BnStreamListener::onTransact( break; } case QUEUE_COMMAND: case ISSUE_COMMAND: { CHECK_INTERFACE(IStreamListener, data, reply); Command cmd = static_cast<Command>(data.readInt32()); queueCommand(cmd); bool synchronous = static_cast<bool>(data.readInt32()); sp<AMessage> msg; if (data.readInt32()) { msg = AMessage::FromParcel(data); } issueCommand(cmd, synchronous, msg); break; } Loading