mirror of
				https://github.com/nyanmisaka/mpp.git
				synced 2025-10-31 12:36:44 +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
	 Herman Chen
					Herman Chen