1430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroardpackage com.android.gallery3d.filtershow.pipeline;
2430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
3430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroardimport android.graphics.Bitmap;
4430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroardimport com.android.gallery3d.filtershow.filters.FiltersManager;
5430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
6430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroardpublic class FullresRenderingRequestTask extends ProcessingTask {
7430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
8430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    private CachingPipeline mFullresPipeline = null;
9430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    private boolean mPipelineIsOn = false;
10430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
11430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public void setPreviewScaleFactor(float previewScale) {
12430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        mFullresPipeline.setPreviewScaleFactor(previewScale);
13430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
14430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
15430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    static class Render implements Request {
16430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        RenderingRequest request;
17430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
18430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
19430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    static class RenderResult implements Result {
20430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        RenderingRequest request;
21430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
22430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
23430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public FullresRenderingRequestTask() {
24430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        mFullresPipeline = new CachingPipeline(
25430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard                FiltersManager.getHighresManager(), "Fullres");
26430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
27430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
28430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public void setOriginal(Bitmap bitmap) {
29430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        mFullresPipeline.setOriginal(bitmap);
30430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        mPipelineIsOn = true;
31430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
32430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
33430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public void stop() {
34430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        mFullresPipeline.stop();
35430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
36430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
37430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public void postRenderingRequest(RenderingRequest request) {
38430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        if (!mPipelineIsOn) {
39430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard            return;
40430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        }
41430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        Render render = new Render();
42430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        render.request = request;
43430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        postRequest(render);
44430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
45430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
46430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    @Override
47430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public Result doInBackground(Request message) {
48430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        RenderingRequest request = ((Render) message).request;
49430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        RenderResult result = null;
50430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        mFullresPipeline.render(request);
51430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        result = new RenderResult();
52430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        result.request = request;
53430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        return result;
54430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
55430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
56430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    @Override
57430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public void onResult(Result message) {
58430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        if (message == null) {
59430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard            return;
60430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        }
61430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        RenderingRequest request = ((RenderResult) message).request;
62430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        request.markAvailable();
63430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
64430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
65430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    @Override
66430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public boolean isDelayedTask() { return true; }
67430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard}
68