15d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall/* 25d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * Copyright (C) 2014 The Android Open Source Project 35d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * 45d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * Licensed under the Apache License, Version 2.0 (the "License"); 55d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * you may not use this file except in compliance with the License. 65d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * You may obtain a copy of the License at 75d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * 85d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * http://www.apache.org/licenses/LICENSE-2.0 95d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * 105d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * Unless required by applicable law or agreed to in writing, software 115d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * distributed under the License is distributed on an "AS IS" BASIS, 125d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * See the License for the specific language governing permissions and 145d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * limitations under the License. 155d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall */ 165d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall 1712f608f3d2089439a108788a1908941eea4277b9Puneet Lallpackage com.android.camera.one.v2.sharedimagereader.imagedistributor; 185d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall 19de15a5ad14da2e9069642e6f616b66b4ae660e01Puneet Lallimport com.android.camera.async.RefCountBase; 209c94ab32a69a1ad3642a0f1e38e68bcfd97d3511Puneet Lallimport com.android.camera.one.v2.camera2proxy.ForwardingImageProxy; 215d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lallimport com.android.camera.one.v2.camera2proxy.ImageProxy; 225d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall 231738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lallimport javax.annotation.concurrent.ThreadSafe; 241738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall 255d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall/** 265d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * Wraps ImageProxy with reference counting, starting with a fixed number of 275d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * references. 285d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall */ 291738db31add0aea5a6a6f2c137ca6fc476a10237Puneet Lall@ThreadSafe 3012f608f3d2089439a108788a1908941eea4277b9Puneet Lallclass RefCountedImageProxy extends ForwardingImageProxy { 315d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall private final RefCountBase<ImageProxy> mRefCount; 325d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall 335d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall /** 345d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * @param image The image to wrap 355d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall * @param refCount The initial reference count. 365d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall */ 375d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall public RefCountedImageProxy(ImageProxy image, int refCount) { 385d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall super(image); 395d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall mRefCount = new RefCountBase<ImageProxy>(image, refCount); 405d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall } 415d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall 425d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall @Override 435d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall public void close() { 445d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall mRefCount.close(); 455d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall } 465d4fb6accab3bcbe737d52747c328de5cc092d02Puneet Lall} 47