Commit Graph

241 Commits

Author SHA1 Message Date
Herman Chen
31e911d44b [mpp_frame]: Add metadata check function
Change-Id: I95f722ae95b8db969c484b3157ddbe8c8f92a13f
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-07-22 11:07:36 +08:00
Herman Chen
f654f1a0ad [rk_venc_cmd]: Change h264 codec cfg
1. Remove slice mode/arg in H.264 codec cfg.
2. Add max long-term reference number / max temporal layer id / prefix
mode / base layer priority id.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: If34166e4658edba65f4c6c095412a6fadd941320
2020-07-08 16:32:33 +08:00
Herman Chen
7f4ebeec8e [meta]: Add more meta key for encoder
1. Add KEY_ENC_MARK_LTR for marking current frame to be long-term
referece frame.
2. Add KEY_ENC_USE_LTR for assigning a long-term reference frame as
current frame's reference frame.
3. Add KEY_ENC_FRAME_QP for assigning a fix QP for current frame.
4. Add KEY_ENC_BASE_LAYER_PID for assining a priority id for base layer
in tsvc mode.

All these four features are defined in MLVEC test.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: Ib041d9c2f203d7e582a3402bd61dd6a9eb18015a
2020-07-08 15:41:23 +08:00
Herman Chen
33e7e4c52a [mpi]: Remove unused H.264 mpi cfg structure
Remove sei / ref cfg in MppEncH264Cfg.

Change-Id: Iaef6a8a845b691dc21d0a6a6eca62e27bc5cf5a4
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-06-10 17:37:49 +08:00
Herman Chen
550e2ee6b3 [mpi]: Remove unused encoder cfg cmd defines
Change-Id: I183fa54d9f074ab94f3bb71bb525ff88372a7724
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-06-10 11:47:16 +08:00
Herman Chen
c2069f3345 [mpp_enc_ref]: Add MppEncRef/MppEncRefs module
Add MppEncRef/MppEncRefs module

MppEncRefs is for mpp encoder coded picture buffer (CPB) management.
MppEncRefs will gnerate reference buffer status EncCpbStatus for each
encoder to implement its own process.

Change-Id: I5f85a0f46dc6bc40954b0393ba52ad4008565643
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-26 16:29:40 +08:00
Herman Chen
90a62f52a3 [rk_venc_ref]: Add new reference config interface
Add MppEncRefCfg for reference frame relationship configure.
MppEncRefCfg is for user to setup its own gop reference hierarchy.

Setup flow:
    mpp_enc_ref_cfg_get_preset (can be ommitted, helper for setup lt/st cfg)
    mpp_enc_ref_cfg_init
    mpp_enc_ref_cfg_set_cfg_cnt
    mpp_enc_ref_cfg_add_lt_cfg (can be omitted)
    mpp_enc_ref_cfg_add_st_cfg
    mpp_enc_ref_cfg_check (IMPORTANT: need to check before contol to mpp)
    control to mpp
    mpp_enc_ref_cfg_deinit

Change-Id: Ia0f5c4c713a4b11d8e4e5581609f8501f36549cc
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-26 16:29:40 +08:00
Herman Chen
6a6521ed13 [gop_ref]: Remove gop_ref
New reference frame config interface will be added.

Change-Id: I5766cefde12237561bbc20c905e47ed2d3e90011
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-26 16:29:40 +08:00
Herman Chen
d638ef1bb7 [rk_venc_cmd]: Restore skip_cnt for compatibility
Change-Id: Ib542ace59e199752d6316c422ae11b4e57a0990b
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-20 18:12:24 +08:00
Herman Chen
d95306a63b [mpp_enc]: Add color range support
1. Change interface for adding color range to MppPrepCfg.
2. Add option in MppEncCfg.
3. Add H.264 / H.265 sps support on full / limit range.

IMPORTANT: the binary backward compatibility is broken since this commit.

Change-Id: Ib68f29bab5c6d364fe8b612bd4dff2ecd5bc59cd
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-15 15:48:06 +08:00
Herman Chen
0b4532c6d5 [rk_mpi_cmd]: Add max_reenc_cnt for reencode flow
When max_reenc_cnt is zero the reencode flow is disabled.

