[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2406 - [AVDM]first time get avdm5 next unit, return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:0,seq:0,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:0,seq:0,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 0, current seq 0, state 0, latest seq 1
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:1,seq:1,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:1,seq:1,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 1, current seq 1, state 0, latest seq 2
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:2,seq:2,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:2,seq:2,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 2, current seq 2, state 0, latest seq 3
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:3,seq:3,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:3,seq:3,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 3, current seq 3, state 0, latest seq 4
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:4,seq:4,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:4,seq:4,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 4, current seq 4, state 0, latest seq 5
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:5,seq:5,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] avdm_video_recv_cb():3514 - [AVDM]put video buffer(type:2) to avdm0 failed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm1 block(index:0,seq:90,unit number:40,buffer offset:0x7d1b4,buffer len:116436 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:5,seq:5,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm1 new buffer offset is 0x99888, available len is 0x50000, potiental len is 0x66778
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 5, current seq 5, state 0, latest seq 6
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:6,seq:6,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:6,seq:6,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 6, current seq 6, state 0, latest seq 7
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:7,seq:7,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:7,seq:7,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 7, current seq 7, state 0, latest seq 8
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:8,seq:8,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:8,seq:8,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2515 - [AVDM]Stream 5: Unit Overwrite happened. cursor seq 8, current seq 8, state 0, latest seq 9
[2025-10-29 13:15:44] [ERROR] _ctx_attach_next_unit():2516 - [AVDM]Return lastest unit
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2199 - [AVDM]drop P frame because previous P frame was droped
[2025-10-29 13:15:44] [ERROR] avdm_video_recv_cb():3514 - [AVDM]put video buffer(type:2) to avdm0 failed
[2025-10-29 13:15:44] [ERROR] __pack_block():903 - [AVDM]avdm5 block(index:9,seq:9,unit number:1,buffer offset:0x0,buffer len:1048 Bytes) has been packed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2161 - [AVDM]avdm5 new buffer offset is 0, available len is 0x40000, potiental len is 0x40000
[2025-10-29 13:15:44] [ERROR] __free_a_block():837 - [AVDM]Freed a avdm5 block(index:9,seq:9,unitcnt:1,offset:0x0,len:1048 Bytes) that is never been consumed
[2025-10-29 13:15:44] [ERROR] _ctx_put_unit():2199 - [AVDM]drop P frame because previous P frame was droped这里的5是我想要取到的,但是返回报错,其中static S32 _ctx_attach_next_block(avdm_context_t *ctx, avdm_cursor_t *cur, avdm_block_t *block)
{
S32 ret = 0;
avdm_ring_t *ring = ctx->ring;
block_desc_t *bdesc = NULL;
if (NULL == cur)
{
AVDM_ERROR("wrong params");
return -ERR_WRONG_PARAMS;
}
pthread_rwlock_rdlock(&ctx->rwlock);
if (AVDM_BUFFER_IS_EMPTY(ctx))
{
AVDM_ERROR("buffer is empty");
ret = -ERR_FRAME_NOT_READY;
goto exit;
}
// if ((ring->last_bdesc == NULL) || (ring->last_bdesc->attr.state != DESC_STATE_OCCUPIED))
if ((ring->last_bdesc == NULL))
{
AVDM_ERROR("avdm%d lastest block not ready yet", ctx->type);
ret = -ERR_FRAME_NOT_READY;
goto exit;
}
if ((ring->last_bdesc->attr.state != DESC_STATE_OCCUPIED))
{
AVDM_ERROR("avdm%d lastest block not ready yet", ctx->type);
ret = -ERR_FRAME_NOT_READY;
goto exit;
}
if (NULL == cur->desc)
{
if (TRUE == cur->attaching)
{
ret = -ERR_WRONG_PARAMS;
goto exit;
}
else
{
AVDM_ERROR("first time get avdm%d next block, return lastest block", ctx->type);
__ctx_attach_block(ctx, ring->last_bdesc, cur, block);
if (is_local_video_type(ctx) || is_network_video_type(ctx))
{
cur->pre.happen_time = ring->last_bdesc->block.unique_info.video.iframe_timestamp;
}
ret = OK;
goto exit;
}
}
/*
* 最新的已完成结点与cursor相同,表示新的block还未到来,将当前
* cursor的引用去掉,此时该线程不会引用任何avdm desc
*/
if ((ring->last_bdesc == (block_desc_t*)cur->desc) || (ring->last_bdesc->attr.seq == cur->seq))
{
AVDM_ERROR("avdm%d next block not ready yet", ctx->type);
__ctx_detach_block(ctx, cur);
ret = -ERR_FRAME_NOT_READY;
goto exit;
}
bdesc = (block_desc_t*)cur->desc;
bdesc = bdesc->next_used;
if (NULL == bdesc || bdesc->attr.seq != AVDM_NEXT_SEQ(cur->seq))
{
/* cur的desc已经被释放(next_used为空)或者seq序号不连续,发生覆盖,获取最新的block */
if (NULL == bdesc)
{
AVDM_ERROR("Stream %d: Block Overwrite happened. seq %d, next desc is empty",
ctx->type, cur->seq);
}
else
{
AVDM_ERROR("Stream %d: Block Overwrite happened. seq %d, nexseq %d, state %d",
ctx->type, cur->seq, bdesc->attr.seq, bdesc->attr.state);
}
AVDM_ERROR("Return lastest block");
__ctx_detach_block(ctx, cur);
__ctx_attach_block(ctx, ring->last_bdesc, cur, block);
if (is_local_video_type(ctx) || is_network_video_type(ctx))
{
cur->pre.happen_time = ring->last_bdesc->block.unique_info.video.iframe_timestamp;
}
ret = -ERR_OW_GET_LATEST;
}
else
{
/* 获取下一个block,同时更新下一次获取预录时需要比对的block信息 */
__ctx_detach_block(ctx, cur);
__ctx_attach_block(ctx, bdesc, cur, block);
if (is_local_video_type(ctx) || is_network_video_type(ctx))
{
cur->pre.happen_time = bdesc->block.unique_info.video.iframe_timestamp;
}
ret = OK;
}
exit:
pthread_rwlock_unlock(&ctx->rwlock);
return ret;
},这里返回了ring->last_bdesc == NULL的报错,其中/*
* 描述buffer环的结构
*/
typedef struct __avdm_ring
{
U32 bdesc_num; /* block描述符个数 */
U32 block_max_size; /* block预设最大值(可以超过) */
block_desc_t *cur_bdesc; /* 当前正在使用的block描述符 */
unit_desc_t *cur_udesc; /* 当前正在使用的unit描述符 */
block_desc_t *last_bdesc; /* 上一个已使用的block描述符 */
unit_desc_t *last_udesc; /* 上一个已使用的unit描述符 */
struct list_head unit_cblist; /* 新desc内容完成时执行cb_list的回调 */
struct list_head block_cblist; /* 新desc内容完成时执行cb_list的回调 */
unit_list_t *udesc_list; /* 指向unit空闲描述符列表 */
block_buffer_t bbuffer; /* 当前block可占用的内存空间描述 */
block_desc_t desc[0];
} avdm_ring_t;