[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:
ChenHengming
2015-09-17 21:23:44 +00:00
parent 9a571e9842
commit ca150b90c9
2 changed files with 86 additions and 8 deletions

View File

@@ -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

View File

@@ -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;
}