Zmiana rozmiaru powierzchni dla zmiany współczynnika proporcji na ekranie wideo w systemie Android

Pracuję nad projektem wideokonferencji. Mój ekran wideo używa widoku powierzchni. Teraz podczas połączenia wideo istnieje szansa na zmianę proporcji dla przychodzących ramek. Dlatego wypróbowałem następujący kod

public void surfaceResize() {

   // WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
    Point size = new Point();
    int screenWidth = 0;
    //Get the SurfaceView layout parameters

    float aspectRatio = (float) recv_frame_width / recv_frame_height;

    if(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
    {   
        //Get the width of the screen
        getWindowManager().getDefaultDisplay().getSize(size);
        screenWidth = size.x;

        //Set the width of the SurfaceView to the width of the screen
        surflp.width = screenWidth;

        //Set the height of the SurfaceView to match the aspect ratio of the video 
        //be sure to cast these as floats otherwise the calculation will likely be 0
        surflp.height = (int) ((1 / aspectRatio) * (float)screenWidth);

        //Commit the layout parameters

    } else {

        size.x = size.y = 0;
        //Get the width of the screen
        getWindowManager().getDefaultDisplay().getSize(size);

        int screenHeight = size.y;

        //Set the width of the SurfaceView to the width of the screen
        surflp.height = screenHeight;

        //Set the width of the SurfaceView to match the aspect ratio of the video 
        //be sure to cast these as floats otherwise the calculation will likely be 0
        surflp.width = (int) ( aspectRatio * (float)screenHeight);

        //Commit the layout parameters
        // code to do for Portrait Mode        
    }
    surflp.addRule(RelativeLayout.CENTER_HORIZONTAL);
    surflp.addRule(RelativeLayout.CENTER_VERTICAL);

    if(myVideoSurfaceView != null) 
        myVideoSurfaceView.setLayoutParams(surflp);  
    System.out.println("Surface resized*****************************************");
}

Wszystko jest w porządku, jeśli zadzwonię do tej funkcji na początku połączenia. Mój problem polega na tym, że wywołanie tej funkcji między wywołaniem zmiany współczynnika proporcji zajmuje zbyt dużo czasu, aby wyświetlić następną klatkę. Czasami wideo utknie nawet.

Próbowałem zniszczyć i odtworzyć powierzchnię

myVideoSurface.setVisibility(VIEW.GONE);

Ale powierzchnia nie jest tworzona.

Używam Mediacodec do dekodowania wideo. Zostanę powiadomiony o zmianie rozdzielczości.

Czy jest coś więcej, co powinienem zrobić, aby zmienić rozmiar powierzchni?

Dzięki za pomoc.........................

questionAnswers(1)

yourAnswerToTheQuestion