[视频编码]rkmpp 实现硬件编码
mpi_enc_test的命令参数描述说明
命令参数的描述说明如下:
命令参数 | 描述说明 |
-i | 输入的图像文件。 |
-o | 输出的码流文件。 |
-w | 图像宽度,单位为像素。 |
-h | 图像高度,单位为像素。 |
-hstride | 垂直方向相邻两行之间的距离,单位为byte。 |
-vstride | 图像分量之间的以行数间隔数,单位为1。 |
-f | 图像色彩空间格式以及内存排布方式,默认为NV12。 |
-t | 码流文件的协议类型。 |
-tsrc | 源码流格式,仅在测试整体编解码性能时使用。 |
-n | 最大解码帧数。测试时若码流较长,可仅输出前n帧。 |
-g | gop参考模式,对应不同的TSVC码流。 |
-rc | 码率控制模式。0:VBR; 1:CBR; 2:FIXQP; 3:AVBR。 |
-bps | 码率约束参数。命令格式:bps_target:bps_min:bps_max。 |
-fps | 输入/输出帧率控制,默认为30。该命令参数仅说明输入帧率和输出帧率之间的比例关系,与实际帧率无关。 |
-qc | 质量控制。 |
-s | MPP实例数,默认为1。 |
-v | 日志选项:q为静默标志;f为fps显示标志。 |
-ini | 额外的编码配置文件ini(暂未生效)。 |
-slt | 输出码流对应的校验文件。 |
查看摄像头的图片格式
cat@lubancat:~/test/mpp/build/linux/aarch64/test$ v4l2-ctl -d /dev/video1 --all
Driver Info:
Driver name : uvcvideo
Card type : YJX-YL7: YJX-YL7
Bus info : usb-xhci-hcd.9.auto-1
Driver version : 5.10.160
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : YJX-YL7: YJX-YL7
Serial : 20240514001
Bus info : usb-xhci-hcd.9.auto-1
Media version : 5.10.160
Hardware revision: 0x00000001 (1)
Driver version : 5.10.160
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : YJX-YL7: YJX-YL7
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
Width/Height : 1280/720
Pixel Format : 'YUYV' (YUYV 4:2:2)
Field : None
Bytes per Line : 2560
Size Image : 1843200
Colorspace : sRGB
Transfer Function : Rec. 709
YCbCr/HSV Encoding: ITU-R 601
Quantization : Default (maps to Limited Range)
Flags :
Crop Capability Video Capture:
Bounds : Left 0, Top 0, Width 1280, Height 720
Default : Left 0, Top 0, Width 1280, Height 720
Pixel Aspect: 1/1
Selection Video Capture: crop_default, Left 0, Top 0, Width 1280, Height 720, Flags:
Selection Video Capture: crop_bounds, Left 0, Top 0, Width 1280, Height 720, Flags:
Streaming Parameters Video Capture:
Capabilities : timeperframe
Frames per second: 10.000 (10/1)
Read buffers : 0
brightness 0x00980900 (int) : min=0 max=255 step=1 default=128 value=128
contrast 0x00980901 (int) : min=0 max=255 step=1 default=45 value=45
saturation 0x00980902 (int) : min=0 max=100 step=1 default=70 value=70
hue 0x00980903 (int) : min=-180 max=180 step=1 default=0 value=0
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gamma 0x00980910 (int) : min=90 max=150 step=1 default=120 value=120
gain 0x00980913 (int) : min=0 max=128 step=1 default=75 value=75
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=1 value=1
0: Disabled
1: 50 Hz
2: 60 Hz
white_balance_temperature 0x0098091a (int) : min=2800 max=6500 step=10 default=4600 value=4600 flags=inactive
sharpness 0x0098091b (int) : min=0 max=7 step=1 default=6 value=6
backlight_compensation 0x0098091c (int) : min=0 max=2 step=1 default=0 value=0
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
1: Manual Mode
3: Aperture Priority Mode
exposure_absolute 0x009a0902 (int) : min=2 max=1250 step=1 default=156 value=156 flags=inactive
exposure_auto_priority 0x009a0903 (bool) : default=0 value=1
捕获为h264
cat@lubancat:~/test/mpp/build/linux/aarch64/test$ mpi_enc_test -w 1280 -h 720 -t 7 -f 8 -fps 15 -i /dev/video1 -o ./out.h624
注意这里命令-i是可以输入文件,或者是摄像头结点的。很多文章没有说明
if (cmd->file_input) {
if (!strncmp(cmd->file_input, "/dev/video", 10)) {
mpp_log("open camera device");
p->cam_ctx = camera_source_init(cmd->file_input, 4, p->width, p->height, p->fmt);
mpp_log("new framecap ok");
if (p->cam_ctx == NULL)
mpp_err("open %s fail", cmd->file_input);
} else {
p->fp_input = fopen(cmd->file_input, "rb");
if (NULL == p->fp_input) {
mpp_err("failed to open input file %s\n", cmd->file_input);
mpp_err("create default yuv image for test\n");
}
}
}
查看rkmpp日志
cat@lubancat:~$ sudo tail -f /var/log/syslog
Mar 8 23:37:58 lubancat mpp[136462]: mpp_opt: setup:real node 67:71 info 22:22
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: cmd parse result:
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: input file name: /dev/video1
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: output file name: ./out.h624
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: width : 1280
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: height : 720
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: format : 8
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_utils: type : 7
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_test: mpi_enc_test start
Mar 8 23:37:58 lubancat mpp[136462]: mpi_enc_test: open camera device
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: input devices:Camera 1
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: fmt name: [Motion-JPEG]
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: fmt pixelformat: 'MJPG', description = 'Motion-JPEG'
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: fmt name: [YUYV 4:2:2]
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: fmt pixelformat: 'YUYV', description = 'YUYV 4:2:2'
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: get width 1280 height 720
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: get dma buf(0)-fd: 13
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: get dma buf(1)-fd: 14
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: get dma buf(2)-fd: 15
Mar 8 23:37:59 lubancat mpp[136462]: camera_source: get dma buf(3)-fd: 16
Mar 8 23:37:59 lubancat mpp[136462]: mpi_enc_test: new framecap ok
Mar 8 23:37:59 lubancat mpp[136462]: mpp_info: mpp version: ed377c99 author: Herman Chen 2023-12-14 fix[hal_enc]: Add encoder internal buffer sync
Mar 8 23:37:59 lubancat mpp[136462]: mpi_enc_test: 0x7f84002580 encoder test start w 1280 h 720 type 7
Mar 8 23:37:59 lubancat mpp[136462]: mpp_enc: MPP_ENC_SET_RC_CFG bps 1728000 [108000 : 1836000] fps [15:15] gop 30
Mar 8 23:37:59 lubancat mpp[136462]: h264e_api_v2: MPP_ENC_SET_PREP_CFG w:h [1280:720] stride [2560:720]
Mar 8 23:37:59 lubancat mpp[136462]: mpp_enc: mode vbr bps [108000:1728000:1836000] fps fix [15/1] -> fix [15/1] gop i [30] v [0]
Mar 8 23:38:04 lubancat kernel: [ 2463.954669] mpp_rkvenc2 fdbd0000.rkvenc-core: can not activate fdbd0000.rkvenc-core -> fdbd0000.rkvenc-core
Mar 8 23:38:04 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 0 size 54707 qp 23
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 1 size 12631 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 2 size 13025 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 3 size 12888 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 4 size 11955 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 5 size 11493 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 6 size 11581 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 7 size 11782 qp 26
Mar 8 23:38:05 lubancat mpp[136462]: mpi_enc_test: chn 0 encoded frame 8 size 12097 qp 26