Package tvi.webrtc
Class WrappedNativeVideoEncoder
- java.lang.Object
-
- tvi.webrtc.WrappedNativeVideoEncoder
-
- All Implemented Interfaces:
VideoEncoder
- Direct Known Subclasses:
LibaomAv1Encoder
,LibvpxVp8Encoder
,LibvpxVp9Encoder
,VideoEncoderFallback
public abstract class WrappedNativeVideoEncoder extends java.lang.Object implements VideoEncoder
Wraps a native webrtc::VideoEncoder.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface tvi.webrtc.VideoEncoder
VideoEncoder.BitrateAllocation, VideoEncoder.Callback, VideoEncoder.Capabilities, VideoEncoder.CodecSpecificInfo, VideoEncoder.CodecSpecificInfoAV1, VideoEncoder.CodecSpecificInfoH264, VideoEncoder.CodecSpecificInfoVP8, VideoEncoder.CodecSpecificInfoVP9, VideoEncoder.EncodeInfo, VideoEncoder.EncoderInfo, VideoEncoder.RateControlParameters, VideoEncoder.ResolutionBitrateLimits, VideoEncoder.ScalingSettings, VideoEncoder.Settings
-
-
Constructor Summary
Constructors Constructor Description WrappedNativeVideoEncoder()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description abstract long
createNativeVideoEncoder()
The encoder implementation backing this interface is either 1) a Java encoder (e.g., an Android platform encoder), or alternatively 2) a native encoder (e.g., a software encoder or a C++ encoder adapter).VideoCodecStatus
encode(VideoFrame frame, VideoEncoder.EncodeInfo info)
Requests the encoder to encode a frame.java.lang.String
getImplementationName()
Should return a descriptive name for the implementation.VideoEncoder.ScalingSettings
getScalingSettings()
Any encoder that wants to use WebRTC provided quality scaler must implement this method.VideoCodecStatus
initEncode(VideoEncoder.Settings settings, VideoEncoder.Callback encodeCallback)
Initializes the encoding process.abstract boolean
isHardwareEncoder()
Returns true if the encoder is backed by hardware.VideoCodecStatus
release()
Releases the encoder.VideoCodecStatus
setRateAllocation(VideoEncoder.BitrateAllocation allocation, int framerate)
Sets the bitrate allocation and the target framerate for the encoder.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface tvi.webrtc.VideoEncoder
getEncoderInfo, getResolutionBitrateLimits, setRates
-
-
-
-
Method Detail
-
createNativeVideoEncoder
public abstract long createNativeVideoEncoder()
Description copied from interface:VideoEncoder
The encoder implementation backing this interface is either 1) a Java encoder (e.g., an Android platform encoder), or alternatively 2) a native encoder (e.g., a software encoder or a C++ encoder adapter). For case 1), createNativeVideoEncoder() should return zero. In this case, we expect the native library to call the encoder through JNI using the Java interface declared below. For case 2), createNativeVideoEncoder() should return a non-zero value. In this case, we expect the native library to treat the returned value as a raw pointer of type webrtc::VideoEncoder* (ownership is transferred to the caller). The native library should then directly call the webrtc::VideoEncoder interface without going through JNI. All calls to the Java interface methods declared below should thus throw an UnsupportedOperationException.- Specified by:
createNativeVideoEncoder
in interfaceVideoEncoder
-
isHardwareEncoder
public abstract boolean isHardwareEncoder()
Description copied from interface:VideoEncoder
Returns true if the encoder is backed by hardware.- Specified by:
isHardwareEncoder
in interfaceVideoEncoder
-
initEncode
public final VideoCodecStatus initEncode(VideoEncoder.Settings settings, VideoEncoder.Callback encodeCallback)
Description copied from interface:VideoEncoder
Initializes the encoding process. Call before any calls to encode.- Specified by:
initEncode
in interfaceVideoEncoder
-
release
public final VideoCodecStatus release()
Description copied from interface:VideoEncoder
Releases the encoder. No more calls to encode will be made after this call.- Specified by:
release
in interfaceVideoEncoder
-
encode
public final VideoCodecStatus encode(VideoFrame frame, VideoEncoder.EncodeInfo info)
Description copied from interface:VideoEncoder
Requests the encoder to encode a frame.- Specified by:
encode
in interfaceVideoEncoder
-
setRateAllocation
public final VideoCodecStatus setRateAllocation(VideoEncoder.BitrateAllocation allocation, int framerate)
Description copied from interface:VideoEncoder
Sets the bitrate allocation and the target framerate for the encoder.- Specified by:
setRateAllocation
in interfaceVideoEncoder
-
getScalingSettings
public final VideoEncoder.ScalingSettings getScalingSettings()
Description copied from interface:VideoEncoder
Any encoder that wants to use WebRTC provided quality scaler must implement this method.- Specified by:
getScalingSettings
in interfaceVideoEncoder
-
getImplementationName
public final java.lang.String getImplementationName()
Description copied from interface:VideoEncoder
Should return a descriptive name for the implementation. Gets called once and cached. May be called from arbitrary thread.- Specified by:
getImplementationName
in interfaceVideoEncoder
-
-