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