Change-Id: Iba600b37bb5ab6e4f720b652d59abfae36f9e52f
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-15 15:48:06 +08:00
Herman Chen
85f9662150 [mpi_enc_test]: Use MppEncCfg to setup encoder
Change-Id: Ie3506a3555751344f54264d85804ee509a976659
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-15 15:48:06 +08:00
Herman Chen
83e2724158 [mpp_enc_cfg]: Add MppEncCfg control
1. Add h264e process function.
1. Add h265e process function.
2. Add jpege process function.
2. Add vpu_api_legacy support.
3. Clear input MppEncCfgSet when MPP_ENC_SET_CFG is finished.

Change-Id: Ida1234c351483bd9f96a75bc77e90ca2d75ec38b
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-15 15:48:06 +08:00
sayon.chen
8e00c203d7 [mpp_enc_cfg]: Add h265e default cfg
Change-Id: I7f4b05be7bcfdbb93cf3b40f74941e14190ce3b4
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2020-05-15 15:48:06 +08:00
sayon.chen
49f610442a [h265e_ps]: Support vui set
Change-Id: I5fa20430eb3cd8dd5f66d367db19463b0973e0df
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2020-05-13 15:33:29 +08:00
Herman Chen
d40aea09bc [rk_venc_cfg]: Add new encoder cfg method
For better binary comaptibility users should use this method to
configure encoders.
NOTE: api only init once.

Change-Id: I5ced15b504e4933560895e6e11f62613ae89e350
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-13 14:10:34 +08:00
Herman Chen
4b8a5f557a [rk_mpi_cmd]: Rename MPP_ENC_SET/GET_ALL_CFG
We are going to use new configure method for all encoders.

Change-Id: Id478d2567714ee9c6ddee3d410a4a855825f1c42
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-05-13 09:42:20 +08:00
Herman Chen
d42f4ed028 [mpi]: Support relative qp in ROI region
New vepu541 encoder support relative qp delta config in ROI region.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: Iac57469c30ea09ca03368cc3e02372a326c525ec
2020-04-20 10:34:42 +08:00
Herman Chen
8d8f2273c5 [mpp_frame]: Add frame buffer compression support
Add vepu541 FBC support.

Change-Id: Ie5256ab4debb160801467243db353a2810826513
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-04-10 17:42:08 +08:00
Herman Chen
f13897ce65 [rc]: Add MppFrame to EncRcTask
Attach MppFrame to EncRcTask as meta data channel between user and
internal RC strategy.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: I2787a69bec3911fe2e4f637153925c5ea88031ec
2020-04-10 10:16:24 +08:00
Herman Chen
fe4b86b025 [mpp_enc]: Update OSD API
1. Update OSD palette config API. User must specify palette is default
or user defined.
2. OSD palette config will go through control and OSD data (region)
config will go through meta data in each frame.
3. Remove unused code.
4. Add mpi_enc_utils for mpi_enc_test cases

Change-Id: Ib4aeb60789a3e999446212841508e604533efb3c
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-04-02 18:21:20 +08:00
Herman Chen
0a2d4e341c [mpp_enc_v2]: Add encoder header output mode
1. Default output mode is output header only on config changed.
2. Add new mode to output header on each intra frame.

Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Change-Id: Iea8dd1e6bb377318b88300d6a013f2c736b15afc
2020-03-30 17:16:11 +08:00
Herman Chen
6a76bfc3f5 [mpp_buffer]: Add offset property
1. Add offset set / get function to MppBuffer
2. Add U32 register address converstion function.

Change-Id: Id297b7a05e47d4e249f5e33c1924a0539729c808
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-03-20 17:41:32 +08:00
Herman Chen
6d52e80b27 [encoder]: Change rate control work flow
1. Add mpp_rc_api and mpp_rc_defs for open rc module to external users.
2. Add RcImplApi registration and setup function.
3. Separate RC module from the encoder implement.
4. Use EncFrmStatus and EncRcTaskInfo to control work flow.
5. proc_rc and update_rc function in enc_impl are removed.
6. Use rc_frm_start and rc_hal_start to process rate control.
7. Add more RcCfg setup in mpp_enc_v2.cpp.
8. Use rc_task to replace all the frame status and rc config transmit.
   EncFrmStatus is for encoder flow control.
   EncRcTaskInfo is for communication between rc / hal / hardware

