From 521e435d5d63fc76097e6667ba5ef9bcd1393a7b Mon Sep 17 00:00:00 2001
From: houxiao <houxiao@454eff88-639b-444f-9e54-f578c98de674>
Date: 星期二, 25 四月 2017 16:35:32 +0800
Subject: [PATCH] bug fix

---
 VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java |  230 ++++++++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 179 insertions(+), 51 deletions(-)

diff --git a/VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java b/VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java
index ada6508..779b16f 100644
--- a/VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java
+++ b/VisitFace/RtspNativeCodec/app/src/main/java/com/example/nativecodec/NativeCodec.java
@@ -17,8 +17,9 @@
 package com.example.nativecodec;
 
 import android.app.Activity;
-import android.content.res.AssetManager;
+import android.graphics.PixelFormat;
 import android.graphics.SurfaceTexture;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.Surface;
@@ -30,10 +31,21 @@
 import android.widget.Button;
 import android.widget.CompoundButton;
 import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.ImageButton;
+import android.widget.ImageView;
 import android.widget.RadioButton;
 import android.widget.Spinner;
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.util.AttributeSet;
+import android.widget.Button;
 
-import java.io.IOException;
+import java.nio.ByteBuffer;
+
+import cn.com.basic.face.util.NativeImg;
+import cn.com.basic.face.util.RtspFaceNative;
 
 public class NativeCodec extends Activity {
     static final String TAG = "NativeCodec";
@@ -52,17 +64,26 @@
     boolean mCreated = false;
     boolean mIsPlaying = false;
 
+    public static NativeImg faceImg = null;
+
     /** Called when the activity is first created. */
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         setContentView(R.layout.main);
 
+        ThisActivity = this;
+
+        RtspFaceNative.init();
+        RtspFaceNative.setLocalIP("192.168.1.10");
+
         mGLView1 = (MyGLSurfaceView) findViewById(R.id.glsurfaceview1);
 
         // set up the Surface 1 video sink
         mSurfaceView1 = (SurfaceView) findViewById(R.id.surfaceview1);
         mSurfaceHolder1 = mSurfaceView1.getHolder();
+
+
 
         mSurfaceHolder1.addCallback(new SurfaceHolder.Callback() {
 
@@ -76,7 +97,7 @@
             public void surfaceCreated(SurfaceHolder holder) {
                 Log.v(TAG, "surfaceCreated");
                 if (mRadio1.isChecked()) {
-                    setSurface(holder.getSurface());
+                    //setSurface(1, holder.getSurface());
                 }
             }
 
@@ -114,33 +135,37 @@
 
         OnCheckedChangeListener checklistener = new CompoundButton.OnCheckedChangeListener() {
 
-          @Override
-          public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-              Log.i("@@@@", "oncheckedchanged");
-              if (buttonView == mRadio1 && isChecked) {
-                  mRadio2.setChecked(false);
-              }
-              if (buttonView == mRadio2 && isChecked) {
-                  mRadio1.setChecked(false);
-              }
-              if (isChecked) {
-                  if (mRadio1.isChecked()) {
-                      if (mSurfaceHolder1VideoSink == null) {
-                          mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1);
-                      }
-                      mSelectedVideoSink = mSurfaceHolder1VideoSink;
-                      mGLView1.onPause();
-                      Log.i("@@@@", "glview pause");
-                  } else {
-                      mGLView1.onResume();
-                      if (mGLView1VideoSink == null) {
-                          mGLView1VideoSink = new GLViewVideoSink(mGLView1);
-                      }
-                      mSelectedVideoSink = mGLView1VideoSink;
-                  }
-                  switchSurface();
-              }
-          }
+            @Override
+            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+                Log.i("@@@@", "oncheckedchanged");
+                if (buttonView == mRadio1 && isChecked) {
+                    mRadio2.setChecked(false);
+                }
+                if (buttonView == mRadio2 && isChecked) {
+                    mRadio1.setChecked(false);
+                }
+
+
+                if (isChecked) {
+                    if (mRadio1.isChecked()) {
+                        if (mSurfaceHolder1VideoSink == null) {
+                            mSurfaceHolder1VideoSink = new SurfaceHolderVideoSink(mSurfaceHolder1);
+                            //mSurfaceHolder1VideoSink.useAsSinkForNative();
+                        }
+                        mSelectedVideoSink = mSurfaceHolder1VideoSink;
+                        mGLView1.onPause();
+                        Log.i("@@@@", "glview pause");
+                    } else {
+                        mGLView1.onResume();
+                        if (mGLView1VideoSink == null) {
+                            mGLView1VideoSink = new GLViewVideoSink(mGLView1);
+                            //mGLView1VideoSink.useAsSinkForNative();
+                        }
+                        mSelectedVideoSink = mGLView1VideoSink;
+                    }
+                    switchSurface();
+                }
+            }
         };
         mRadio1.setOnCheckedChangeListener(checklistener);
         mRadio2.setOnCheckedChangeListener(checklistener);
