Skip to content

Commit e6fb8f3

Browse files
committed
doc/encoders: Document mediacodec wrapper
Reviewed-by: Marth64 <[email protected]> Signed-off-by: Zhao Zhili <[email protected]>
1 parent 808c685 commit e6fb8f3

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

doc/encoders.texi

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3342,6 +3342,75 @@ fastest.
33423342

33433343
@end table
33443344

3345+
@section MediaCodec
3346+
3347+
MediaCodec encoder wrapper enables hardware-accelerated video encoding on
3348+
Android device. It supports H.264, H.265 (HEVC), VP8, VP9, MPEG-4, and AV1
3349+
encoding (whether works or not is device dependent).
3350+
3351+
Android provides two sets of APIs: Java MediaCodec and NDK MediaCodec. The
3352+
MediaCodec encoder wrapper supports both. Note that the NDK MediaCodec API
3353+
operates without requiring JVM, but may fail to function outside the JVM
3354+
environment due to dependencies on system framework services, particularly
3355+
after Android 15.
3356+
3357+
@table @option
3358+
@item ndk_codec @var{boolean}
3359+
Use the NDK-based MediaCodec API instead of the Java API. Enabled by default
3360+
if @code{av_jni_get_java_vm()} return NULL.
3361+
3362+
@item ndk_async @var{boolean}
3363+
Use NDK MediaCodec in async mode. Async mode has less overhead than poll in a
3364+
loop in sync mode. The drawback of async mode is AV_CODEC_FLAG_GLOBAL_HEADER
3365+
doesn't work (use extract_extradata bsf when necessary). It doesn't work and
3366+
will be disabled automatically on devices below Android 8.0.
3367+
3368+
@item codec_name @var{string}
3369+
A codec type can have multiple implementations on a single device, this option
3370+
specify which backend to use (via MediaCodec createCodecByName API). It's NULL
3371+
by default, and encoder is created by createEncoderByType.
3372+
3373+
@item bitrate_mode @var{integer}
3374+
3375+
Possible values:
3376+
@table @samp
3377+
@item cq
3378+
Constant quality mode
3379+
@item vbr
3380+
Variable bitrate mode
3381+
@item cbr
3382+
Constant bitrate mode
3383+
@item cbr_fd
3384+
Constant bitrate mode with frame drops
3385+
@end table
3386+
3387+
@item pts_as_dts @var{boolean}
3388+
Use PTS as DTS. This is a workaround since MediaCodec API doesn't provide
3389+
decoding timestamp. It is enabled automatically if B frame is 0.
3390+
3391+
@item operating_rate @var{integer}
3392+
The desired operating rate that the codec will need to operate at, zero for
3393+
unspecified. This is used for cases like high-speed/slow-motion video capture,
3394+
where the video encoder format contains the target playback rate (e.g. 30fps),
3395+
but the component must be able to handle the high operating capture rate (e.g.
3396+
240fps). This rate will be used by codec for resource planning and setting the
3397+
operating points.
3398+
3399+
@item qp_i_min @var{integer}
3400+
Minimum quantization parameter for I frame.
3401+
@item qp_p_min @var{integer}
3402+
Minimum quantization parameter for P frame.
3403+
@item qp_b_min @var{integer}
3404+
Minimum quantization parameter for B frame.
3405+
@item qp_i_max @var{integer}
3406+
Maximum quantization parameter for I frame.
3407+
@item qp_p_max @var{integer}
3408+
Maximum quantization parameter for P frame.
3409+
@item qp_b_max @var{integer}
3410+
Maximum quantization parameter for B frame.
3411+
3412+
@end table
3413+
33453414
@section MediaFoundation
33463415

33473416
This provides wrappers to encoders (both audio and video) in the

0 commit comments

Comments
 (0)