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