Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejava
themeRDark
titleTestInterceptor.java
// Package name should be strictly defined as com.flashphoner.frameInterceptor
package com.flashphoner.frameInterceptor;
 
// Import decoded frame interceptor interface
import com.flashphoner.sdk.media.IDecodedFrameInterceptor;
// Import YUV frame description
import com.flashphoner.sdk.media.YUVFrame;
 
 
/**
 * Custom decoded frames interceptor implementation example
 * The example dawsdraws a cross over the picture
 */
public class TestInterceptor implements IDecodedFrameInterceptor {
 
    // Constants to parse pixel
    private final int Y = 0;
    private final int U = 1;
    private final int V = 2;
    
    // Dark colored pixel
    private final byte[] DarkPixel = new byte []{42, -128, -128};
    
    /**
     * Function to handle decoded frame
     * @param streamName - stream name
     * @param frame - decoded YUV frame
     */
    @Override
    public void frameDecoded(String streamName, YUVFrame frame) {
        // Get frame height
        int frameHeight = frame.getHeight();
        // Get frame width
        int frameWidth = frame.getWidth();
        // Declare cross lines padding
        int PADDING = 4;
        // Define frame center
        int frameCenterX = frameWidth / 2;
        int frameCenterY = frameHeight / 2;
        // Define vertical line bounds
        int leftBound = frameCenterX - PADDING;
        int rightBound = frameCenterX + PADDING;
        // Define horizontal line bounds
        int topBound = frameCenterY - PADDING;
        int bottomBound = frameCenterY + PADDING;
        
        // Walk through the frame pixels and draw a cross
        for (int x = 0; x < frameWidth; x++) {
             for (int y = 0; y < frameHeight; y++) {
                  if (validateCoord(x, leftBound, rightBound) || validateCoord(y, topBound, bottomBound)) {
                      // Read the pixel
                      byte[] pixel = frame.readPixel(x, y);
                      // Modify the pixel
                      pixel[Y] = DarkPixel[Y];
                      pixel[U] = DarkPixel[U];
                      pixel[V] = DarkPixel[V];
                      // Write the pixel back
                      frame.writePixel(x, y, pixel);
                  }
             }
        }
    }
    
    /**
     * Helper function to validate pixel drawing
     * @param coord - pixel coordinate
     * @param low - low coordinate bound 
     * @param high - high coordinate bound 
     * @return true if coordinate is valid
     */
     private boolean validateCoord(int coord, int low, int high) {
        return (coord > low && coord < high);
     }
}

...