@ -54,9 +54,8 @@ Camera3OutputStream::Camera3OutputStream(int id,
mState = STATE_ERROR ;
}
if ( setId > CAMERA3_STREAM_SET_ID_INVALID ) {
mBufferReleasedListener = new BufferReleasedListener ( this ) ;
}
bool needsReleaseNotify = setId > CAMERA3_STREAM_SET_ID_INVALID ;
mBufferProducerListener = new BufferProducerListener ( this , needsReleaseNotify ) ;
}
Camera3OutputStream : : Camera3OutputStream ( int id ,
@ -87,9 +86,8 @@ Camera3OutputStream::Camera3OutputStream(int id,
mState = STATE_ERROR ;
}
if ( setId > CAMERA3_STREAM_SET_ID_INVALID ) {
mBufferReleasedListener = new BufferReleasedListener ( this ) ;
}
bool needsReleaseNotify = setId > CAMERA3_STREAM_SET_ID_INVALID ;
mBufferProducerListener = new BufferProducerListener ( this , needsReleaseNotify ) ;
}
Camera3OutputStream : : Camera3OutputStream ( int id ,
@ -124,10 +122,8 @@ Camera3OutputStream::Camera3OutputStream(int id,
}
mConsumerName = String8 ( " Deferred " ) ;
if ( setId > CAMERA3_STREAM_SET_ID_INVALID ) {
mBufferReleasedListener = new BufferReleasedListener ( this ) ;
}
bool needsReleaseNotify = setId > CAMERA3_STREAM_SET_ID_INVALID ;
mBufferProducerListener = new BufferProducerListener ( this , needsReleaseNotify ) ;
}
Camera3OutputStream : : Camera3OutputStream ( int id , camera3_stream_type_t type ,
@ -151,9 +147,8 @@ Camera3OutputStream::Camera3OutputStream(int id, camera3_stream_type_t type,
mDropBuffers ( false ) ,
mDequeueBufferLatency ( kDequeueLatencyBinSize ) {
if ( setId > CAMERA3_STREAM_SET_ID_INVALID ) {
mBufferReleasedListener = new BufferReleasedListener ( this ) ;
}
bool needsReleaseNotify = setId > CAMERA3_STREAM_SET_ID_INVALID ;
mBufferProducerListener = new BufferProducerListener ( this , needsReleaseNotify ) ;
// Subclasses expected to initialize mConsumer themselves
}
@ -261,7 +256,7 @@ status_t Camera3OutputStream::returnBufferCheckedLocked(
notifyBufferReleased ( anwBuffer ) ;
if ( mUseBufferManager ) {
// Return this buffer back to buffer manager.
mBuffer Released Listener- > onBufferReleased ( ) ;
mBuffer Producer Listener- > onBufferReleased ( ) ;
}
} else {
if ( mTraceFirstBuffer & & ( stream_type = = CAMERA3_STREAM_OUTPUT ) ) {
@ -387,8 +382,8 @@ status_t Camera3OutputStream::configureConsumerQueueLocked() {
// Configure consumer-side ANativeWindow interface. The listener may be used
// to notify buffer manager (if it is used) of the returned buffers.
res = mConsumer - > connect ( NATIVE_WINDOW_API_CAMERA ,
/* listener*/mBufferReleasedListener ,
/* reportBufferRemoval*/true ) ;
/* reportBufferRemoval*/true ,
/* listener*/mBufferProducerListener ) ;
if ( res ! = OK ) {
ALOGE ( " %s: Unable to connect to native window for stream %d " ,
__FUNCTION__ , mId ) ;
@ -790,7 +785,7 @@ status_t Camera3OutputStream::updateStream(const std::vector<sp<Surface>> &/*out
return INVALID_OPERATION ;
}
void Camera3OutputStream : : Buffer Released Listener: : onBufferReleased ( ) {
void Camera3OutputStream : : Buffer Producer Listener: : onBufferReleased ( ) {
sp < Camera3OutputStream > stream = mParent . promote ( ) ;
if ( stream = = nullptr ) {
ALOGV ( " %s: Parent camera3 output stream was destroyed " , __FUNCTION__ ) ;
@ -823,6 +818,25 @@ void Camera3OutputStream::BufferReleasedListener::onBufferReleased() {
}
}
void Camera3OutputStream : : BufferProducerListener : : onBuffersDiscarded (
const std : : vector < sp < GraphicBuffer > > & buffers ) {
sp < Camera3OutputStream > stream = mParent . promote ( ) ;
if ( stream = = nullptr ) {
ALOGV ( " %s: Parent camera3 output stream was destroyed " , __FUNCTION__ ) ;
return ;
}
if ( buffers . size ( ) > 0 ) {
Mutex : : Autolock l ( stream - > mLock ) ;
stream - > onBuffersRemovedLocked ( buffers ) ;
if ( stream - > mUseBufferManager ) {
stream - > mBufferManager - > onBuffersRemoved ( stream - > getId ( ) ,
stream - > getStreamSetId ( ) , buffers . size ( ) ) ;
}
ALOGV ( " Stream %d: %zu Buffers discarded. " , stream - > getId ( ) , buffers . size ( ) ) ;
}
}
void Camera3OutputStream : : onBuffersRemovedLocked (
const std : : vector < sp < GraphicBuffer > > & removedBuffers ) {
sp < Camera3StreamBufferFreedListener > callback = mBufferFreedListener . promote ( ) ;