Change-Id: Ia72b0e0804bfca13963c2b2a5887983fd9b5bcbf
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2020-03-19 14:43:02 +08:00
Herman Chen
61d8063b36 [mpi]: Add command for RC api configure
User can define its own rate control stategy function and can use them
in MPP encoder flow.

Change-Id: I9573ab8cb5a63c543e17faf07e89f64f5d7013ef
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-03-18 19:37:07 +08:00
Chen Jinsen
55cf9aa935 [vpu]: update to match new ioctl for kernel-4.19
Currently, this patch only works well on jpege.

Signed-off-by: Chen Jinsen <kevin.chen@rock-chips.com>
Change-Id: I77026c1975f4937b5bc042e490a2230708b3e715
2020-03-13 17:26:05 +08:00
Herman Chen
512de40ff0 [h264e]: Add scaling list mode configuration
Change-Id: Icb4435060c76bc03472d22d6a13909ad4c60e88b
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-03-11 17:27:46 +08:00
Herman Chen
6cee8bb11a [h264e]: Add slice split function
Slice split has two modes: split by byte and split by CTU number.

Change-Id: Id5a07f8a8cae612b6b913e9cb747dacec5b8e5a2
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-03-07 15:32:29 +08:00
sayon.chen
2c7148f110 [meta]: Add MV_LIST meta for smartp
Change-Id: I7960eadef22220a4a895b88d8b09895f07e4d694
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2020-02-24 14:17:34 +08:00
Herman Chen
9f3ac0e7dd [mpp_frame]: Add more color format
Change-Id: Ibf66d81887addec859fb986382c8f1ae1a1dafe8
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-01-19 18:02:52 +08:00
Herman Chen
9ce259355a [mpp_frame]: Add format check macro
Change-Id: I0b84cd55951dd5c085b1dd8b9926c4308ac24371
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2020-01-19 18:02:52 +08:00
sayon.chen
d39238c871 [h265e]: Add row_dealt_qp set for rkvenc mbrc
Change-Id: Ib0cd342f7b2c2060871d5f540f08b37574c89e31
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2020-01-07 09:55:20 +08:00
sayon.chen
72606f13fa [h265e]: rename fivm_max_mrg_cnd to max_mrg_cnd
Change-Id: I7e1b4fb37a8af9812c393e095006f4af9f625bea
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2020-01-03 15:24:48 +08:00
Herman Chen
459eace205 [mpp_frame]: Add color format print
1. Add color format print for all supported format.
2. Add RGB color fill function.

Change-Id: I79fb3f40402b6fb6e36883c99945e709723aee7d
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-12-31 10:53:33 +08:00
sayon.chen
fd862c2884 [mpp_enc]: enc supprot user data set
1. add user data struct define
    2. meta supprot user data set

Change-Id: I1ac4bf179ce15fce61b3ad326de9fb0f8c821cad
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2019-12-30 08:49:29 +08:00
Rimon Xu
e36da64e9b [vproc]: set iep deinterlace mode to frame.
Change-Id: I5acd7b202bdbb60afa952f1f1486ae791e0e8cda
Signed-off-by: Rimon Xu <rimon.xu@rock-chips.com>
2019-12-23 14:37:41 +08:00
sayon.chen
abb3607c15 [mpp_meta]: Add osd & roi metadata keyid
Change-Id: Ibf2b2f87cd75655c68d6a697bc81d89f699abfac
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2019-12-20 17:48:03 +08:00
sayon.chen
d5a97b5c2f [h265e]: Add h265e codec config definition
Change-Id: I6b8816ce94830df2d2a8e4139a7aa8ef6242225d
Signed-off-by: sayon.chen <sayon.chen@rock-chips.com>
2019-12-20 17:45:36 +08:00
Herman Chen
0547a740fe [mpi]: Add better sync call to get encoder header
Change-Id: Ibbd9b4ee178b0994f3c86738cd623eaffd2bca0f
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-12-11 14:55:24 +08:00
Herman Chen
7453d6a9da [mpi]: Add change flag for MppEncGopRef
MppEncGopRef change flag contains enable, long-term reference loop,
short-term gop loop and layer rate control flags.

