mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-11-01 21:12:56 +08:00
[h264e/h265e]: Add segment info on header gen
Change-Id: I8bba93efe03e262a0684f62a9e2a2a03d223f5f2 Signed-off-by: Herman Chen <herman.chen@rock-chips.com>
This commit is contained in:
@@ -70,9 +70,12 @@ typedef struct {
|
||||
void *hdr_buf;
|
||||
size_t hdr_size;
|
||||
size_t hdr_len;
|
||||
RK_S32 sps_offset;
|
||||
RK_S32 sps_len;
|
||||
RK_S32 pps_offset;
|
||||
RK_S32 pps_len;
|
||||
RK_S32 sei_len;
|
||||
RK_S32 prefix_offset;
|
||||
RK_S32 prefix_len;
|
||||
H264ePrefixNal prefix;
|
||||
|
||||
/* rate control config */
|
||||
@@ -532,14 +535,18 @@ static MPP_RET h264e_gen_hdr(void *ctx, MppPacket pkt)
|
||||
h264e_dpb_setup(&p->dpb, p->cfg, &p->sps);
|
||||
|
||||
mpp_packet_reset(p->hdr_pkt);
|
||||
|
||||
h264e_sps_to_packet(&p->sps, p->hdr_pkt, &p->sps_len);
|
||||
h264e_pps_to_packet(&p->pps, p->hdr_pkt, &p->pps_len);
|
||||
h264e_sps_to_packet(&p->sps, p->hdr_pkt, &p->sps_offset, &p->sps_len);
|
||||
h264e_pps_to_packet(&p->pps, p->hdr_pkt, &p->pps_offset, &p->pps_len);
|
||||
p->hdr_len = mpp_packet_get_length(p->hdr_pkt);
|
||||
|
||||
if (pkt) {
|
||||
mpp_packet_write(pkt, 0, p->hdr_buf, p->hdr_len);
|
||||
mpp_packet_set_length(pkt, p->hdr_len);
|
||||
|
||||
mpp_packet_add_segment_info(pkt, H264_NALU_TYPE_SPS,
|
||||
p->sps_offset, p->sps_len);
|
||||
mpp_packet_add_segment_info(pkt, H264_NALU_TYPE_PPS,
|
||||
p->pps_offset, p->pps_len);
|
||||
}
|
||||
|
||||
h264e_dbg_func("leave\n");
|
||||
|
||||
@@ -104,7 +104,7 @@ MPP_RET h264e_pps_update(H264ePps *pps, MppEncCfgSet *cfg)
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
RK_S32 h264e_pps_to_packet(H264ePps *pps, MppPacket packet, RK_S32 *len)
|
||||
RK_S32 h264e_pps_to_packet(H264ePps *pps, MppPacket packet, RK_S32 *offset, RK_S32 *len)
|
||||
{
|
||||
void *pos = mpp_packet_get_pos(packet);
|
||||
void *data = mpp_packet_get_data(packet);
|
||||
@@ -186,6 +186,8 @@ RK_S32 h264e_pps_to_packet(H264ePps *pps, MppPacket packet, RK_S32 *len)
|
||||
pps_size = mpp_writer_bytes(bit);
|
||||
if (len)
|
||||
*len = pps_size;
|
||||
if (offset)
|
||||
*offset = length;
|
||||
|
||||
mpp_packet_set_length(packet, length + pps_size);
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
MPP_RET h264e_pps_update(H264ePps *pps, MppEncCfgSet *cfg);
|
||||
MPP_RET h264e_pps_to_packet(H264ePps *pps, MppPacket packet, RK_S32 *len);
|
||||
MPP_RET h264e_pps_to_packet(H264ePps *pps, MppPacket packet, RK_S32 *offset, RK_S32 *len);
|
||||
MPP_RET h264e_pps_dump(H264ePps *pps);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -227,7 +227,7 @@ MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg)
|
||||
return MPP_OK;
|
||||
}
|
||||
|
||||
MPP_RET h264e_sps_to_packet(H264eSps *sps, MppPacket packet, RK_S32 *len)
|
||||
MPP_RET h264e_sps_to_packet(H264eSps *sps, MppPacket packet, RK_S32 *offset, RK_S32 *len)
|
||||
{
|
||||
void *pos = mpp_packet_get_pos(packet);
|
||||
void *data = mpp_packet_get_data(packet);
|
||||
@@ -423,6 +423,8 @@ MPP_RET h264e_sps_to_packet(H264eSps *sps, MppPacket packet, RK_S32 *len)
|
||||
sps_size = mpp_writer_bytes(bit);
|
||||
if (len)
|
||||
*len = sps_size;
|
||||
if (offset)
|
||||
*offset = length;
|
||||
|
||||
mpp_packet_set_length(packet, length + sps_size);
|
||||
|
||||
|
||||
@@ -126,7 +126,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg);
|
||||
MPP_RET h264e_sps_to_packet(H264eSps *sps, MppPacket packet, RK_S32 *len);
|
||||
MPP_RET h264e_sps_to_packet(H264eSps *sps, MppPacket packet, RK_S32 *offset, RK_S32 *len);
|
||||
MPP_RET h264e_sps_dump(H264eSps *sps);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -18,8 +18,11 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include "mpp_common.h"
|
||||
#include "mpp_mem.h"
|
||||
#include "mpp_common.h"
|
||||
|
||||
#include "mpp_packet_impl.h"
|
||||
|
||||
#include "h265e_ps.h"
|
||||
#include "h265e_header_gen.h"
|
||||
|
||||
@@ -700,6 +703,8 @@ MPP_RET h265e_get_extra_info(H265eCtx *ctx, MppPacket pkt_out)
|
||||
h265e_dbg(H265E_DBG_HEADER, "get extra info nal type %d, size %d bytes",
|
||||
src->nal[k].i_type, src->nal[k].i_payload);
|
||||
mpp_packet_write(pkt_out, offset, src->nal[k].p_payload, src->nal[k].i_payload);
|
||||
mpp_packet_add_segment_info(pkt_out, src->nal[k].i_type,
|
||||
offset, src->nal[k].i_payload);
|
||||
offset += src->nal[k].i_payload;
|
||||
}
|
||||
mpp_packet_set_length(pkt_out, offset);
|
||||
|
||||
Reference in New Issue
Block a user