Ignore:
Timestamp:
May 28, 2015 7:14:24 AM (9 years ago)
Author:
riza
Message:

Re #1855 (Pjsua2 Video Preview API): Add Pjsua2 Preview API and sample usage in pjsua2 app for android.

Location:
pjproject/trunk/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/CallActivity.java

    r5017 r5102  
    3131import org.pjsip.pjsua2.*; 
    3232 
     33class VideoPreviewHandler implements SurfaceHolder.Callback 
     34{    
     35    public boolean videoPreviewActive = false; 
     36         
     37    public void updateVideoPreview(SurfaceHolder holder)  
     38    { 
     39        if (MainActivity.currentCall != null && 
     40            MainActivity.currentCall.vidWin != null && 
     41            MainActivity.currentCall.vidPrev != null) 
     42        {        
     43            if (videoPreviewActive) { 
     44                VideoWindowHandle vidWH = new VideoWindowHandle(); 
     45                vidWH.getHandle().setWindow(holder.getSurface()); 
     46                VideoPreviewOpParam vidPrevParam = new VideoPreviewOpParam(); 
     47                vidPrevParam.setWindow(vidWH);           
     48                try { 
     49                    MainActivity.currentCall.vidPrev.start(vidPrevParam); 
     50                } catch (Exception e) { 
     51                    System.out.println(e); 
     52                } 
     53            } else { 
     54                try { 
     55                    MainActivity.currentCall.vidPrev.stop(); 
     56                } catch (Exception e) { 
     57                    System.out.println(e); 
     58                }        
     59            } 
     60        } 
     61    }     
     62     
     63    @Override 
     64    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
     65    { 
     66        updateVideoPreview(holder); 
     67    } 
     68 
     69    @Override 
     70    public void surfaceCreated(SurfaceHolder holder)  
     71    { 
     72         
     73    } 
     74 
     75    @Override 
     76    public void surfaceDestroyed(SurfaceHolder holder)  
     77    { 
     78        try { 
     79            MainActivity.currentCall.vidPrev.stop(); 
     80        } catch (Exception e) { 
     81            System.out.println(e); 
     82        } 
     83    }     
     84} 
     85 
    3386public class CallActivity extends Activity 
    3487                          implements Handler.Callback, SurfaceHolder.Callback 
     
    3689 
    3790    public static Handler handler_; 
     91    private static VideoPreviewHandler previewHandler =  
     92                                                      new VideoPreviewHandler(); 
    3893 
    3994    private final Handler handler = new Handler(this); 
     
    46101        setContentView(R.layout.activity_call); 
    47102 
    48         SurfaceView surfaceView = (SurfaceView) 
     103        SurfaceView surfaceInVideo = (SurfaceView) 
    49104                                  findViewById(R.id.surfaceIncomingVideo); 
     105        SurfaceView surfacePreview = (SurfaceView) 
     106                                  findViewById(R.id.surfacePreviewCapture);      
     107        Button buttonShowPreview = (Button)  
     108                                  findViewById(R.id.buttonShowPreview);  
     109         
    50110        if (MainActivity.currentCall == null || 
    51111            MainActivity.currentCall.vidWin == null) 
    52112        { 
    53             surfaceView.setVisibility(View.GONE); 
    54         } 
    55         surfaceView.getHolder().addCallback(this); 
     113            surfaceInVideo.setVisibility(View.GONE);         
     114            buttonShowPreview.setVisibility(View.GONE); 
     115        } 
     116        setupVideoPreview(surfacePreview, buttonShowPreview); 
     117        surfaceInVideo.getHolder().addCallback(this); 
     118        surfacePreview.getHolder().addCallback(previewHandler); 
    56119 
    57120        handler_ = handler; 
     
    74137        handler_ = null; 
    75138    } 
    76  
    77     private void updateVideoWindow(SurfaceHolder holder) 
    78     { 
     139     
     140    private void updateVideoWindow(boolean show) 
     141    {  
    79142        if (MainActivity.currentCall != null && 
    80             MainActivity.currentCall.vidWin != null) 
     143            MainActivity.currentCall.vidWin != null && 
     144            MainActivity.currentCall.vidPrev != null) 
    81145        { 
    82             VideoWindowHandle vidWH = new VideoWindowHandle(); 
    83             if (holder == null) 
     146            SurfaceView surfaceInVideo = (SurfaceView)  
     147                                  findViewById(R.id.surfaceIncomingVideo); 
     148             
     149            VideoWindowHandle vidWH = new VideoWindowHandle();       
     150            if (show) { 
     151                vidWH.getHandle().setWindow( 
     152                                       surfaceInVideo.getHolder().getSurface()); 
     153            } else { 
    84154                vidWH.getHandle().setWindow(null); 
    85             else 
    86                 vidWH.getHandle().setWindow(holder.getSurface()); 
     155            } 
    87156            try { 
    88157                MainActivity.currentCall.vidWin.setWindow(vidWH); 
    89             } catch (Exception e) {} 
    90         } 
    91     } 
    92  
     158            } catch (Exception e) { 
     159                System.out.println(e); 
     160            }        
     161        } 
     162    } 
     163      
    93164    public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 
    94165    { 
    95         updateVideoWindow(holder); 
     166        updateVideoWindow(true); 
    96167    } 
    97168 
     
    102173    public void surfaceDestroyed(SurfaceHolder holder) 
    103174    { 
    104         updateVideoWindow(null); 
     175        updateVideoWindow(false); 
    105176    } 
    106177 
     
    133204        } 
    134205    } 
     206     
     207    public void setupVideoPreview(SurfaceView surfacePreview,  
     208                                  Button buttonShowPreview) 
     209    { 
     210        surfacePreview.setVisibility(previewHandler.videoPreviewActive? 
     211                                     View.VISIBLE:View.GONE); 
     212         
     213        buttonShowPreview.setText(previewHandler.videoPreviewActive? 
     214                                  getString(R.string.hide_preview): 
     215                                  getString(R.string.show_preview));             
     216    } 
     217     
     218    public void showPreview(View view) 
     219    { 
     220        SurfaceView surfacePreview = (SurfaceView) 
     221                                  findViewById(R.id.surfacePreviewCapture);      
     222 
     223        Button buttonShowPreview = (Button)  
     224                                  findViewById(R.id.buttonShowPreview); 
     225         
     226         
     227        previewHandler.videoPreviewActive = !previewHandler.videoPreviewActive; 
     228         
     229        setupVideoPreview(surfacePreview, buttonShowPreview); 
     230         
     231        previewHandler.updateVideoPreview(surfacePreview.getHolder()); 
     232    } 
    135233 
    136234    private void setupVideoSurface() 
    137235    { 
    138         SurfaceView surfaceView = (SurfaceView) 
     236        SurfaceView surfaceInVideo = (SurfaceView) 
    139237                                  findViewById(R.id.surfaceIncomingVideo); 
    140         surfaceView.setVisibility(View.VISIBLE); 
    141         updateVideoWindow(surfaceView.getHolder()); 
     238        SurfaceView surfacePreview = (SurfaceView) 
     239                                  findViewById(R.id.surfacePreviewCapture); 
     240        Button buttonShowPreview = (Button) 
     241                                  findViewById(R.id.buttonShowPreview);  
     242        surfaceInVideo.setVisibility(View.VISIBLE); 
     243        buttonShowPreview.setVisibility(View.VISIBLE); 
     244        surfacePreview.setVisibility(View.GONE);         
    142245    } 
    143246 
  • pjproject/trunk/pjsip-apps/src/swig/java/android/src/org/pjsip/pjsua2/app/MyApp.java

    r5022 r5102  
    5050{ 
    5151    public VideoWindow vidWin; 
     52    public VideoPreview vidPrev; 
    5253 
    5354    MyCall(MyAccount acc, int call_id) 
     
    113114            { 
    114115                vidWin = new VideoWindow(cmi.getVideoIncomingWindowId()); 
     116                vidPrev = new VideoPreview(cmi.getVideoCapDev()); 
    115117            } 
    116118        } 
Note: See TracChangeset for help on using the changeset viewer.