Change-Id: I98b84cf13e18da769af6867af96a3257824e5c63
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-12-10 20:35:01 +08:00
Ding Wei
7d05e33de8 [mpp]: add /dev/mpp_service support
Add a new ioctl mode for kernel-4.19 or later.
Tips:
    1. There will be only one device /dev/mpp_service in kernel.
       User should use client type to distinguish different device.
    2. Each codec use the same function as before.
    3. Ioctl magic changes from VPU_IOC to MPP_IOC.
    4. Update structure for ioctl argument.
	Original structure:
	    data_ptr | size
	In this mode has many sortcommings:
	a) Need many ioctl cmd for different requirements.
	b) Data_ptr not to differ library for 32 or 64 system.
	c) Contain only one info ioctl once.

    New data structure:
        cmd_type | flags | size | offset | data_ptr
    a) Cmd_type works like previous ioctl cmd.
    b) Flags is extend to mark current data for any purpose.
    c) Size is the same as before.
    d) Data_ptr use 32 bits build in 32 system while 64 bits in 64 system.

kernel-4.19 related commit:
ib94ac0df876dfcc786b25ed3de6a68d861d2ef1e
cda9d27c62017309519bcbf8fe91057dfdc21076

Change-Id: I13d54a2e4823b7378265f100540916a22f62b9d4
Signed-off-by: Ding Wei <leo.ding@rock-chips.com>
2019-12-10 20:12:50 +08:00
Chen Jinsen
1af542e405 [legacy]: vframe add vui info
Change-Id: I595e90cd46412a37440b9555f93fb8fa46d9d6dd
Signed-off-by: Chen Jinsen <kevin.chen@rock-chips.com>
Signed-off-by: Hery Xu <hery.xu@rock-chips.com>
2019-11-19 09:08:38 +08:00
Herman Chen
cdadaa9bba [h264e_pps]: Add h264e pps function
NOTE: Add scaling list mode flag to rk_venc_cmd.h

Change-Id: Idd3b33c577ce5ffd79dabc850f7c98a98c1ac19a
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-11-18 19:45:10 +08:00
Herman Chen
a961ef5534 [venc_cmd]: Change gop ref cmd definition
1. Remove Hisilicon interface.
2. Add LTR configure.
3. Add temporal layer rate control interface.

Change-Id: I5172e69e828bdbe8e7f0cfc8ab0ca5a6b00d022a
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-10-22 20:36:32 +08:00
Herman Chen
ea476ad4d1 [misc]: Change internal API interface
1. Change internal api RK_S32 cmd to MpiCmd.
2. Remove external MppEncCfgSet in MPI and move it internal data.

Change-Id: I0b93429f3b9f92712a57d0df54a1c76b3e08bf9d
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-10-14 20:21:41 +08:00
Herman Chen
7782c8ea11 [enc_impl]: Add new interface for work flow change
Change-Id: Ic110aaf53964f532b59bbb0fbd6347c95accf324
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-09-20 16:59:15 +08:00
Herman Chen
dc79923e1d [mpp_frame]: Add set meta function to mpp_frame
Change-Id: I8b61b29d534d6d77f8be0bb2f033d7ba5e2a2496
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-09-17 09:07:29 +08:00
Herman Chen
2dfcb96976 [meta]: Add long-term reference index to meta data
This meta data is used for SVC/TSVC encoding / decoding.

Cases and meaning when using KEY_LONG_REF_IDX:

1. On decoder output frame
Represents the long-term reference frame index of the output frame.

2. On encoder input frame
Represents the long-term reference frame which should be used as
reference frame for current encoding frame.

3. On encoder output packet
Represetns the long-term reference frame index of the output packet.

Change-Id: I41dd2eb754b84cc0d8873f7dfbb695e31bc866ae
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-09-12 08:52:15 +08:00
Herman Chen
66a26a7cf2 [rk_venc_cmd]: Change encoder interface
Add encoder misc config for later extension.

Change-Id: Ie67b2d5e74227e5089b16752d8088a9502142ddd
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-06-27 10:37:01 +08:00
Herman Chen
d17861b67b [rk_mpi.h]: Separate rk_mpi_cmd.h into two headers
1. rk_mpi_cmd.h will contain cmd value only.
2. rk_venc_cmd.h will contain all the encoder command structure.
3. Move MppCtxType and MppCodingType to rk_type.h for better include
dependency.
4. Add MppEncRefCfg to MppEncCfgSet.
5. Remove rk_mpi.h dependency inside mpp.

Change-Id: I6b972738100fb60c0a6a9b7cfe0a012abf4205b7
Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
2019-06-26 10:09:23 +08:00