fan-chao / nvjmi

封装Jetson Multimedia API的编解码库,基于https://github.com/jocover/jetson-ffmpeg基础进行的修改,未集成于ffmpeg,可单独使用。
MIT License
31 stars 12 forks source link

关于多路解码时间的疑问 #4

Closed mahxn0 closed 3 years ago

mahxn0 commented 3 years ago

大佬,我又来了

官方标配:1080p是264解码16路,265是32路 现在我测试发现264最多15路,265也是。 多一路耗时很快就上去了。 我看代码发现耗时最多的地方在nv12->rgba的转换这块. 这个路数上去就需要50ms左右了

decode one frame cost  0 s+ 52 ms 

t_use=50 ms

t_use=49 ms

t_use=50 ms

t_use=50 ms

t_use=50 ms
gettimeofday(&ctx->t_start,NULL);
// do vic conversion conversion: color map convert (NV12@res#1 --> RGBA packed) and scale
ret = ctx->vic_converter->convert(dec_buffer->planes[0].fd, ctx->dst_dma_fd);        
TEST_ERROR(ret == -1, "Transform failed", ret);

gettimeofday(&ctx->t_end, NULL);
int t_use = (ctx->t_end.tv_sec - ctx->t_start.tv_sec) * 1000 +
            (ctx->t_end.tv_usec - ctx->t_start.tv_usec) / 1000;
printf("t_use=%d ms\n", t_use);

我准备直接用nv12 当作输出,在做检测跟踪的时候在需要的地方再用cuda转换,整个流程用yuv。
大佬能否提供一点指导 如何修改输出直接是NV12或者YUV420的,试了jetson-ffmpeg那个 有问题好像

fan-chao commented 3 years ago

dec_buffer->planes[0].fd应该就是NV12的数据,可以试试直接从这个缓冲区获取数据。方法可以参考ctx->dst_dma_fd获取帧数据的方法试试。

mahxn0 commented 3 years ago

OK 可以了 感谢大佬