@@ -158,7 +183,7 @@
             public void onClick(View v) {
                 mRadio2.toggle();
             }
-      });
+        });
 
         // initialize button click handlers
 
@@ -172,17 +197,32 @@
                         if (mSelectedVideoSink == null) {
                             return;
                         }
-                        mSelectedVideoSink.useAsSinkForNative();
+                        //mSelectedVideoSink.useAsSinkForNative();
                         mNativeCodecPlayerVideoSink = mSelectedVideoSink;
                     }
                     if (mSourceString != null) {
-                        mCreated = createStreamingMediaPlayer(getResources().getAssets(),
-                                mSourceString);
+
+                        RtspFaceNative.setSurface(1, mSurfaceHolder1.getSurface());
+                        mGLView1VideoSink.useAsSinkForNative();
+
+                        //mCreated = createStreamingMediaPlayer(getResources().getAssets(), mSourceString);
+                        //#todo ok
+                        mCreated = RtspFaceNative.createPlayer(1, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/sub/av_stream");
+                        //mCreated = RtspFaceNative.createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/sub/av_stream");
+                        //mCreated = createPlayer(1, "rtsp://192.168.1.56:8554");
+
+                        RtspFaceNative.setFaceCallback(1, "cn/com/basic/face/util/RtspFaceNative", "faceCallBack");
+                        //RtspFaceNative.setFaceCallback(2, "cn/com/basic/face/util/RtspFaceNative", "faceCallBack");
+
+                        //byte[] arr = new byte[5];
+                        //arr[0] = 3; arr[1] = 4; arr[2] = 5;
+                        //RtspFaceNative.getFaceList(1, arr);
+
                     }
                 }
                 if (mCreated) {
                     mIsPlaying = !mIsPlaying;
-                    setPlayingStreamingMediaPlayer(mIsPlaying);
+                    //setPlayingStreamingMediaPlayer(mIsPlaying);
                 }
             }
 
@@ -195,24 +235,97 @@
             @Override
             public void onClick(View view) {
                 if (mNativeCodecPlayerVideoSink != null) {
-                    rewindStreamingMediaPlayer();
+                    //rewindStreamingMediaPlayer();
                 }
             }
 
         });
