mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-31 04:26:39 +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;
|
void *hdr_buf;
|
||||||
size_t hdr_size;
|
size_t hdr_size;
|
||||||
size_t hdr_len;
|
size_t hdr_len;
|
||||||
|
RK_S32 sps_offset;
|
||||||
RK_S32 sps_len;
|
RK_S32 sps_len;
|
||||||
|
RK_S32 pps_offset;
|
||||||
RK_S32 pps_len;
|
RK_S32 pps_len;
|
||||||
RK_S32 sei_len;
|
RK_S32 prefix_offset;
|
||||||
|
RK_S32 prefix_len;
|
||||||
H264ePrefixNal prefix;
|
H264ePrefixNal prefix;
|
||||||
|
|
||||||
/* rate control config */
|
/* 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);
|
h264e_dpb_setup(&p->dpb, p->cfg, &p->sps);
|
||||||
|
|
||||||
mpp_packet_reset(p->hdr_pkt);
|
mpp_packet_reset(p->hdr_pkt);
|
||||||
|
h264e_sps_to_packet(&p->sps, p->hdr_pkt, &p->sps_offset, &p->sps_len);
|
||||||
h264e_sps_to_packet(&p->sps, p->hdr_pkt, &p->sps_len);
|
h264e_pps_to_packet(&p->pps, p->hdr_pkt, &p->pps_offset, &p->pps_len);
|
||||||
h264e_pps_to_packet(&p->pps, p->hdr_pkt, &p->pps_len);
|
|
||||||
p->hdr_len = mpp_packet_get_length(p->hdr_pkt);
|
p->hdr_len = mpp_packet_get_length(p->hdr_pkt);
|
||||||
|
|
||||||
if (pkt) {
|
if (pkt) {
|
||||||
mpp_packet_write(pkt, 0, p->hdr_buf, p->hdr_len);
|
mpp_packet_write(pkt, 0, p->hdr_buf, p->hdr_len);
|
||||||
mpp_packet_set_length(pkt, 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");
|
h264e_dbg_func("leave\n");
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ MPP_RET h264e_pps_update(H264ePps *pps, MppEncCfgSet *cfg)
|
|||||||
return MPP_OK;
|
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 *pos = mpp_packet_get_pos(packet);
|
||||||
void *data = mpp_packet_get_data(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);
|
pps_size = mpp_writer_bytes(bit);
|
||||||
if (len)
|
if (len)
|
||||||
*len = pps_size;
|
*len = pps_size;
|
||||||
|
if (offset)
|
||||||
|
*offset = length;
|
||||||
|
|
||||||
mpp_packet_set_length(packet, length + pps_size);
|
mpp_packet_set_length(packet, length + pps_size);
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
MPP_RET h264e_pps_update(H264ePps *pps, MppEncCfgSet *cfg);
|
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);
|
MPP_RET h264e_pps_dump(H264ePps *pps);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -227,7 +227,7 @@ MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg)
|
|||||||
return MPP_OK;
|
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 *pos = mpp_packet_get_pos(packet);
|
||||||
void *data = mpp_packet_get_data(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);
|
sps_size = mpp_writer_bytes(bit);
|
||||||
if (len)
|
if (len)
|
||||||
*len = sps_size;
|
*len = sps_size;
|
||||||
|
if (offset)
|
||||||
|
*offset = length;
|
||||||
|
|
||||||
mpp_packet_set_length(packet, length + sps_size);
|
mpp_packet_set_length(packet, length + sps_size);
|
||||||
|
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg);
|
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);
|
MPP_RET h264e_sps_dump(H264eSps *sps);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -18,8 +18,11 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "mpp_common.h"
|
|
||||||
#include "mpp_mem.h"
|
#include "mpp_mem.h"
|
||||||
|
#include "mpp_common.h"
|
||||||
|
|
||||||
|
#include "mpp_packet_impl.h"
|
||||||
|
|
||||||
#include "h265e_ps.h"
|
#include "h265e_ps.h"
|
||||||
#include "h265e_header_gen.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",
|
h265e_dbg(H265E_DBG_HEADER, "get extra info nal type %d, size %d bytes",
|
||||||
src->nal[k].i_type, src->nal[k].i_payload);
|
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_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;
|
offset += src->nal[k].i_payload;
|
||||||
}
|
}
|
||||||
mpp_packet_set_length(pkt_out, offset);
|
mpp_packet_set_length(pkt_out, offset);
|
||||||
|
|||||||
Reference in New Issue
Block a user