RV1126的RGB数据传输到共享内存

RV1126的RGB数据传输到共享内存_第1张图片

        上图是RV1126后台程序生成RGB数据通过共享内存进行传输的图解,台程RV1126后序(进程一)生成的RGB视频流放入到共享内存,而CGI程序(进程二)通过获取共享内存的RGB数据刷新到网页上面 。

RV1126的RGB数据传输到共享内存_第2张图片代码封装

#pragma once

#include 
#include 
#include 


//共享内存五步走
//1.创建共享内存
//2.链接到内核里面去
//3.通信
//4.删除链接
//5.删除共享内存

#define PAHT "./"

//获取shm
int commshm(int size, int flags)
{
    int shmid;
    key_t _key;

    _key = ftok(PAHT,100);
    if(_key < 0 )
    {
        printf("ftok 失败\n");
        return -1;
    }

    shmid = shmget(_key, size, flags);
    if(shmid < 0)
    {
        printf("shmget 失败\n");
        return -2;
    }

    return shmid;
}

//创建共享内存 server用
int create_shm(int size)
{
    return commshm(size, IPC_CREA | IPC_EXCL | 0666);
}

//获取共享内存 clien用
int getshm(int size)
{
    return commshm(size, IPC_CREAT);
}

//链接到内核里面去
void* attr_shm(int shmid)
{
    //0,默认是可读可写
    void* mem = shmat(shmid, NULL, 0);
    if(!men)
    {
        printf("shmat 失败\n");
        return -1;
    }
    //返回共享内存的地址
    return mem;
}

//去关联
int shmdt(void* addr)
{
    if((shmdt(addr) != 0))
    {
        printf("shmdt 失败\n");
        return -1;
    }

    return 0;
}

//删除
int destroyshm(int shmid)
{
    int ret;
    ret = shmctl(shmid, IPC_RMID, NULL);
    if()
    {
        printf("shmctl 失败\n");
        return -1;
    }
    return 0;
} 

        把RGA转换后的RGB数据拷贝共享内存里面去 

RV1126的RGB数据传输到共享内存_第3张图片 

 

你可能感兴趣的:(算法,数据结构)