13df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard/*
23df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * Copyright (C) 2013 The Android Open Source Project
33df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard *
43df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
53df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * you may not use this file except in compliance with the License.
63df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * You may obtain a copy of the License at
73df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard *
83df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
93df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard *
103df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * Unless required by applicable law or agreed to in writing, software
113df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
123df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
133df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * See the License for the specific language governing permissions and
143df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard * limitations under the License.
153df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard */
163df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
17ce9ceff5776a9b0479c30cbeb2a9388b44df1865nicolasroardpackage com.android.gallery3d.filtershow.pipeline;
183df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
19db5d060e8077f70d650e1ce56618f953114551e0nicolasroardimport android.content.Context;
203df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroardimport android.graphics.Bitmap;
21e5498da0262fc836738aad63ea30286d8afa643cnicolasroardimport android.graphics.Rect;
223df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroardimport com.android.gallery3d.app.Log;
23db5d060e8077f70d650e1ce56618f953114551e0nicolasroardimport com.android.gallery3d.filtershow.FilterShowActivity;
24ec1e009a7faea0478e361bc2d48d856ab48a0209nicolasroardimport com.android.gallery3d.filtershow.cache.BitmapCache;
25b75da4c91e16bbd83cd839207224c0645a6ecefdnicolasroardimport com.android.gallery3d.filtershow.filters.FiltersManager;
26ecdda817f112286ac6bab2ac4bf508e7dd8609acJohn Hofordimport com.android.gallery3d.filtershow.imageshow.MasterImage;
273df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
283df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroardpublic class RenderingRequest {
293df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private static final String LOGTAG = "RenderingRequest";
303df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private boolean mIsDirect = false;
313df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private Bitmap mBitmap = null;
323df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private ImagePreset mImagePreset = null;
336ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard    private ImagePreset mOriginalImagePreset = null;
343df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private RenderingRequestCaller mCaller = null;
35f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard    private float mScaleFactor = 1.0f;
36e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    private Rect mBounds = null;
37e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    private Rect mDestination = null;
3832cc4dd751569721aa19218b4d947145577060d0nicolasroard    private Rect mIconBounds = null;
393df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private int mType = FULL_RENDERING;
40e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public static final int FULL_RENDERING = 0;
41e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public static final int FILTERS_RENDERING = 1;
42e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public static final int GEOMETRY_RENDERING = 2;
43e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public static final int ICON_RENDERING = 3;
44e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public static final int PARTIAL_RENDERING = 4;
454dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard    public static final int HIGHRES_RENDERING = 5;
464ee3cfd8a59f5daaf271b67c2f634d72290d45d0John Hoford    public static final int STYLE_ICON_RENDERING = 6;
474ee3cfd8a59f5daaf271b67c2f634d72290d45d0John Hoford
483df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    private static final Bitmap.Config mConfig = Bitmap.Config.ARGB_8888;
493df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
50db5d060e8077f70d650e1ce56618f953114551e0nicolasroard    public static void post(Context context, Bitmap source, ImagePreset preset,
51db5d060e8077f70d650e1ce56618f953114551e0nicolasroard                            int type, RenderingRequestCaller caller) {
52db5d060e8077f70d650e1ce56618f953114551e0nicolasroard        RenderingRequest.post(context, source, preset, type, caller, null, null);
53e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
54e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
55db5d060e8077f70d650e1ce56618f953114551e0nicolasroard    public static void post(Context context, Bitmap source, ImagePreset preset, int type,
56e5498da0262fc836738aad63ea30286d8afa643cnicolasroard                            RenderingRequestCaller caller, Rect bounds, Rect destination) {
579f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard        if (((type != PARTIAL_RENDERING && type != HIGHRES_RENDERING
589f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard                && type != GEOMETRY_RENDERING && type != FILTERS_RENDERING) && source == null)
594dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard                || preset == null || caller == null) {
604dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard            Log.v(LOGTAG, "something null: source: " + source
614dad1a9e3f213e95a4f419c06ea885fee75d3297nicolasroard                    + " or preset: " + preset + " or caller: " + caller);
623df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard            return;
633df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        }
643df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        RenderingRequest request = new RenderingRequest();
653df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        Bitmap bitmap = null;
66e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        if (type == FULL_RENDERING
674ee3cfd8a59f5daaf271b67c2f634d72290d45d0John Hoford                || type == ICON_RENDERING
684ee3cfd8a59f5daaf271b67c2f634d72290d45d0John Hoford                || type == STYLE_ICON_RENDERING) {
69b75da4c91e16bbd83cd839207224c0645a6ecefdnicolasroard            CachingPipeline pipeline = new CachingPipeline(
70b75da4c91e16bbd83cd839207224c0645a6ecefdnicolasroard                    FiltersManager.getManager(), "Icon");
71b75da4c91e16bbd83cd839207224c0645a6ecefdnicolasroard            bitmap = pipeline.renderGeometryIcon(source, preset);
729f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard        } else if (type != PARTIAL_RENDERING && type != HIGHRES_RENDERING
739f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard                && type != GEOMETRY_RENDERING && type != FILTERS_RENDERING) {
749f452e09889199a28a86d9bd8f8fdaa8508ca0c1nicolasroard            bitmap = MasterImage.getImage().getBitmapCache().getBitmap(
75ec1e009a7faea0478e361bc2d48d856ab48a0209nicolasroard                    source.getWidth(), source.getHeight(), BitmapCache.RENDERING_REQUEST);
763df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        }
77e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
783df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        request.setBitmap(bitmap);
79ecdda817f112286ac6bab2ac4bf508e7dd8609acJohn Hoford        ImagePreset passedPreset = new ImagePreset(preset);
806ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard        request.setOriginalImagePreset(preset);
81f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard        request.setScaleFactor(MasterImage.getImage().getScaleFactor());
82e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
83e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        if (type == PARTIAL_RENDERING) {
84e5498da0262fc836738aad63ea30286d8afa643cnicolasroard            request.setBounds(bounds);
85e5498da0262fc836738aad63ea30286d8afa643cnicolasroard            request.setDestination(destination);
86e5498da0262fc836738aad63ea30286d8afa643cnicolasroard            passedPreset.setPartialRendering(true, bounds);
87e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        }
88e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
89ecdda817f112286ac6bab2ac4bf508e7dd8609acJohn Hoford        request.setImagePreset(passedPreset);
903df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        request.setType(type);
913df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        request.setCaller(caller);
92db5d060e8077f70d650e1ce56618f953114551e0nicolasroard        request.post(context);
933df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
943df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
9532cc4dd751569721aa19218b4d947145577060d0nicolasroard    public static void postIconRequest(Context context, int w, int h,
9632cc4dd751569721aa19218b4d947145577060d0nicolasroard                                       ImagePreset preset,
9732cc4dd751569721aa19218b4d947145577060d0nicolasroard                                       RenderingRequestCaller caller) {
9832cc4dd751569721aa19218b4d947145577060d0nicolasroard        if (preset == null || caller == null) {
9932cc4dd751569721aa19218b4d947145577060d0nicolasroard            Log.v(LOGTAG, "something null, preset: "
10032cc4dd751569721aa19218b4d947145577060d0nicolasroard                    + preset + " or caller: " + caller);
10132cc4dd751569721aa19218b4d947145577060d0nicolasroard            return;
10232cc4dd751569721aa19218b4d947145577060d0nicolasroard        }
10332cc4dd751569721aa19218b4d947145577060d0nicolasroard        RenderingRequest request = new RenderingRequest();
10432cc4dd751569721aa19218b4d947145577060d0nicolasroard        ImagePreset passedPreset = new ImagePreset(preset);
10532cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.setOriginalImagePreset(preset);
10632cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.setScaleFactor(MasterImage.getImage().getScaleFactor());
10732cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.setImagePreset(passedPreset);
10832cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.setType(RenderingRequest.ICON_RENDERING);
10932cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.setCaller(caller);
11032cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.setIconBounds(new Rect(0, 0, w, h));
11132cc4dd751569721aa19218b4d947145577060d0nicolasroard        request.post(context);
11232cc4dd751569721aa19218b4d947145577060d0nicolasroard    }
11332cc4dd751569721aa19218b4d947145577060d0nicolasroard
114db5d060e8077f70d650e1ce56618f953114551e0nicolasroard    public void post(Context context) {
115db5d060e8077f70d650e1ce56618f953114551e0nicolasroard        if (context instanceof FilterShowActivity) {
116db5d060e8077f70d650e1ce56618f953114551e0nicolasroard            FilterShowActivity activity = (FilterShowActivity) context;
117db5d060e8077f70d650e1ce56618f953114551e0nicolasroard            ProcessingService service = activity.getProcessingService();
118db5d060e8077f70d650e1ce56618f953114551e0nicolasroard            service.postRenderingRequest(this);
119db5d060e8077f70d650e1ce56618f953114551e0nicolasroard        }
1203df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1213df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1223df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public void markAvailable() {
1233df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        if (mBitmap == null || mImagePreset == null
1243df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard                || mCaller == null) {
1253df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard            return;
1263df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        }
1273df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        mCaller.available(this);
1283df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1293df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1303df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public boolean isDirect() {
1313df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        return mIsDirect;
1323df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1333df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1343df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public void setDirect(boolean isDirect) {
1353df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        mIsDirect = isDirect;
1363df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1373df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1383df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public Bitmap getBitmap() {
1393df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        return mBitmap;
1403df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1413df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1423df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public void setBitmap(Bitmap bitmap) {
1433df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        mBitmap = bitmap;
1443df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1453df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1463df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public ImagePreset getImagePreset() {
1473df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        return mImagePreset;
1483df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1493df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1503df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public void setImagePreset(ImagePreset imagePreset) {
1513df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        mImagePreset = imagePreset;
1523df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1533df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1543df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public int getType() {
1553df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        return mType;
1563df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1573df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1583df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public void setType(int type) {
1593df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        mType = type;
1603df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
1613df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard
1623df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    public void setCaller(RenderingRequestCaller caller) {
1633df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard        mCaller = caller;
1643df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard    }
165e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
166e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public Rect getBounds() {
167e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        return mBounds;
168e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
169e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
170e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public void setBounds(Rect bounds) {
171e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        mBounds = bounds;
172e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
173e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
174f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard    public void setScaleFactor(float scaleFactor) {
175f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard        mScaleFactor = scaleFactor;
176f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard    }
177f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard
178f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard    public float getScaleFactor() {
179f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard        return mScaleFactor;
180f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard    }
181f3bcc676e245727b20c7d6123cb39361e84b1dc9nicolasroard
182e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public Rect getDestination() {
183e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        return mDestination;
184e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
185e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
186e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public void setDestination(Rect destination) {
187e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        mDestination = destination;
188e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
1896ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard
19032cc4dd751569721aa19218b4d947145577060d0nicolasroard    public void setIconBounds(Rect bounds) {
19132cc4dd751569721aa19218b4d947145577060d0nicolasroard        mIconBounds = bounds;
19232cc4dd751569721aa19218b4d947145577060d0nicolasroard    }
19332cc4dd751569721aa19218b4d947145577060d0nicolasroard
19432cc4dd751569721aa19218b4d947145577060d0nicolasroard    public Rect getIconBounds() {
19532cc4dd751569721aa19218b4d947145577060d0nicolasroard        return mIconBounds;
19632cc4dd751569721aa19218b4d947145577060d0nicolasroard    }
19732cc4dd751569721aa19218b4d947145577060d0nicolasroard
1986ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard    public ImagePreset getOriginalImagePreset() {
1996ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard        return mOriginalImagePreset;
2006ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard    }
2016ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard
2026ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard    public void setOriginalImagePreset(ImagePreset originalImagePreset) {
2036ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard        mOriginalImagePreset = originalImagePreset;
2046ee7feeefec9e99ea6b98408323a416214d0e817nicolasroard    }
2053df4f831396ffbc11e4bbee0b6150794e8e44e0bnicolasroard}
206