Loading include/media/stagefright/SurfaceMediaSource.h +6 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ class GraphicBuffer; // may be dropped. It is possible to wait for the buffers to be // returned (but not implemented) #define DEBUG_PENDING_BUFFERS 0 class SurfaceMediaSource : public MediaSource, public MediaBufferObserver, protected BufferQueue::ConsumerListener { Loading Loading @@ -169,6 +171,10 @@ private: size_t mNumPendingBuffers; #if DEBUG_PENDING_BUFFERS Vector<MediaBuffer *> mPendingBuffers; #endif // mCurrentTimestamp is the timestamp for the current texture. It // gets set to mLastQueuedTimestamp each time updateTexImage is called. int64_t mCurrentTimestamp; Loading media/libstagefright/ACodec.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -2471,6 +2471,9 @@ bool ACodec::BaseState::onOMXEmptyBufferDone(IOMX::buffer_id bufferID) { // by this "mediaBuffer" object. Now that the OMX component has // told us that it's done with the input buffer, we can decrement // the mediaBuffer's reference count. ALOGV("releasing mbuf %p", mediaBuffer); ((MediaBuffer *)mediaBuffer)->release(); mediaBuffer = NULL; Loading media/libstagefright/SurfaceMediaSource.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,23 @@ status_t SurfaceMediaSource::stop() ALOGV("stop"); Mutex::Autolock lock(mMutex); if (mStopped) { return OK; } while (mNumPendingBuffers > 0) { ALOGI("Still waiting for %d buffers to be returned.", mNumPendingBuffers); #if DEBUG_PENDING_BUFFERS for (size_t i = 0; i < mPendingBuffers.size(); ++i) { ALOGI("%d: %p", i, mPendingBuffers.itemAt(i)); } #endif mMediaBuffersAvailableCondition.wait(mMutex); } mStopped = true; mFrameAvailableCondition.signal(); mMediaBuffersAvailableCondition.signal(); Loading Loading @@ -335,6 +352,12 @@ status_t SurfaceMediaSource::read( MediaBuffer **buffer, ++mNumPendingBuffers; #if DEBUG_PENDING_BUFFERS mPendingBuffers.push_back(*buffer); #endif ALOGV("returning mbuf %p", *buffer); return OK; } Loading Loading @@ -391,6 +414,15 @@ void SurfaceMediaSource::signalBufferReturned(MediaBuffer *buffer) { CHECK(!"signalBufferReturned: bogus buffer"); } #if DEBUG_PENDING_BUFFERS for (size_t i = 0; i < mPendingBuffers.size(); ++i) { if (mPendingBuffers.itemAt(i) == buffer) { mPendingBuffers.removeAt(i); break; } } #endif --mNumPendingBuffers; mMediaBuffersAvailableCondition.broadcast(); } Loading media/libstagefright/wifi-display/ANetworkSession.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -176,7 +176,7 @@ ANetworkSession::Session::Session( } ANetworkSession::Session::~Session() { ALOGI("Session %d gone", mSessionID); ALOGV("Session %d gone", mSessionID); close(mSocket); mSocket = -1; Loading Loading @@ -1084,7 +1084,7 @@ void ANetworkSession::threadLoop() { } else { status_t err = session->readMore(); if (err != OK) { ALOGI("readMore on socket %d failed w/ error %d (%s)", ALOGE("readMore on socket %d failed w/ error %d (%s)", s, err, strerror(-err)); } } Loading @@ -1093,7 +1093,7 @@ void ANetworkSession::threadLoop() { if (FD_ISSET(s, &ws)) { status_t err = session->writeMore(); if (err != OK) { ALOGI("writeMore on socket %d failed w/ error %d (%s)", ALOGE("writeMore on socket %d failed w/ error %d (%s)", s, err, strerror(-err)); } } Loading media/libstagefright/wifi-display/source/Converter.cpp +75 −30 Original line number Diff line number Diff line Loading @@ -20,12 +20,15 @@ #include "Converter.h" #include "MediaPuller.h" #include <cutils/properties.h> #include <gui/SurfaceTextureClient.h> #include <media/ICrypto.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> Loading Loading @@ -53,14 +56,12 @@ Converter::Converter( } Converter::~Converter() { if (mEncoder != NULL) { mEncoder->release(); mEncoder.clear(); CHECK(mEncoder == NULL); } AString mime; CHECK(mInputFormat->findString("mime", &mime)); ALOGI("encoder (%s) shut down.", mime.c_str()); void Converter::shutdownAsync() { ALOGV("shutdown"); (new AMessage(kWhatShutdown, id()))->post(); } status_t Converter::initCheck() const { Loading Loading @@ -155,16 +156,6 @@ status_t Converter::initEncoder() { return mEncoder->getOutputBuffers(&mEncoderOutputBuffers); } void Converter::feedAccessUnit(const sp<ABuffer> &accessUnit) { sp<AMessage> msg = new AMessage(kWhatFeedAccessUnit, id()); msg->setBuffer("accessUnit", accessUnit); msg->post(); } void Converter::signalEOS() { (new AMessage(kWhatInputEOS, id()))->post(); } void Converter::notifyError(status_t err) { sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatError); Loading @@ -174,32 +165,70 @@ void Converter::notifyError(status_t err) { void Converter::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatFeedAccessUnit: case kWhatMediaPullerNotify: { int32_t what; CHECK(msg->findInt32("what", &what)); if (mEncoder == NULL) { ALOGV("got msg '%s' after encoder shutdown.", msg->debugString().c_str()); if (what == MediaPuller::kWhatAccessUnit) { sp<ABuffer> accessUnit; CHECK(msg->findBuffer("accessUnit", &accessUnit)); mInputBufferQueue.push_back(accessUnit); void *mbuf; if (accessUnit->meta()->findPointer("mediaBuffer", &mbuf) && mbuf != NULL) { ALOGV("releasing mbuf %p", mbuf); feedEncoderInputBuffers(); accessUnit->meta()->setPointer("mediaBuffer", NULL); scheduleDoMoreWork(); static_cast<MediaBuffer *>(mbuf)->release(); mbuf = NULL; } } break; } case kWhatInputEOS: { if (what == MediaPuller::kWhatEOS) { mInputBufferQueue.push_back(NULL); feedEncoderInputBuffers(); scheduleDoMoreWork(); } else { CHECK_EQ(what, MediaPuller::kWhatAccessUnit); sp<ABuffer> accessUnit; CHECK(msg->findBuffer("accessUnit", &accessUnit)); #if 0 void *mbuf; if (accessUnit->meta()->findPointer("mediaBuffer", &mbuf) && mbuf != NULL) { ALOGI("queueing mbuf %p", mbuf); } #endif mInputBufferQueue.push_back(accessUnit); feedEncoderInputBuffers(); scheduleDoMoreWork(); } break; } case kWhatDoMoreWork: { mDoMoreWorkPending = false; if (mEncoder == NULL) { break; } status_t err = doMoreWork(); if (err != OK) { Loading @@ -212,6 +241,10 @@ void Converter::onMessageReceived(const sp<AMessage> &msg) { case kWhatRequestIDRFrame: { if (mEncoder == NULL) { break; } if (mIsVideo) { ALOGI("requesting IDR frame"); mEncoder->requestIDRFrame(); Loading @@ -219,6 +252,18 @@ void Converter::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatShutdown: { ALOGI("shutting down encoder"); mEncoder->release(); mEncoder.clear(); AString mime; CHECK(mInputFormat->findString("mime", &mime)); ALOGI("encoder (%s) shut down.", mime.c_str()); break; } default: TRESPASS(); } Loading Loading
include/media/stagefright/SurfaceMediaSource.h +6 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,8 @@ class GraphicBuffer; // may be dropped. It is possible to wait for the buffers to be // returned (but not implemented) #define DEBUG_PENDING_BUFFERS 0 class SurfaceMediaSource : public MediaSource, public MediaBufferObserver, protected BufferQueue::ConsumerListener { Loading Loading @@ -169,6 +171,10 @@ private: size_t mNumPendingBuffers; #if DEBUG_PENDING_BUFFERS Vector<MediaBuffer *> mPendingBuffers; #endif // mCurrentTimestamp is the timestamp for the current texture. It // gets set to mLastQueuedTimestamp each time updateTexImage is called. int64_t mCurrentTimestamp; Loading
media/libstagefright/ACodec.cpp +3 −0 Original line number Diff line number Diff line Loading @@ -2471,6 +2471,9 @@ bool ACodec::BaseState::onOMXEmptyBufferDone(IOMX::buffer_id bufferID) { // by this "mediaBuffer" object. Now that the OMX component has // told us that it's done with the input buffer, we can decrement // the mediaBuffer's reference count. ALOGV("releasing mbuf %p", mediaBuffer); ((MediaBuffer *)mediaBuffer)->release(); mediaBuffer = NULL; Loading
media/libstagefright/SurfaceMediaSource.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -191,6 +191,23 @@ status_t SurfaceMediaSource::stop() ALOGV("stop"); Mutex::Autolock lock(mMutex); if (mStopped) { return OK; } while (mNumPendingBuffers > 0) { ALOGI("Still waiting for %d buffers to be returned.", mNumPendingBuffers); #if DEBUG_PENDING_BUFFERS for (size_t i = 0; i < mPendingBuffers.size(); ++i) { ALOGI("%d: %p", i, mPendingBuffers.itemAt(i)); } #endif mMediaBuffersAvailableCondition.wait(mMutex); } mStopped = true; mFrameAvailableCondition.signal(); mMediaBuffersAvailableCondition.signal(); Loading Loading @@ -335,6 +352,12 @@ status_t SurfaceMediaSource::read( MediaBuffer **buffer, ++mNumPendingBuffers; #if DEBUG_PENDING_BUFFERS mPendingBuffers.push_back(*buffer); #endif ALOGV("returning mbuf %p", *buffer); return OK; } Loading Loading @@ -391,6 +414,15 @@ void SurfaceMediaSource::signalBufferReturned(MediaBuffer *buffer) { CHECK(!"signalBufferReturned: bogus buffer"); } #if DEBUG_PENDING_BUFFERS for (size_t i = 0; i < mPendingBuffers.size(); ++i) { if (mPendingBuffers.itemAt(i) == buffer) { mPendingBuffers.removeAt(i); break; } } #endif --mNumPendingBuffers; mMediaBuffersAvailableCondition.broadcast(); } Loading
media/libstagefright/wifi-display/ANetworkSession.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -176,7 +176,7 @@ ANetworkSession::Session::Session( } ANetworkSession::Session::~Session() { ALOGI("Session %d gone", mSessionID); ALOGV("Session %d gone", mSessionID); close(mSocket); mSocket = -1; Loading Loading @@ -1084,7 +1084,7 @@ void ANetworkSession::threadLoop() { } else { status_t err = session->readMore(); if (err != OK) { ALOGI("readMore on socket %d failed w/ error %d (%s)", ALOGE("readMore on socket %d failed w/ error %d (%s)", s, err, strerror(-err)); } } Loading @@ -1093,7 +1093,7 @@ void ANetworkSession::threadLoop() { if (FD_ISSET(s, &ws)) { status_t err = session->writeMore(); if (err != OK) { ALOGI("writeMore on socket %d failed w/ error %d (%s)", ALOGE("writeMore on socket %d failed w/ error %d (%s)", s, err, strerror(-err)); } } Loading
media/libstagefright/wifi-display/source/Converter.cpp +75 −30 Original line number Diff line number Diff line Loading @@ -20,12 +20,15 @@ #include "Converter.h" #include "MediaPuller.h" #include <cutils/properties.h> #include <gui/SurfaceTextureClient.h> #include <media/ICrypto.h> #include <media/stagefright/foundation/ABuffer.h> #include <media/stagefright/foundation/ADebug.h> #include <media/stagefright/foundation/AMessage.h> #include <media/stagefright/MediaBuffer.h> #include <media/stagefright/MediaCodec.h> #include <media/stagefright/MediaDefs.h> #include <media/stagefright/MediaErrors.h> Loading Loading @@ -53,14 +56,12 @@ Converter::Converter( } Converter::~Converter() { if (mEncoder != NULL) { mEncoder->release(); mEncoder.clear(); CHECK(mEncoder == NULL); } AString mime; CHECK(mInputFormat->findString("mime", &mime)); ALOGI("encoder (%s) shut down.", mime.c_str()); void Converter::shutdownAsync() { ALOGV("shutdown"); (new AMessage(kWhatShutdown, id()))->post(); } status_t Converter::initCheck() const { Loading Loading @@ -155,16 +156,6 @@ status_t Converter::initEncoder() { return mEncoder->getOutputBuffers(&mEncoderOutputBuffers); } void Converter::feedAccessUnit(const sp<ABuffer> &accessUnit) { sp<AMessage> msg = new AMessage(kWhatFeedAccessUnit, id()); msg->setBuffer("accessUnit", accessUnit); msg->post(); } void Converter::signalEOS() { (new AMessage(kWhatInputEOS, id()))->post(); } void Converter::notifyError(status_t err) { sp<AMessage> notify = mNotify->dup(); notify->setInt32("what", kWhatError); Loading @@ -174,32 +165,70 @@ void Converter::notifyError(status_t err) { void Converter::onMessageReceived(const sp<AMessage> &msg) { switch (msg->what()) { case kWhatFeedAccessUnit: case kWhatMediaPullerNotify: { int32_t what; CHECK(msg->findInt32("what", &what)); if (mEncoder == NULL) { ALOGV("got msg '%s' after encoder shutdown.", msg->debugString().c_str()); if (what == MediaPuller::kWhatAccessUnit) { sp<ABuffer> accessUnit; CHECK(msg->findBuffer("accessUnit", &accessUnit)); mInputBufferQueue.push_back(accessUnit); void *mbuf; if (accessUnit->meta()->findPointer("mediaBuffer", &mbuf) && mbuf != NULL) { ALOGV("releasing mbuf %p", mbuf); feedEncoderInputBuffers(); accessUnit->meta()->setPointer("mediaBuffer", NULL); scheduleDoMoreWork(); static_cast<MediaBuffer *>(mbuf)->release(); mbuf = NULL; } } break; } case kWhatInputEOS: { if (what == MediaPuller::kWhatEOS) { mInputBufferQueue.push_back(NULL); feedEncoderInputBuffers(); scheduleDoMoreWork(); } else { CHECK_EQ(what, MediaPuller::kWhatAccessUnit); sp<ABuffer> accessUnit; CHECK(msg->findBuffer("accessUnit", &accessUnit)); #if 0 void *mbuf; if (accessUnit->meta()->findPointer("mediaBuffer", &mbuf) && mbuf != NULL) { ALOGI("queueing mbuf %p", mbuf); } #endif mInputBufferQueue.push_back(accessUnit); feedEncoderInputBuffers(); scheduleDoMoreWork(); } break; } case kWhatDoMoreWork: { mDoMoreWorkPending = false; if (mEncoder == NULL) { break; } status_t err = doMoreWork(); if (err != OK) { Loading @@ -212,6 +241,10 @@ void Converter::onMessageReceived(const sp<AMessage> &msg) { case kWhatRequestIDRFrame: { if (mEncoder == NULL) { break; } if (mIsVideo) { ALOGI("requesting IDR frame"); mEncoder->requestIDRFrame(); Loading @@ -219,6 +252,18 @@ void Converter::onMessageReceived(const sp<AMessage> &msg) { break; } case kWhatShutdown: { ALOGI("shutting down encoder"); mEncoder->release(); mEncoder.clear(); AString mime; CHECK(mInputFormat->findString("mime", &mime)); ALOGI("encoder (%s) shut down.", mime.c_str()); break; } default: TRESPASS(); } Loading