Package tvi.webrtc

Class SurfaceEglRenderer

  • All Implemented Interfaces:
    android.view.SurfaceHolder.Callback, VideoSink

    public class SurfaceEglRenderer
    extends EglRenderer
    implements android.view.SurfaceHolder.Callback
    Display the video stream on a Surface. renderFrame() is asynchronous to avoid blocking the calling thread. This class is thread safe and handles access from potentially three different threads: Interaction from the main app in init, release and setMirror. Interaction from C++ rtc::VideoSinkInterface in renderFrame. Interaction from SurfaceHolder lifecycle in surfaceCreated, surfaceChanged, and surfaceDestroyed.
    • Constructor Detail

      • SurfaceEglRenderer

        public SurfaceEglRenderer​(java.lang.String name)
        In order to render something, you must first call init().
    • Method Detail

      • init

        public void init​(EglBase.Context sharedContext,
                         RendererCommon.RendererEvents rendererEvents,
                         int[] configAttributes,
                         RendererCommon.GlDrawer drawer)
        Initialize this class, sharing resources with |sharedContext|. The custom |drawer| will be used for drawing frames on the EGLSurface. This class is responsible for calling release() on |drawer|. It is allowed to call init() to reinitialize the renderer after a previous init()/release() cycle.
      • setFpsReduction

        public void setFpsReduction​(float fps)
        Limit render framerate.
        Overrides:
        setFpsReduction in class EglRenderer
        Parameters:
        fps - Limit render framerate to this value, or use Float.POSITIVE_INFINITY to disable fps reduction.
      • onFrame

        public void onFrame​(VideoFrame frame)
        Description copied from interface: VideoSink
        Implementations should call frame.retain() if they need to hold a reference to the frame after this function returns. Each call to retain() should be followed by a call to frame.release() when the reference is no longer needed.
        Specified by:
        onFrame in interface VideoSink
        Overrides:
        onFrame in class EglRenderer
      • surfaceCreated

        public void surfaceCreated​(android.view.SurfaceHolder holder)
        Specified by:
        surfaceCreated in interface android.view.SurfaceHolder.Callback
      • surfaceDestroyed

        public void surfaceDestroyed​(android.view.SurfaceHolder holder)
        Specified by:
        surfaceDestroyed in interface android.view.SurfaceHolder.Callback
      • surfaceChanged

        public void surfaceChanged​(android.view.SurfaceHolder holder,
                                   int format,
                                   int width,
                                   int height)
        Specified by:
        surfaceChanged in interface android.view.SurfaceHolder.Callback