Files
luban-lite-t3e-pro/packages/artinchip/mpp/ve/include/packet_manager.h
2025-09-30 11:56:06 +08:00

82 lines
2.0 KiB
C

/*
* Copyright (C) 2020-2024 Artinchip Technology Co. Ltd
*
* SPDX-License-Identifier: Apache-2.0
*
* author: <qi.xu@artinchip.com>
* Desc: packet (video bitstream container) manager
*/
#ifndef PACKET_MANAGER_H
#define PACKET_MANAGER_H
#include "ve_buffer.h"
struct packet_manager;
struct packet {
unsigned char *data; // source data virtual address
size_t size; // source data size
int64_t pts; // source data pts
unsigned int flag; // source data eos flag
size_t phy_offset; // video bytestream offset
size_t phy_size; // video bytestream size
unsigned int phy_base; // vidoe bytestream physic address
};
struct packet_manager_init_cfg {
struct ve_buffer_allocator *ve_buf_handle; // mpp buffer handle
size_t buffer_size; // video bytestream size
int packet_count; // packet buffer count
struct packet_allocator* pkt_allocator;
};
/*
create packet manager
*/
struct packet_manager *pm_create(struct packet_manager_init_cfg *cfg);
/*
destroy packet manager
*/
int pm_destroy(struct packet_manager *pm);
/*
get a empty packet for external caller
*/
int pm_dequeue_empty_packet(struct packet_manager *pm, struct mpp_packet *packet, int size);
/*
external caller put the packet to ready list, which is ready for decoding
*/
int pm_enqueue_ready_packet(struct packet_manager *pm, struct mpp_packet *packet);
/*
get a ready packet for codec.
*/
struct packet *pm_dequeue_ready_packet(struct packet_manager *pm);
/*
codec put the packet to empty list
*/
int pm_enqueue_empty_packet(struct packet_manager *pm, struct packet *packet);
/*
get the packet number of empty list
*/
int pm_get_empty_packet_num(struct packet_manager *pm);
/*
get the packet number of ready list
*/
int pm_get_ready_packet_num(struct packet_manager *pm);
/*
reclaim the packet to ready list, if the packet not decoded
*/
int pm_reclaim_ready_packet(struct packet_manager *pm, struct packet *packet);
int pm_reset(struct packet_manager *pm);
#endif /* PACKET_MANAGER_H */