+
+        ((Button) findViewById(R.id.addface_native)).setOnClickListener(new View.OnClickListener() {
+
+            @Override
+            public void onClick(View view) {
+                Log.i("@@@", "addface_native onClick");
+
+            }
+
+        });
+
+        ((ImageView) findViewById(R.id.addface_image)).setOnClickListener(new View.OnClickListener() {
+
+            @Override
+            public void onClick(View view) {
+                Log.i("@@@", "addface_image onClick");
+                //ImageView image = (ImageView)ThisActivity.findViewById(R.id.addface_image);
+                //image.setImageBitmap(faceBitmap);
+            }
+
+        });
+
+        ((Button) findViewById(R.id.addface_native)).setOnClickListener(new View.OnClickListener() {
+
+            @Override
+            public void onClick(View view) {
+                Log.i("@@@", "addface_image onClick");
+                RtspFaceNative.dbgFaceAdd(ThisActivity.faceImg);
+            }
+
+        });
+
+    }
+
+    static NativeCodec ThisActivity;
+
+    public static  void setFaceDrawable(NativeImg img)
+    {
+        //ImageView image = (ImageView)ThisActivity.findViewById(R.id.addface_image);
+        //return image;
+
+        ThisActivity.faceImg = img;
+
+        //ImageView image = (ImageView)ThisActivity.findViewById(R.id.addface_image);
+        //image.callOnClick();
+
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+                ThisActivity.runOnUiThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Bitmap bitmap = Bitmap.createBitmap(faceImg.width, faceImg.height, Bitmap.Config.RGB_565);
+                        ByteBuffer byteBuffer = ByteBuffer.wrap(faceImg.image, 0, faceImg.size);
+                        bitmap.copyPixelsFromBuffer(byteBuffer);
+
+                        ImageView image = (ImageView)ThisActivity.findViewById(R.id.addface_image);
+                        image.setImageBitmap(bitmap);
+                    }
+                });
+            }
+        }).start();
     }
 
     void switchSurface() {
+
+        //mGLView1VideoSink.useAsSinkForNative();
+        //mSurfaceHolder1VideoSink.useAsSinkForNative();
+
         if (mCreated && mNativeCodecPlayerVideoSink != mSelectedVideoSink) {
             // shutdown and recreate on other surface
-          Log.i("@@@", "shutting down player");
-            shutdown();
+            Log.i("@@@", "shutting down player");
+            //shutdown(1);
+            //shutdown(2);
             mCreated = false;
-            mSelectedVideoSink.useAsSinkForNative();
+            //mSelectedVideoSink.useAsSinkForNative();
+
+
+
             mNativeCodecPlayerVideoSink = mSelectedVideoSink;
             if (mSourceString != null) {
                 Log.i("@@@", "recreating player");
-                mCreated = createStreamingMediaPlayer(getResources().getAssets(),mSourceString);
+                //mCreated = createStreamingMediaPlayer(getResources().getAssets(),mSourceString);
+                //mCreated = createPlayer(1, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream");
+                //mCreated = createPlayer(2, "rtsp://admin:admin12345@192.168.1.70:554/h264/ch1/main/av_stream");
+                //mCreated = createPlayer(1, "rtsp://192.168.1.56:8554");
                 mIsPlaying = false;
             }
         }
@@ -223,7 +336,7 @@
     protected void onPause()
     {
         mIsPlaying = false;
-        setPlayingStreamingMediaPlayer(false);
+        //setPlayingStreamingMediaPlayer(false);
         mGLView1.onPause();
         super.onPause();
     }
@@ -240,7 +353,8 @@
     @Override
     protected void onDestroy()
     {
-        shutdown();
+        RtspFaceNative.shutdown(1);
+        RtspFaceNative.shutdown(2);
         mCreated = false;
         super.onDestroy();
     }
@@ -252,16 +366,28 @@
     private RadioButton mRadio2;
 
     /** Native methods, implemented in jni folder */
-    public static native void createEngine();
-    public static native boolean createStreamingMediaPlayer(AssetManager assetMgr, String filename);
-    public static native void setPlayingStreamingMediaPlayer(boolean isPlaying);
-    public static native void shutdown();
-    public static native void setSurface(Surface surface);
-    public static native void rewindStreamingMediaPlayer();
+    //public static native void createEngine();
+    //public static native boolean createStreamingMediaPlayer(AssetManager assetMgr, String filename);
+    //public static native void setPlayingStreamingMediaPlayer(boolean isPlaying);
+    //public static native void shutdown();
+    //public static native void setSurface(Surface surface);
+    //public static native void rewindStreamingMediaPlayer();
+
+    //public static native void init();
+    //public static native void setSurface(int cameraIdx, Surface surface);
+    //public static native boolean createPlayer(int cameraIdx, String uri);
+    //public static native void shutdown(int cameraIdx);
+    //// typedef void (* Java_com_example_nativecodec_NativeCodec_FaceCallback_func)(int cameraIdx, int count);
+    //public static native boolean setFaceCallback(int cameraIdx, String func);
+    //public static native void lockFace(int cameraIdx);
+    //public static native void releaseFace(int cameraIdx);
+    //public static native boolean getFaceList(int cameraIdx, byte[] faceListPb);
+    //public static native boolean getFaceImages(int cameraIdx, byte[] faceImagesIdx, byte[] faceImages);
 
     /** Load jni .so on initialization */
     static {
-         System.loadLibrary("native-codec-jni");
+        System.loadLibrary("rtspface");
+        System.loadLibrary("opencv_java3");
     }
 
     // VideoSink abstracts out the difference between Surface and SurfaceTexture
@@ -290,7 +416,8 @@
         void useAsSinkForNative() {
             Surface s = mSurfaceHolder.getSurface();
             Log.i("@@@", "setting surface " + s);
-            setSurface(s);
+            //mSurfaceHolder1.setFormat(PixelFormat.RGBA_8888);
+            RtspFaceNative.setSurface(1, s);
         }
 
     }
@@ -311,7 +438,8 @@
         void useAsSinkForNative() {
             SurfaceTexture st = mMyGLSurfaceView.getSurfaceTexture();
             Surface s = new Surface(st);
-            setSurface(s);
+            //setEGLConfigChooser(8, 8, 8, 8, 0, 0);
+            RtspFaceNative.setSurface(2, s);
             s.release();
         }
 

--
Gitblit v1.8.0