1db5d060e8077f70d650e1ce56618f953114551e0nicolasroard/* 2db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * Copyright (C) 2013 The Android Open Source Project 3db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * 4db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * Licensed under the Apache License, Version 2.0 (the "License"); 5db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * you may not use this file except in compliance with the License. 6db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * You may obtain a copy of the License at 7db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * 8db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * http://www.apache.org/licenses/LICENSE-2.0 9db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * 10db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * Unless required by applicable law or agreed to in writing, software 11db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * distributed under the License is distributed on an "AS IS" BASIS, 12db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * See the License for the specific language governing permissions and 14db5d060e8077f70d650e1ce56618f953114551e0nicolasroard * limitations under the License. 15db5d060e8077f70d650e1ce56618f953114551e0nicolasroard */ 16db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 17db5d060e8077f70d650e1ce56618f953114551e0nicolasroardpackage com.android.gallery3d.filtershow.pipeline; 18db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 19db5d060e8077f70d650e1ce56618f953114551e0nicolasroardimport android.graphics.Bitmap; 2032cc4dd751569721aa19218b4d947145577060d0nicolasroard 21db5d060e8077f70d650e1ce56618f953114551e0nicolasroardimport com.android.gallery3d.filtershow.filters.FiltersManager; 22db5d060e8077f70d650e1ce56618f953114551e0nicolasroardimport com.android.gallery3d.filtershow.imageshow.MasterImage; 23db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 24db5d060e8077f70d650e1ce56618f953114551e0nicolasroardpublic class UpdatePreviewTask extends ProcessingTask { 2532cc4dd751569721aa19218b4d947145577060d0nicolasroard private static final String LOGTAG = "UpdatePreviewTask"; 26db5d060e8077f70d650e1ce56618f953114551e0nicolasroard private CachingPipeline mPreviewPipeline = null; 27db5d060e8077f70d650e1ce56618f953114551e0nicolasroard private boolean mHasUnhandledPreviewRequest = false; 28db5d060e8077f70d650e1ce56618f953114551e0nicolasroard private boolean mPipelineIsOn = false; 29db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 30db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public UpdatePreviewTask() { 31db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mPreviewPipeline = new CachingPipeline( 32db5d060e8077f70d650e1ce56618f953114551e0nicolasroard FiltersManager.getPreviewManager(), "Preview"); 33db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 34db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 35db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public void setOriginal(Bitmap bitmap) { 36db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mPreviewPipeline.setOriginal(bitmap); 37db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mPipelineIsOn = true; 38db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 39db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 40db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public void updatePreview() { 41db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (!mPipelineIsOn) { 42db5d060e8077f70d650e1ce56618f953114551e0nicolasroard return; 43db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 44db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mHasUnhandledPreviewRequest = true; 45db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (postRequest(null)) { 46db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mHasUnhandledPreviewRequest = false; 47db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 48db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 49db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 50db5d060e8077f70d650e1ce56618f953114551e0nicolasroard @Override 51db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public boolean isPriorityTask() { 52db5d060e8077f70d650e1ce56618f953114551e0nicolasroard return true; 53db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 54db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 55db5d060e8077f70d650e1ce56618f953114551e0nicolasroard @Override 56db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public Result doInBackground(Request message) { 57db5d060e8077f70d650e1ce56618f953114551e0nicolasroard SharedBuffer buffer = MasterImage.getImage().getPreviewBuffer(); 58db5d060e8077f70d650e1ce56618f953114551e0nicolasroard SharedPreset preset = MasterImage.getImage().getPreviewPreset(); 59db5d060e8077f70d650e1ce56618f953114551e0nicolasroard ImagePreset renderingPreset = preset.dequeuePreset(); 60db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (renderingPreset != null) { 61db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mPreviewPipeline.compute(buffer, renderingPreset, 0); 62db5d060e8077f70d650e1ce56618f953114551e0nicolasroard // set the preset we used in the buffer for later inspection UI-side 63db5d060e8077f70d650e1ce56618f953114551e0nicolasroard buffer.getProducer().setPreset(renderingPreset); 64db5d060e8077f70d650e1ce56618f953114551e0nicolasroard buffer.getProducer().sync(); 65db5d060e8077f70d650e1ce56618f953114551e0nicolasroard buffer.swapProducer(); // push back the result 66db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 67db5d060e8077f70d650e1ce56618f953114551e0nicolasroard return null; 68db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 69db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 70db5d060e8077f70d650e1ce56618f953114551e0nicolasroard @Override 71db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public void onResult(Result message) { 72db5d060e8077f70d650e1ce56618f953114551e0nicolasroard MasterImage.getImage().notifyObservers(); 73db5d060e8077f70d650e1ce56618f953114551e0nicolasroard if (mHasUnhandledPreviewRequest) { 74db5d060e8077f70d650e1ce56618f953114551e0nicolasroard updatePreview(); 75db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 76db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 77db5d060e8077f70d650e1ce56618f953114551e0nicolasroard 78db5d060e8077f70d650e1ce56618f953114551e0nicolasroard public void setPipelineIsOn(boolean pipelineIsOn) { 79db5d060e8077f70d650e1ce56618f953114551e0nicolasroard mPipelineIsOn = pipelineIsOn; 80db5d060e8077f70d650e1ce56618f953114551e0nicolasroard } 81db5d060e8077f70d650e1ce56618f953114551e0nicolasroard} 82