/* * Copyright 2017 The WebRTC project authors. All Rights Reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ package org.webrtc; import java.nio.ByteBuffer; /** * An encoded frame from a video stream. Used as an input for decoders and as an output for * encoders. */ public class EncodedImage { public enum FrameType { EmptyFrame, VideoFrameKey, VideoFrameDelta, } public final ByteBuffer buffer; public final int encodedWidth; public final int encodedHeight; public final long captureTimeMs; public final FrameType frameType; public final int rotation; public final boolean completeFrame; public final Integer qp; private EncodedImage(ByteBuffer buffer, int encodedWidth, int encodedHeight, long captureTimeMs, FrameType frameType, int rotation, boolean completeFrame, Integer qp) { this.buffer = buffer; this.encodedWidth = encodedWidth; this.encodedHeight = encodedHeight; this.captureTimeMs = captureTimeMs; this.frameType = frameType; this.rotation = rotation; this.completeFrame = completeFrame; this.qp = qp; } public static Builder builder() { return new Builder(); } public static class Builder { private ByteBuffer buffer; private int encodedWidth; private int encodedHeight; private long captureTimeMs; private EncodedImage.FrameType frameType; private int rotation; private boolean completeFrame; private Integer qp; private Builder() {} public Builder setBuffer(ByteBuffer buffer) { this.buffer = buffer; return this; } public Builder setEncodedWidth(int encodedWidth) { this.encodedWidth = encodedWidth; return this; } public Builder setEncodedHeight(int encodedHeight) { this.encodedHeight = encodedHeight; return this; } public Builder setCaptureTimeMs(long captureTimeMs) { this.captureTimeMs = captureTimeMs; return this; } public Builder setFrameType(EncodedImage.FrameType frameType) { this.frameType = frameType; return this; } public Builder setRotation(int rotation) { this.rotation = rotation; return this; } public Builder setCompleteFrame(boolean completeFrame) { this.completeFrame = completeFrame; return this; } public Builder setQp(Integer qp) { this.qp = qp; return this; } public EncodedImage createEncodedImage() { return new EncodedImage(buffer, encodedWidth, encodedHeight, captureTimeMs, frameType, rotation, completeFrame, qp); } } }