xref: /rockchip-linux_mpp/mpp/hal/common/h265/hal_h265e_stream_amend.c (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /* SPDX-License-Identifier: Apache-2.0 OR MIT */
2*437bfbebSnyanmisaka /*
3*437bfbebSnyanmisaka  * Copyright (c) 2024 Rockchip Electronics Co., Ltd.
4*437bfbebSnyanmisaka  */
5*437bfbebSnyanmisaka 
6*437bfbebSnyanmisaka #include "hal_h265e_stream_amend.h"
7*437bfbebSnyanmisaka 
8*437bfbebSnyanmisaka #include "mpp_common.h"
9*437bfbebSnyanmisaka #include "mpp_log.h"
10*437bfbebSnyanmisaka 
hal_h265e_amend_temporal_id(HalEncTask * enc_task,RK_U32 strm_size)11*437bfbebSnyanmisaka MPP_RET hal_h265e_amend_temporal_id(HalEncTask *enc_task, RK_U32 strm_size)
12*437bfbebSnyanmisaka {
13*437bfbebSnyanmisaka     MPP_RET ret = MPP_OK;
14*437bfbebSnyanmisaka     H265eSyntax_new *syn = (H265eSyntax_new *)enc_task->syntax.data;
15*437bfbebSnyanmisaka     RK_U32 offset = mpp_packet_get_length(enc_task->packet);
16*437bfbebSnyanmisaka     RK_U8 *stream_ptr = (RK_U8 *)(mpp_buffer_get_ptr(enc_task->output) + offset);
17*437bfbebSnyanmisaka 
18*437bfbebSnyanmisaka     if (strm_size < 5) {
19*437bfbebSnyanmisaka         mpp_err("Stream size is too small, maybe there is hw encoder error!");
20*437bfbebSnyanmisaka         return MPP_NOK;
21*437bfbebSnyanmisaka     }
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka     if (syn->sp.temporal_id)
24*437bfbebSnyanmisaka         stream_ptr[5] = (stream_ptr[5] & 0xf8) | ((syn->sp.temporal_id + 1) & 0x7);
25*437bfbebSnyanmisaka 
26*437bfbebSnyanmisaka     return ret;
27*437bfbebSnyanmisaka }