读取解码视频数据并写入共享内存

读取解码视频数据并写入共享内存的流程图

上图是读取解码视频数据并写入共享内存的流程 框图, rv1126_vdec_thread 线程作用的是读取VDEC解码器的视频数据,并把VDEC的数据传输到共享内存里面 。它要调用RK_MPI_SYS_GetMediaBuffer的API获取每一帧VDEC解码器的数据,并把每一帧的VDEC的视频数据存放到共享内存里面。并且在拷贝的过程中需要用到信号量P/V操作来保证共享内存安全性,这里用的是semop进行P/V操作。

信号量是为了保证数据一致性。和线程锁一样的,保护共享资源,信号量的使用方法,是做P/V操作。

P操作表示的是进入临界点, 一般是写入数据之前; V操作指的是走出临界点,一般是写入数据之后

信号量:

复制代码
/**
 *生成 IPC 键值:
 * key_t sem_key = ftok("/etc/semfile", 65);
 *
 * 创建信号量集合:
 * semid = semget(sem_key, 1, 0666 | IPC_CREAT); //信号量资源为1
 *
 * 初始化信号量:
 * union semun sem_union;
 * sem_union.val = 1;                   // 设置初始值为1
 * semctl(semid, 0, SETVAL, sem_union); // 设置信号量的值
 *
 * 定义信号量操作:
 * sem_p = {0, -1, 0}; // 信号量减1
 * sem_v = {0, 1, 0};  // 信号量加1
 *
 * 使用信号量:
 * semop(semid, &sem_p, 1); // P 操作(等待)
 * //要访问的共享贡献
 * semop(semid, &sem_v, 1); // V 操作(释放)
 */

封装这些接口。

直接就调用这些接口就可以,简单美观,信号量就创建完了


共享内存:

由于此共享内存存放的是YUV视频数据,所以sharememory_size = yuv_size = WIDTH * HEIGHT * 3 /2;

把数据分装好,就直接调用就可以了


rv1126_vdec_thread 线程的具体实现,首先要调用RK_MPI_SYS_GetMediaBuffer 去获取每一帧的VDEC解码视频数据,具体的传参,第一个参数:模块号id, 这里填的是RK_ID_VDEC; 第二个参数:VDEC通道号ID, 这个和创建的ID号保持一致; ****第三个参数:-****1阻塞获取数据

相关推荐
不cong明的亚子11 小时前
web live多屏互动平台
javascript·经验分享·音视频
ACP广源盛1392462567312 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
广州硅基技术官方19 小时前
AIGK外贸工厂社媒引流实战教程:海外自媒体短视频AI矩阵获客玩法解析
人工智能·音视频·媒体
奈斯先生Vector1 天前
AIGC 视频生成换个拍法:用 Kling Video 把一张人物图变成可剪辑的短故事
开发语言·人工智能·windows·python·aigc·音视频
AI的探索之旅1 天前
97 个 OpenCV 实例(二十一):音频进阶,音视频同抽与麦克风采集
人工智能·opencv·音视频
独码侠1 天前
FunASR语音识别生产部署实战:511MB音频47秒转写,离线落地 8 步、7 坑一次说清
人工智能·音视频·语音识别·funasr·说话人分离·会议纪要·内网离线部署
xiaolu123882 天前
网课视频怎么录课?3种录制方法分享,附参数配置介绍
音视频
ai产品老杨2 天前
H264 H265视频分析问题清单:环境、参数、验证和排错
音视频
论文复现现场2 天前
MiniMaxH3 生成视频速度慢、电脑带不动怎么办?用 RTX 5090 云端镜像快速运行
云计算·电脑·音视频·gpu算力
阿童木写作2 天前
跨境电商翻译工具推荐:批量图片翻译+视频字幕实时翻译
人工智能·python·音视频