FilmView.java revision 704ff64b099406bb328898a7443921f22dbffd6d
1462d11b880cba72584c135397c0a82618ab63217Jason Sams/* 2462d11b880cba72584c135397c0a82618ab63217Jason Sams * Copyright (C) 2008 The Android Open Source Project 3462d11b880cba72584c135397c0a82618ab63217Jason Sams * 4462d11b880cba72584c135397c0a82618ab63217Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5462d11b880cba72584c135397c0a82618ab63217Jason Sams * you may not use this file except in compliance with the License. 6462d11b880cba72584c135397c0a82618ab63217Jason Sams * You may obtain a copy of the License at 7462d11b880cba72584c135397c0a82618ab63217Jason Sams * 8462d11b880cba72584c135397c0a82618ab63217Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9462d11b880cba72584c135397c0a82618ab63217Jason Sams * 10462d11b880cba72584c135397c0a82618ab63217Jason Sams * Unless required by applicable law or agreed to in writing, software 11462d11b880cba72584c135397c0a82618ab63217Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12462d11b880cba72584c135397c0a82618ab63217Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13462d11b880cba72584c135397c0a82618ab63217Jason Sams * See the License for the specific language governing permissions and 14462d11b880cba72584c135397c0a82618ab63217Jason Sams * limitations under the License. 15462d11b880cba72584c135397c0a82618ab63217Jason Sams */ 16462d11b880cba72584c135397c0a82618ab63217Jason Sams 17462d11b880cba72584c135397c0a82618ab63217Jason Samspackage com.android.film; 18462d11b880cba72584c135397c0a82618ab63217Jason Sams 19462d11b880cba72584c135397c0a82618ab63217Jason Samsimport java.io.Writer; 20462d11b880cba72584c135397c0a82618ab63217Jason Samsimport java.util.ArrayList; 21462d11b880cba72584c135397c0a82618ab63217Jason Samsimport java.util.concurrent.Semaphore; 22462d11b880cba72584c135397c0a82618ab63217Jason Sams 23462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.renderscript.RSSurfaceView; 24462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.renderscript.RenderScript; 25704ff64b099406bb328898a7443921f22dbffd6dJason Samsimport android.renderscript.RenderScriptGL; 26462d11b880cba72584c135397c0a82618ab63217Jason Sams 27462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.content.Context; 28462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.content.res.Resources; 29462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.graphics.Bitmap; 30462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.graphics.drawable.BitmapDrawable; 31462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.graphics.drawable.Drawable; 32462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.os.Handler; 33462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.os.Message; 34462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.util.AttributeSet; 35462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.util.Log; 36462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.view.Surface; 37462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.view.SurfaceHolder; 38462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.view.SurfaceView; 39462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.view.KeyEvent; 40462d11b880cba72584c135397c0a82618ab63217Jason Samsimport android.view.MotionEvent; 41462d11b880cba72584c135397c0a82618ab63217Jason Sams 42462d11b880cba72584c135397c0a82618ab63217Jason Samspublic class FilmView extends RSSurfaceView { 43462d11b880cba72584c135397c0a82618ab63217Jason Sams 44462d11b880cba72584c135397c0a82618ab63217Jason Sams public FilmView(Context context) { 45462d11b880cba72584c135397c0a82618ab63217Jason Sams super(context); 46462d11b880cba72584c135397c0a82618ab63217Jason Sams //setFocusable(true); 47462d11b880cba72584c135397c0a82618ab63217Jason Sams } 48462d11b880cba72584c135397c0a82618ab63217Jason Sams 49704ff64b099406bb328898a7443921f22dbffd6dJason Sams private RenderScriptGL mRS; 50462d11b880cba72584c135397c0a82618ab63217Jason Sams private FilmRS mRender; 51462d11b880cba72584c135397c0a82618ab63217Jason Sams 52d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams 53462d11b880cba72584c135397c0a82618ab63217Jason Sams public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) { 54462d11b880cba72584c135397c0a82618ab63217Jason Sams super.surfaceChanged(holder, format, w, h); 55d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams if (mRS == null) { 567efde12a03b8d56c9344d5586d76336806638f11Jason Sams mRS = createRenderScript(true); 57d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams mRS.contextSetSurface(w, h, holder.getSurface()); 58d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams mRender = new FilmRS(); 59d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams mRender.init(mRS, getResources(), w, h); 60d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams } 61d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams } 62462d11b880cba72584c135397c0a82618ab63217Jason Sams 63d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams @Override 64d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams protected void onDetachedFromWindow() { 65d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams if(mRS != null) { 66d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams mRS = null; 67d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams destroyRenderScript(); 68d10824dadc658e20ed85cd47fe4364b659a7fe2aJason Sams } 69462d11b880cba72584c135397c0a82618ab63217Jason Sams } 70462d11b880cba72584c135397c0a82618ab63217Jason Sams 71462d11b880cba72584c135397c0a82618ab63217Jason Sams @Override 72462d11b880cba72584c135397c0a82618ab63217Jason Sams public boolean onKeyDown(int keyCode, KeyEvent event) 73462d11b880cba72584c135397c0a82618ab63217Jason Sams { 74462d11b880cba72584c135397c0a82618ab63217Jason Sams // break point at here 75462d11b880cba72584c135397c0a82618ab63217Jason Sams // this method doesn't work when 'extends View' include 'extends ScrollView'. 76462d11b880cba72584c135397c0a82618ab63217Jason Sams return super.onKeyDown(keyCode, event); 77462d11b880cba72584c135397c0a82618ab63217Jason Sams } 78462d11b880cba72584c135397c0a82618ab63217Jason Sams 79462d11b880cba72584c135397c0a82618ab63217Jason Sams 80462d11b880cba72584c135397c0a82618ab63217Jason Sams @Override 81462d11b880cba72584c135397c0a82618ab63217Jason Sams public boolean onTouchEvent(MotionEvent ev) 82462d11b880cba72584c135397c0a82618ab63217Jason Sams { 83462d11b880cba72584c135397c0a82618ab63217Jason Sams boolean ret = true; 84462d11b880cba72584c135397c0a82618ab63217Jason Sams int act = ev.getAction(); 85462d11b880cba72584c135397c0a82618ab63217Jason Sams if (act == ev.ACTION_UP) { 86462d11b880cba72584c135397c0a82618ab63217Jason Sams ret = false; 87462d11b880cba72584c135397c0a82618ab63217Jason Sams } 88faf1520be77aa01903f9ad87990377f44e185224Jason Sams mRender.setFilmStripPosition((int)ev.getX(), (int)ev.getY() / 5); 89462d11b880cba72584c135397c0a82618ab63217Jason Sams return ret; 90462d11b880cba72584c135397c0a82618ab63217Jason Sams } 91462d11b880cba72584c135397c0a82618ab63217Jason Sams} 92462d11b880cba72584c135397c0a82618ab63217Jason Sams 93462d11b880cba72584c135397c0a82618ab63217Jason Sams 94