mirror of
https://github.com/nyanmisaka/mpp.git
synced 2025-10-05 01:02:39 +08:00
[mpp_packet]: add more MppPacket function
git-svn-id: https://10.10.10.66:8443/svn/MediaProcessPlatform/trunk/mpp@287 6e48237b-75ef-9749-8fc9-41990f28c85a
This commit is contained in:
@@ -33,9 +33,9 @@ extern "C" {
|
|||||||
*/
|
*/
|
||||||
MPP_RET mpp_packet_new(MppPacket *packet);
|
MPP_RET mpp_packet_new(MppPacket *packet);
|
||||||
MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size);
|
MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size);
|
||||||
|
MPP_RET mpp_packet_copy(MppPacket *packet, const MppPacket src);
|
||||||
MPP_RET mpp_packet_deinit(MppPacket *packet);
|
MPP_RET mpp_packet_deinit(MppPacket *packet);
|
||||||
|
|
||||||
|
|
||||||
void mpp_packet_set_data(MppPacket packet, void *data);
|
void mpp_packet_set_data(MppPacket packet, void *data);
|
||||||
void* mpp_packet_get_data(const MppPacket packet);
|
void* mpp_packet_get_data(const MppPacket packet);
|
||||||
void mpp_packet_set_size(MppPacket packet, size_t size);
|
void mpp_packet_set_size(MppPacket packet, size_t size);
|
||||||
@@ -57,6 +57,13 @@ MPP_RET mpp_packet_set_eos(MppPacket packet);
|
|||||||
RK_U32 mpp_packet_get_eos(MppPacket packet);
|
RK_U32 mpp_packet_get_eos(MppPacket packet);
|
||||||
MPP_RET mpp_packet_set_extra_data(MppPacket packet);
|
MPP_RET mpp_packet_set_extra_data(MppPacket packet);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* data access interface
|
||||||
|
*/
|
||||||
|
MPP_RET mpp_packet_read(MppPacket packet, size_t offset, void *data, size_t size);
|
||||||
|
MPP_RET mpp_packet_write(MppPacket packet, size_t offset, void *data, size_t size);
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@@ -31,6 +31,22 @@ MPP_PACKET_ACCESSORS(RK_S64, dts)
|
|||||||
MPP_PACKET_ACCESSORS(RK_U32, flag)
|
MPP_PACKET_ACCESSORS(RK_U32, flag)
|
||||||
MPP_PACKET_ACCESSORS(MppBuffer, buffer)
|
MPP_PACKET_ACCESSORS(MppBuffer, buffer)
|
||||||
|
|
||||||
|
MPP_RET mpp_packet_new(MppPacket *packet)
|
||||||
|
{
|
||||||
|
if (NULL == packet) {
|
||||||
|
mpp_err_f("invalid NULL input\n");
|
||||||
|
return MPP_ERR_NULL_PTR;
|
||||||
|
}
|
||||||
|
|
||||||
|
MppPacketImpl *p = mpp_calloc(MppPacketImpl, 1);
|
||||||
|
*packet = p;
|
||||||
|
if (NULL == p) {
|
||||||
|
mpp_err_f("malloc failed\n");
|
||||||
|
return MPP_ERR_NULL_PTR;
|
||||||
|
}
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size)
|
MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size)
|
||||||
{
|
{
|
||||||
if (NULL == packet || NULL == data || 0 == size) {
|
if (NULL == packet || NULL == data || 0 == size) {
|
||||||
@@ -39,18 +55,41 @@ MPP_RET mpp_packet_init(MppPacket *packet, void *data, size_t size)
|
|||||||
return MPP_ERR_NULL_PTR;
|
return MPP_ERR_NULL_PTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
MppPacketImpl *p = mpp_calloc(MppPacketImpl, 1);
|
MPP_RET ret = mpp_packet_new(packet);
|
||||||
if (NULL == p) {
|
if (ret) {
|
||||||
mpp_err_f("malloc failed\n");
|
mpp_err_f("new packet failed\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
MppPacketImpl *p = (MppPacketImpl *)*packet;
|
||||||
|
p->data = p->pos = data;
|
||||||
|
p->size = size;
|
||||||
|
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
MPP_RET mpp_packet_copy(MppPacket *packet, const MppPacket src)
|
||||||
|
{
|
||||||
|
if (NULL == packet || NULL == src) {
|
||||||
|
mpp_err_f("found NULL input\n");
|
||||||
return MPP_ERR_NULL_PTR;
|
return MPP_ERR_NULL_PTR;
|
||||||
}
|
}
|
||||||
|
|
||||||
p->data = data;
|
size_t size = mpp_packet_get_size(src);
|
||||||
p->size = size;
|
void *data = mpp_malloc_size(void, size);
|
||||||
|
if (NULL == data) {
|
||||||
|
mpp_err_f("malloc failed\n");
|
||||||
|
return MPP_ERR_MALLOC;
|
||||||
|
}
|
||||||
|
|
||||||
*packet = p;
|
MPP_RET ret = mpp_packet_init(packet, data, size);
|
||||||
|
if (MPP_OK == ret) {
|
||||||
|
memcpy(data, mpp_packet_get_data(src), size);
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
return MPP_OK;
|
mpp_err_f("malloc failed\n");
|
||||||
|
mpp_free(data);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
MPP_RET mpp_packet_deinit(MppPacket *packet)
|
MPP_RET mpp_packet_deinit(MppPacket *packet)
|
||||||
@@ -115,3 +154,35 @@ MPP_RET mpp_packet_reset(MppPacketImpl *packet)
|
|||||||
return MPP_OK;
|
return MPP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPP_RET mpp_packet_read(MppPacket buffer, size_t offset, void *data, size_t size)
|
||||||
|
{
|
||||||
|
if (NULL == buffer || NULL == data) {
|
||||||
|
mpp_err_f("invalid input: buffer %p data %p\n", buffer, data);
|
||||||
|
return MPP_ERR_UNKNOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == size)
|
||||||
|
return MPP_OK;
|
||||||
|
|
||||||
|
void *src = mpp_packet_get_data(buffer);
|
||||||
|
mpp_assert(src != NULL);
|
||||||
|
memcpy(data, (char*)src + offset, size);
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
MPP_RET mpp_packet_write(MppPacket buffer, size_t offset, void *data, size_t size)
|
||||||
|
{
|
||||||
|
if (NULL == buffer || NULL == data) {
|
||||||
|
mpp_err_f("invalid input: buffer %p data %p\n", buffer, data);
|
||||||
|
return MPP_ERR_UNKNOW;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (0 == size)
|
||||||
|
return MPP_OK;
|
||||||
|
|
||||||
|
void *dst = mpp_packet_get_data(buffer);
|
||||||
|
mpp_assert(dst != NULL);
|
||||||
|
memcpy((char*)dst + offset, data, size);
|
||||||
|
return MPP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user