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