RV1126解码课程第四课:send_vdec_thread线程的讲解

4.1. send_vdec_thread线程的用处

send_vdec_thread线程的主要作用是通过video_queue(视频压缩队列)获取每一帧视频数据,并通过RV1126创建缓冲区的API去创建视频缓冲区,并把数据传输到RV1126硬件解码器。

4.2. send_vdec_thread的代码

void *send_vdec_thread(void *args)
{
  pthread_detach(pthread_self());
  MEDIA_BUFFER mb = NULL;
  int ret;

  MB_IMAGE_INFO_S stImageInfo = {1920, 1080, 1920, 1080, IMAGE_TYPE_NV12};

  while (1)
  {
    video_data_packet_t *video_data_packet = video_queue->getVideoPacketQueue();                  // 获取video_queue结构体的数据
    MEDIA_BUFFER mb = RK_MPI_MB_CreateImageBuffer(&stImageInfo, RK_TRUE, MB_FLAG_NOCACHED);       // 调用RK_MPI_MB_CreateImageBuffer创建视频缓冲区
    memcpy(RK_MPI_MB_GetPtr(mb), video_data_packet->buffer, video_data_packet->video_frame_size); // video_data_packet的视频缓冲数据,拷贝到RK_MPI_MB_GetPtr(mb)
    RK_MPI_MB_SetSize(mb, video_data_packet->video_frame_size);                                   // 设置缓冲区大小
    ret = RK_MPI_SYS_SendMediaBuffer(RK_ID_VDEC, 0, mb);                                          // 调用RK_MPI_SYS_SendMediaBuffer把数据传输到VDEC解码器
    RK_MPI_MB_ReleaseBuffer(mb);                                                                  // free mb
  }

  return NULL;
}

send_vdec_thread线程主要功能是获取每一帧视频队列的数据,并把每一帧视频压缩数据发送到VDEC解码器。这里需要用到第一个重要的API是RK_MPI_MB_CreateImageBuffer****,这个API是创建图像缓冲区,创建完成之后把视频数据传到视频缓冲区里面。把数据赋值完成之后,则调用RK_MPI_SYS_SendMediaBuffer把其数据发送到对应的VDEC解码器进行解码。
注1:RK1126只能处理mb,因此要先转换成mb类型然后送解码器处理
注2:RK_MPI_SYS_SendMediaBuffer中的第二个参数通道号为0的缘由,VDEC初始化时创建的通道号就为0

 // VDEC解码器初始化
  VDEC_CHN_ATTR_S stVdecAttr;
  stVdecAttr.enCodecType = RK_CODEC_TYPE_H264;       // 解码格式
  stVdecAttr.enMode = VIDEO_MODE_FRAME;              // 解码输入格式,以帧/流格式输入
  stVdecAttr.enDecodecMode = VIDEO_DECODEC_SOFTWARE; // 解码模式,是软解码还是硬件解码
  ret = RK_MPI_VDEC_CreateChn(0, &stVdecAttr);       // 创建VDEC解码器

4.3. 重要API的讲解:

MEDIA_BUFFER RK_MPI_MB_CreateImageBuffer(MB_IMAGE_INFO_S *pstImageInfo, RK_BOOL boolHardWare, RK_U8 u8Flag);

第一个传入参数:****MB_IMAGE_INFO_S结构体指针

第二个传入参数:是否创建硬件类型Buffer

第三个传入参数:硬件类型Buffer附加标记,取值: 0:开辟带缓存类型的硬件Buffer

MB_FLAG_NOCACHED:开辟不带缓存类型的硬件Buffer

MB_IMAGE_INFO_S****结构体成员如下:

image.png

u32Width:宽度

u32Height:高度

u32HorStride:虚宽

u32VerStride:虚高

enImgType:图像格式类型

图示

RK_MPI_MB_CreateImageBuffer.png
video_data_packet_t *video_data_packet = video_queue->getVideoPacketQueue();

获取的video_data_packet中的的video_data_packet->buffer和video_data_packet->video_frame_size

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容