Package tvi.webrtc
Class JavaI420Buffer
- java.lang.Object
-
- tvi.webrtc.JavaI420Buffer
-
- All Implemented Interfaces:
RefCounted
,VideoFrame.Buffer
,VideoFrame.I420Buffer
public class JavaI420Buffer extends java.lang.Object implements VideoFrame.I420Buffer
Implementation of VideoFrame.I420Buffer backed by Java direct byte buffers.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static JavaI420Buffer
allocate(int width, int height)
Allocates an empty I420Buffer suitable for an image of the given dimensions.VideoFrame.Buffer
cropAndScale(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight)
Crops a region defined by `cropx`, `cropY`, `cropWidth` and `cropHeight`.static VideoFrame.Buffer
cropAndScaleI420(VideoFrame.I420Buffer buffer, int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight)
java.nio.ByteBuffer
getDataU()
Returns a direct ByteBuffer containing U-plane data.java.nio.ByteBuffer
getDataV()
Returns a direct ByteBuffer containing V-plane data.java.nio.ByteBuffer
getDataY()
Returns a direct ByteBuffer containing Y-plane data.int
getHeight()
int
getStrideU()
int
getStrideV()
int
getStrideY()
int
getWidth()
Resolution of the buffer in pixels.void
release()
Decreases ref count by one.void
retain()
Increases ref count by one.VideoFrame.I420Buffer
toI420()
Returns a memory-backed frame in I420 format.static JavaI420Buffer
wrap(int width, int height, java.nio.ByteBuffer dataY, int strideY, java.nio.ByteBuffer dataU, int strideU, java.nio.ByteBuffer dataV, int strideV, java.lang.Runnable releaseCallback)
Wraps existing ByteBuffers into JavaI420Buffer object without copying the contents.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface tvi.webrtc.VideoFrame.I420Buffer
getBufferType
-
-
-
-
Method Detail
-
wrap
public static JavaI420Buffer wrap(int width, int height, java.nio.ByteBuffer dataY, int strideY, java.nio.ByteBuffer dataU, int strideU, java.nio.ByteBuffer dataV, int strideV, @Nullable java.lang.Runnable releaseCallback)
Wraps existing ByteBuffers into JavaI420Buffer object without copying the contents.
-
allocate
public static JavaI420Buffer allocate(int width, int height)
Allocates an empty I420Buffer suitable for an image of the given dimensions.
-
getWidth
public int getWidth()
Description copied from interface:VideoFrame.Buffer
Resolution of the buffer in pixels.- Specified by:
getWidth
in interfaceVideoFrame.Buffer
-
getHeight
public int getHeight()
- Specified by:
getHeight
in interfaceVideoFrame.Buffer
-
getDataY
public java.nio.ByteBuffer getDataY()
Description copied from interface:VideoFrame.I420Buffer
Returns a direct ByteBuffer containing Y-plane data. The buffer capacity is at least getStrideY() * getHeight() bytes. The position of the returned buffer is ignored and must be 0. Callers may mutate the ByteBuffer (eg. through relative-read operations), so implementations must return a new ByteBuffer or slice for each call.- Specified by:
getDataY
in interfaceVideoFrame.I420Buffer
-
getDataU
public java.nio.ByteBuffer getDataU()
Description copied from interface:VideoFrame.I420Buffer
Returns a direct ByteBuffer containing U-plane data. The buffer capacity is at least getStrideU() * ((getHeight() + 1) / 2) bytes. The position of the returned buffer is ignored and must be 0. Callers may mutate the ByteBuffer (eg. through relative-read operations), so implementations must return a new ByteBuffer or slice for each call.- Specified by:
getDataU
in interfaceVideoFrame.I420Buffer
-
getDataV
public java.nio.ByteBuffer getDataV()
Description copied from interface:VideoFrame.I420Buffer
Returns a direct ByteBuffer containing V-plane data. The buffer capacity is at least getStrideV() * ((getHeight() + 1) / 2) bytes. The position of the returned buffer is ignored and must be 0. Callers may mutate the ByteBuffer (eg. through relative-read operations), so implementations must return a new ByteBuffer or slice for each call.- Specified by:
getDataV
in interfaceVideoFrame.I420Buffer
-
getStrideY
public int getStrideY()
- Specified by:
getStrideY
in interfaceVideoFrame.I420Buffer
-
getStrideU
public int getStrideU()
- Specified by:
getStrideU
in interfaceVideoFrame.I420Buffer
-
getStrideV
public int getStrideV()
- Specified by:
getStrideV
in interfaceVideoFrame.I420Buffer
-
toI420
public VideoFrame.I420Buffer toI420()
Description copied from interface:VideoFrame.Buffer
Returns a memory-backed frame in I420 format. If the pixel data is in another format, a conversion will take place. All implementations must provide a fallback to I420 for compatibility with e.g. the internal WebRTC software encoders.Conversion may fail, for example if reading the pixel data from a texture fails. If the conversion fails, null is returned.
- Specified by:
toI420
in interfaceVideoFrame.Buffer
-
retain
public void retain()
Description copied from interface:RefCounted
Increases ref count by one.- Specified by:
retain
in interfaceRefCounted
- Specified by:
retain
in interfaceVideoFrame.Buffer
-
release
public void release()
Description copied from interface:RefCounted
Decreases ref count by one. When the ref count reaches zero, resources related to the object will be freed.- Specified by:
release
in interfaceRefCounted
- Specified by:
release
in interfaceVideoFrame.Buffer
-
cropAndScale
public VideoFrame.Buffer cropAndScale(int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight)
Description copied from interface:VideoFrame.Buffer
Crops a region defined by `cropx`, `cropY`, `cropWidth` and `cropHeight`. Scales it to size `scaleWidth` x `scaleHeight`.- Specified by:
cropAndScale
in interfaceVideoFrame.Buffer
-
cropAndScaleI420
public static VideoFrame.Buffer cropAndScaleI420(VideoFrame.I420Buffer buffer, int cropX, int cropY, int cropWidth, int cropHeight, int scaleWidth, int scaleHeight)
-
-