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