mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-20 23:59:22 +08:00
[h264e_slice]: Fix slice amend and prefix nal
1. Fix loop length error on copy. 2. Change prefix nal format do not write more bit on zero nal_ref_idc. Signed-off-by: Herman Chen <herman.chen@rock-chips.com> Change-Id: I8aae36926dcd8dc73701c735396ae418db4f032f
This commit is contained in:
@@ -745,19 +745,20 @@ RK_S32 h264e_slice_move(RK_U8 *dst, RK_U8 *src, RK_S32 dst_bit, RK_S32 src_bit,
|
|||||||
RK_U8 *psrc = src + src_byte;
|
RK_U8 *psrc = src + src_byte;
|
||||||
RK_U8 *pdst = dst + dst_byte;
|
RK_U8 *pdst = dst + dst_byte;
|
||||||
|
|
||||||
RK_U16 tmp16a, tmp16b, tmp16c, last_tmp;
|
RK_U16 tmp16a, tmp16b, tmp16c, last_tmp, dst_mask;
|
||||||
RK_U8 tmp0, tmp1;
|
RK_U8 tmp0, tmp1;
|
||||||
RK_U32 loop = src_len;
|
RK_U32 loop = src_len + (src_bit_r > 0);
|
||||||
RK_U32 i = 0;
|
RK_U32 i = 0;
|
||||||
RK_U32 src_zero_cnt = 0;
|
RK_U32 src_zero_cnt = 0;
|
||||||
RK_U32 dst_zero_cnt = 0;
|
RK_U32 dst_zero_cnt = 0;
|
||||||
RK_U32 dst_len = 0;
|
RK_U32 dst_len = 0;
|
||||||
|
|
||||||
if (h264e_debug & H264E_DBG_SLICE)
|
last_tmp = (RK_U16)pdst[0];
|
||||||
mpp_log("bit [%d %d] [%d %d] loop %d\n", src_bit, dst_bit,
|
dst_mask = 0xFFFF << (8 - dst_bit_r);
|
||||||
src_bit_r, dst_bit_r, loop);
|
|
||||||
|
|
||||||
last_tmp = pdst[0] >> (8 - dst_bit_r) << (8 - dst_bit_r);
|
h264e_dbg_slice("bit [%d %d] [%d %d] [%d %d] loop %d mask %04x last %04x\n",
|
||||||
|
src_bit, dst_bit, src_byte, dst_byte,
|
||||||
|
src_bit_r, dst_bit_r, loop, dst_mask, last_tmp);
|
||||||
|
|
||||||
for (i = 0; i < loop; i++) {
|
for (i = 0; i < loop; i++) {
|
||||||
if (psrc[0] == 0) {
|
if (psrc[0] == 0) {
|
||||||
@@ -792,7 +793,7 @@ RK_S32 h264e_slice_move(RK_U8 *dst, RK_U8 *src, RK_S32 dst_bit, RK_S32 src_bit,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (dst_bit_r)
|
if (dst_bit_r)
|
||||||
tmp16c = tmp16b >> dst_bit_r | (last_tmp >> (8 - dst_bit_r) << (16 - dst_bit_r));
|
tmp16c = tmp16b >> dst_bit_r | ((last_tmp << 8) & dst_mask);
|
||||||
else
|
else
|
||||||
tmp16c = tmp16b;
|
tmp16c = tmp16b;
|
||||||
|
|
||||||
@@ -901,10 +902,10 @@ RK_S32 h264e_slice_write_prefix_nal_unit_svc(H264ePrefixNal *prefix, void *p, RK
|
|||||||
|
|
||||||
/* additional_prefix_nal_unit_extension_flag */
|
/* additional_prefix_nal_unit_extension_flag */
|
||||||
mpp_writer_put_raw_bits(s, 0, 1);
|
mpp_writer_put_raw_bits(s, 0, 1);
|
||||||
}
|
|
||||||
|
|
||||||
/* rbsp_trailing_bits */
|
/* rbsp_trailing_bits */
|
||||||
mpp_writer_trailing(s);
|
mpp_writer_trailing(s);
|
||||||
|
}
|
||||||
|
|
||||||
bitCnt = s->buffered_bits + s->byte_cnt * 8;
|
bitCnt = s->buffered_bits + s->byte_cnt * 8;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user