13d0407baSopenharmony_ci/*
23d0407baSopenharmony_ci * Copyright (c) 2021 Rockchip Electronics Co., Ltd.
33d0407baSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
43d0407baSopenharmony_ci * you may not use this file except in compliance with the License.
53d0407baSopenharmony_ci * You may obtain a copy of the License at
63d0407baSopenharmony_ci *
73d0407baSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
83d0407baSopenharmony_ci *
93d0407baSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
103d0407baSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
113d0407baSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
123d0407baSopenharmony_ci * See the License for the specific language governing permissions and
133d0407baSopenharmony_ci * limitations under the License.
143d0407baSopenharmony_ci */
153d0407baSopenharmony_ci
163d0407baSopenharmony_ci#ifndef __MPP_PACKET_H__
173d0407baSopenharmony_ci#define __MPP_PACKET_H__
183d0407baSopenharmony_ci
193d0407baSopenharmony_ci#include "mpp_meta.h"
203d0407baSopenharmony_ci
213d0407baSopenharmony_ci#ifdef __cplusplus
223d0407baSopenharmony_ciextern "C" {
233d0407baSopenharmony_ci#endif
243d0407baSopenharmony_ci
253d0407baSopenharmony_ci/*
263d0407baSopenharmony_ci * MppPacket interface
273d0407baSopenharmony_ci *
283d0407baSopenharmony_ci * mpp_packet_init = mpp_packet_new + mpp_packet_set_data + mpp_packet_set_size
293d0407baSopenharmony_ci * mpp_packet_copy_init = mpp_packet_init + memcpy
303d0407baSopenharmony_ci */
313d0407baSopenharmony_ciMPP_RET mpp_packet_new(MppPacket *packet);
323d0407baSopenharmony_ciMPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size);
333d0407baSopenharmony_ciMPP_RET mpp_packet_init_with_buffer(MppPacket *packet, MppBuffer buffer);
343d0407baSopenharmony_ciMPP_RET mpp_packet_copy_init(MppPacket *packet, const MppPacket src);
353d0407baSopenharmony_ciMPP_RET mpp_packet_deinit(MppPacket *packet);
363d0407baSopenharmony_ci
373d0407baSopenharmony_ci/*
383d0407baSopenharmony_ci * data   : ( R/W ) start address of the whole packet memory
393d0407baSopenharmony_ci * size   : ( R/W ) total size of the whole packet memory
403d0407baSopenharmony_ci * pos    : ( R/W ) current access position of the whole packet memory, used for buffer read/write
413d0407baSopenharmony_ci * length : ( R/W ) the rest length from current position to end of buffer
423d0407baSopenharmony_ci *                  NOTE: normally length is updated only by set_pos,
433d0407baSopenharmony_ci *                        so set length must be used carefully for special usage
443d0407baSopenharmony_ci */
453d0407baSopenharmony_civoid mpp_packet_set_data(MppPacket packet, void *data);
463d0407baSopenharmony_civoid mpp_packet_set_size(MppPacket packet, size_t size);
473d0407baSopenharmony_civoid mpp_packet_set_pos(MppPacket packet, void *pos);
483d0407baSopenharmony_civoid mpp_packet_set_length(MppPacket packet, size_t size);
493d0407baSopenharmony_ci
503d0407baSopenharmony_civoid *mpp_packet_get_data(const MppPacket packet);
513d0407baSopenharmony_civoid *mpp_packet_get_pos(const MppPacket packet);
523d0407baSopenharmony_cisize_t mpp_packet_get_size(const MppPacket packet);
533d0407baSopenharmony_cisize_t mpp_packet_get_length(const MppPacket packet);
543d0407baSopenharmony_ci
553d0407baSopenharmony_civoid mpp_packet_set_pts(MppPacket packet, RK_S64 pts);
563d0407baSopenharmony_ciRK_S64 mpp_packet_get_pts(const MppPacket packet);
573d0407baSopenharmony_civoid mpp_packet_set_dts(MppPacket packet, RK_S64 dts);
583d0407baSopenharmony_ciRK_S64 mpp_packet_get_dts(const MppPacket packet);
593d0407baSopenharmony_ci
603d0407baSopenharmony_civoid mpp_packet_set_flag(MppPacket packet, unsigned int flag);
613d0407baSopenharmony_ciunsigned int mpp_packet_get_flag(const MppPacket packet);
623d0407baSopenharmony_ci
633d0407baSopenharmony_ciMPP_RET mpp_packet_set_eos(MppPacket packet);
643d0407baSopenharmony_ciMPP_RET mpp_packet_clr_eos(MppPacket packet);
653d0407baSopenharmony_ciunsigned int mpp_packet_get_eos(MppPacket packet);
663d0407baSopenharmony_ciMPP_RET mpp_packet_set_extra_data(MppPacket packet);
673d0407baSopenharmony_ci
683d0407baSopenharmony_civoid mpp_packet_set_buffer(MppPacket packet, MppBuffer buffer);
693d0407baSopenharmony_ciMppBuffer mpp_packet_get_buffer(const MppPacket packet);
703d0407baSopenharmony_ci
713d0407baSopenharmony_ci/*
723d0407baSopenharmony_ci * data access interface
733d0407baSopenharmony_ci */
743d0407baSopenharmony_ciMPP_RET mpp_packet_read(MppPacket packet, size_t offset, void *data, size_t size);
753d0407baSopenharmony_ciMPP_RET mpp_packet_write(MppPacket packet, size_t offset, void *data, size_t size);
763d0407baSopenharmony_ci
773d0407baSopenharmony_ci/*
783d0407baSopenharmony_ci * meta data access interface
793d0407baSopenharmony_ci */
803d0407baSopenharmony_cisigned int mpp_packet_has_meta(const MppPacket packet);
813d0407baSopenharmony_ciMppMeta mpp_packet_get_meta(const MppPacket packet);
823d0407baSopenharmony_ci
833d0407baSopenharmony_ci/*
843d0407baSopenharmony_ci * multi packet sequence interface for slice/split encoding/decoding
853d0407baSopenharmony_ci * partition - the packet is a part of a while image
863d0407baSopenharmony_ci * soi - Start Of Image
873d0407baSopenharmony_ci * eoi - End Of Image
883d0407baSopenharmony_ci */
893d0407baSopenharmony_ciunsigned int mpp_packet_is_partition(const MppPacket packet);
903d0407baSopenharmony_ciunsigned int mpp_packet_is_soi(const MppPacket packet);
913d0407baSopenharmony_ciunsigned int mpp_packet_is_eoi(const MppPacket packet);
923d0407baSopenharmony_ci
933d0407baSopenharmony_ci#ifdef __cplusplus
943d0407baSopenharmony_ci}
953d0407baSopenharmony_ci#endif
963d0407baSopenharmony_ci
973d0407baSopenharmony_ci#endif /* __MPP_PACKET_H__ */
98