diff options
| author | Jay Wang <jaywang@codeaurora.org> | 2016-06-15 16:14:50 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-07-28 16:14:05 -0700 |
| commit | 723944e1c1c6c1efe1ed1f141f498832d0ce8764 (patch) | |
| tree | 1446009123ec65c5eac39bac98aa0148689ac1c7 /src/com | |
| parent | 396d8b002359c56baa166f29f5fb023ddd450e1b (diff) | |
| download | android_packages_apps_Gallery2-723944e1c1c6c1efe1ed1f141f498832d0ce8764.tar.gz android_packages_apps_Gallery2-723944e1c1c6c1efe1ed1f141f498832d0ce8764.tar.bz2 android_packages_apps_Gallery2-723944e1c1c6c1efe1ed1f141f498832d0ce8764.zip | |
Gallery: Update DDM logic to support Bayer+Mono
Update the MPO parser and ddm logic to support bayer+mono
images and also clearsight images.
CRs-Fixed: 1029184
Change-Id: I9be33acdf958ce8b525453175dfdbf4dadd46aca
Diffstat (limited to 'src/com')
4 files changed, 84 insertions, 38 deletions
diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index cfce7c54a..890458b4b 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -19,8 +19,8 @@ package com.android.gallery3d.filtershow; import java.io.File; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.Vector; import java.util.Locale; +import java.util.Vector; import android.app.ActionBar; import android.app.AlertDialog; @@ -62,10 +62,10 @@ import android.view.Menu; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; -import android.view.Window; import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.view.ViewPropertyAnimator; +import android.view.Window; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; @@ -917,6 +917,11 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL mParseMpoTask.execute(); } else { MasterImage.getImage().setDepthMapLoadingStatus(DdmStatus.DDM_FAILED); + Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); + if (currentPanel instanceof MainPanel) { + MainPanel mainPanel = (MainPanel) currentPanel; + mainPanel.updateDualCameraButton(); + } } } @@ -1190,26 +1195,32 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL } } - private class ParseMpoDataTask extends AsyncTask<Void, Void, byte[]> { + private class ParseMpoDataTask extends AsyncTask<Void, Void, Void> { + private byte[] mPrimaryImgData = null; + private byte[] mAuxImgData = null; + @Override protected void onPreExecute() { MasterImage.getImage().setDepthMapLoadingStatus(DdmStatus.DDM_PARSING); } @Override - protected byte[] doInBackground(Void... params) { + protected Void doInBackground(Void... params) { MpoParser parser = MpoParser.parse(FilterShowActivity.this, MasterImage.getImage().getUri()); - return parser.readImgData(false); + mPrimaryImgData = parser.readImgData(true); + mAuxImgData = parser.readImgData(false); + return null; } @Override - protected void onPostExecute(byte[] result) { - if(result == null) { + protected void onPostExecute(Void result) { + if(mPrimaryImgData == null || + mAuxImgData == null) { // parse failed MasterImage.getImage().setDepthMapLoadingStatus(DdmStatus.DDM_FAILED); } else { mLoadMpoTask = new LoadMpoDataTask(); - mLoadMpoTask.execute(result); + mLoadMpoTask.execute(mPrimaryImgData, mAuxImgData); } Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); @@ -1228,12 +1239,17 @@ public class FilterShowActivity extends FragmentActivity implements OnItemClickL @Override protected Boolean doInBackground(byte[]... params) { - return MasterImage.getImage().loadMpo(params[0]); + return MasterImage.getImage().loadMpo(params[0], params[1]); } @Override protected void onPostExecute(Boolean result) { MasterImage.getImage().setDepthMapLoadingStatus(result?DdmStatus.DDM_LOADED:DdmStatus.DDM_FAILED); + Fragment currentPanel = getSupportFragmentManager().findFragmentByTag(MainPanel.FRAGMENT_TAG); + if (currentPanel instanceof MainPanel) { + MainPanel mainPanel = (MainPanel) currentPanel; + mainPanel.updateDualCameraButton(); + } stopLoadingIndicator(); } } diff --git a/src/com/android/gallery3d/filtershow/category/MainPanel.java b/src/com/android/gallery3d/filtershow/category/MainPanel.java index f4b22e37b..6571c46a3 100644 --- a/src/com/android/gallery3d/filtershow/category/MainPanel.java +++ b/src/com/android/gallery3d/filtershow/category/MainPanel.java @@ -38,6 +38,7 @@ import com.android.gallery3d.filtershow.filters.SimpleMakeupImageFilter; import com.android.gallery3d.filtershow.filters.TrueScannerActs; import com.android.gallery3d.filtershow.imageshow.MasterImage; import com.android.gallery3d.filtershow.state.StatePanel; +import com.android.gallery3d.filtershow.tools.DualCameraNativeEngine; import com.android.gallery3d.filtershow.tools.DualCameraNativeEngine.DdmStatus; public class MainPanel extends Fragment implements BottomPanel.BottomPanelDelegate { @@ -171,6 +172,10 @@ public class MainPanel extends Fragment implements BottomPanel.BottomPanelDelega geometryButton = (ImageButton) bottomPanel.findViewById(R.id.geometryButton); filtersButton = (ImageButton) bottomPanel.findViewById(R.id.colorsButton); dualCamButton = (ImageButton) bottomPanel.findViewById(R.id.dualCamButton); + if(!DualCameraNativeEngine.getInstance().isLibLoaded()) { + dualCamButton.setVisibility(View.GONE); + } + if (SimpleMakeupImageFilter.HAS_TS_MAKEUP) { makeupButton = (ImageButton) bottomPanel.findViewById(R.id.makeupButton); makeupButton.setVisibility(View.VISIBLE); diff --git a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java index fa82989bb..09bf27bd9 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java +++ b/src/com/android/gallery3d/filtershow/imageshow/MasterImage.java @@ -53,7 +53,6 @@ import com.android.gallery3d.filtershow.pipeline.SharedPreset; import com.android.gallery3d.filtershow.state.StateAdapter; import com.android.gallery3d.filtershow.tools.DualCameraNativeEngine; import com.android.gallery3d.filtershow.tools.DualCameraNativeEngine.DdmStatus; -import com.android.gallery3d.mpo.MpoParser; public class MasterImage implements RenderingRequestCaller { @@ -957,11 +956,11 @@ public class MasterImage implements RenderingRequestCaller { return mPreset.contains(FilterRepresentation.TYPE_TINYPLANET); } - public boolean loadMpo(byte[] auxiliaryMpoData) { + public boolean loadMpo(byte[] primaryMpoData, byte[] auxiliaryMpoData) { boolean loaded = false; if(auxiliaryMpoData != null) { - Bitmap primaryBm = ImageLoader.loadBitmap(getActivity(), getUri(), null); + Bitmap primaryBm = BitmapFactory.decodeByteArray(primaryMpoData, 0, primaryMpoData.length); if(primaryBm == null) { return false; diff --git a/src/com/android/gallery3d/mpo/MpoParser.java b/src/com/android/gallery3d/mpo/MpoParser.java index d859c05b4..f865ca061 100644 --- a/src/com/android/gallery3d/mpo/MpoParser.java +++ b/src/com/android/gallery3d/mpo/MpoParser.java @@ -37,6 +37,8 @@ import java.io.InputStream; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.FileChannel; +import java.util.ArrayList; +import java.util.HashMap; import android.content.ContentResolver; import android.content.Context; @@ -62,12 +64,13 @@ public class MpoParser { private int mMpHeaderOffset; private int mIfd1Offset; private int mMpEntryOffset; - private MpEntry mPrimaryEntry; - private MpEntry mSecondaryEntry; + private HashMap<Short, MpoTag> mTags = new HashMap<Short, MpoTag>(); + private ArrayList<MpEntry> mMpEntries = new ArrayList<MpEntry>(); private MpoParser(Context context, Uri uri) { mContentResolver = context.getContentResolver(); mUri = uri; + mTags.clear(); InputStream is = null; try { @@ -136,31 +139,38 @@ public class MpoParser { mDataStream.skipTo(mIfd1Offset); int count = mDataStream.readShort(); // add 6 (2 for count, 4 for offset to next IFD) + for(int i=0; i<count; i++) { + MpoTag tag = readMpoTag(); + mTags.put(tag.mId, tag); + } + mMpEntryOffset = mIfd1Offset + (count*MP_INDEX_FIELD_SIZE_BYTES) + 6; } - private MpEntry readMpEntryData() { - try { - mDataStream.skipTo(mMpEntryOffset); - - mPrimaryEntry = new MpEntry(); - mPrimaryEntry.mImgAttribute = mDataStream.readInt(); - mPrimaryEntry.mImgSize = mDataStream.readInt(); - mPrimaryEntry.mImgDataOffset = mDataStream.readInt(); - mPrimaryEntry.mDepImg1Entry = mDataStream.readShort(); - mPrimaryEntry.mDepImg2Entry = mDataStream.readShort(); - - mSecondaryEntry = new MpEntry(); - mSecondaryEntry.mImgAttribute = mDataStream.readInt(); - mSecondaryEntry.mImgSize = mDataStream.readInt(); - mSecondaryEntry.mImgDataOffset = mDataStream.readInt(); - mSecondaryEntry.mDepImg1Entry = mDataStream.readShort(); - mSecondaryEntry.mDepImg2Entry = mDataStream.readShort(); - } catch (IOException e) { - e.printStackTrace(); - } + private MpoTag readMpoTag() throws IOException { + MpoTag tag = new MpoTag(); + tag.mId = mDataStream.readShort(); + tag.mType = mDataStream.readShort(); + tag.mCount = mDataStream.readInt(); + tag.mData = mDataStream.readInt(); + return tag; + } + + private void readMpEntryData() throws IOException { + MpoTag numImagesTag = mTags.get((short)0xB001); + int numImages = numImagesTag.mData; + + mDataStream.skipTo(mMpEntryOffset); - return mPrimaryEntry; + for(int i=0; i<numImages; i++) { + MpEntry mpEntry = new MpEntry(); + mpEntry.mImgAttribute = mDataStream.readInt(); + mpEntry.mImgSize = mDataStream.readInt(); + mpEntry.mImgDataOffset = mDataStream.readInt(); + mpEntry.mDepImg1Entry = mDataStream.readShort(); + mpEntry.mDepImg2Entry = mDataStream.readShort(); + mMpEntries.add(mpEntry); + } } public byte[] readImgData(boolean primary) { @@ -168,9 +178,17 @@ public class MpoParser { byte[] data = null; if(primary) { - mpEntry = mPrimaryEntry; + if(mMpEntries.size() > 2) { + mpEntry = mMpEntries.get(1); + } else { + mpEntry = mMpEntries.get(0); + } } else { - mpEntry = mSecondaryEntry; + if(mMpEntries.size() > 2) { + mpEntry = mMpEntries.get(2); + } else { + mpEntry = mMpEntries.get(1); + } } if(mpEntry == null) @@ -288,4 +306,12 @@ public class MpoParser { short mDepImg1Entry; short mDepImg2Entry; } -}
\ No newline at end of file + + class MpoTag { + short mId; + short mType; + int mCount; + int mData; + } +} + |
