mjpeg解码

mjpeg 解码可以使用opencv ,或者libjpeg,当系统中本来就使用ffmpeg的时候,可以使用ffmpeg直接解码

void MJPEGToRGB(unsigned char *data, unsigned int dataSize, unsigned char *outBuffer)
{   //元数据装填到packetAVPacket *avPkt = av_packet_alloc();avPkt->size = dataSize;avPkt->data = data;//创建并配置codecContextAVCodec *mjpegCodec = avcodec_find_decoder(AV_CODEC_ID_MJPEG);AVCodecContext* codecCtx = avcodec_alloc_context3(mjpegCodec);avcodec_get_context_defaults3(codecCtx, mjpegCodec);avcodec_open2(codecCtx, mjpegCodec, nullptr);//解码auto ret = avcodec_send_packet(codecCtx, avPkt);if (ret >=0) {AVFrame* YUVFrame = av_frame_alloc();ret = avcodec_receive_frame(codecCtx, YUVFrame);if (ret >= 0) { // 4.YUV转RGB24AVFrame* RGB24Frame = av_frame_alloc();struct SwsContext* convertCxt = sws_getContext(YUVFrame->width, YUVFrame->height, AV_PIX_FMT_YUV420P,YUVFrame->width, YUVFrame->height, AV_PIX_FMT_RGB24,SWS_POINT, NULL, NULL, NULL);// outBuffer将会分配给RGB24Frame->data,AV_PIX_FMT_RGB24格式只分配到RGB24Frame->data[0]av_image_fill_arrays(RGB24Frame->data, RGB24Frame->linesize, outBuffer,  AV_PIX_FMT_RGB24, YUVFrame->width, YUVFrame->height,1);sws_scale(convertCxt, YUVFrame->data, YUVFrame->linesize, 0, YUVFrame->height, RGB24Frame->data, RGB24Frame->linesize);// 5.清除各对象/context -> 释放内存// free context and avFramesws_freeContext(convertCxt);av_frame_free(&RGB24Frame);// RGB24Frame.}// free context and avFrameav_frame_free(&YUVFrame);}// free context and avFrameav_packet_unref(avPkt);av_packet_free(&avPkt);avcodec_free_context(&codecCtx);
}

显示

显示可以有两种方法:
1 opencv直接显示
2 sdl显示
两个的区别是看我们使用了什么,如果我们里面本来就有opencv,那直接显示就好,如果使用了sdl2,直接使用sdl2,sdl2的好处是直接显示yuv420p,不用转换成BGR,如何使用请看

sdl和ffmpeg做显示

mjpeg解码到rgb相关推荐

  1. 音视频系列2:ffmpeg将H.264解码为RGB

    音视频系列2:ffmpeg将H.264解码为RGB 前言 源码 前言 喜大普奔,终于更新啦,上期说到,如何使用ffmpeg+rtmp进行拉流,不熟悉的小伙伴们,可以先看上一期.今天我们要实现的是使用f ...

  2. Android -- 获取摄像头帧数据解码

    由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open();Camera.Parame ...

  3. [imx6 VPU]硬解码+示例[ffmpeg获取海康rtsp h264流 QT显示]

    0.说明: 1,代码基于imx6q.imx6dl已验证. 2,网上关于imx6 VPU的资料很少,遂从官方例程mxc_vpu_test里面活生生抽出来.主要是dec_test()里面提取,因为我只要解 ...

  4. RGB color model

    RGB color model RGB"在这里重定向.对于其他用途,请参阅RGB(消歧). 加色混合的表示.白色屏幕上的原色光投影显示二次色,其中两个重叠;红色,绿色和蓝色三者的强度相等的组 ...

  5. java:BufferedImage判断图像通道顺序并转RGB/BGR

    一般来说java ImageIO处理读取图像时,一般是RGB或ARGB格式,但是有的时候,我们需要图像是BGR格式, 比如通过JNI将图像矩阵传递给动态库,动态库里用OpenCV来处理矩阵,而用Ope ...

  6. 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4

    前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...

  7. stm32h743单片机嵌入式学习笔记6-压缩图片解码原理

    软件解码: JPEG/JPG 的解码过程可以简单的概述为如下几个部分: 1 .从文件头读出文件的相关信息. JPEG 文件数据分为文件头和图像数据两大部分,其中文件头记录了图像的版本. 长宽.采样因子 ...

  8. 【作业】RGB/BMP转YUV格式及YUV视频拼接

    简介 RGB文件 RGB文件是原始的没有压缩的包含红绿蓝三种颜色的图像文件. 常见的RGB格式例如RGB24,也就是一组RGB像素中的R.G.B各占8比特,即一个字节,一组RGB一共是24个比特. 这 ...

  9. Hi3559av100安装linux,海思hi3559AV100开发板参数规格介绍

    海思hi3559AV100开发板调试参数资料介绍: 处理器内核: 双核 arm Cortex A73@1.8GHz,32KB I-Cache, 64KB D-Cache /512KB L2 cache ...

最新文章

  1. 帝国cms微信商城小程序之多规格颜色尺寸长度等sku弹出层模块封装调用
  2. spring logback mysql_logback 日志输出格式
  3. 每输入四个字符添加一个中划线
  4. python中iloc的详细用法_python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)...
  5. IDEA—使用技巧总结 [持续更新... ...]
  6. mongodb分片+副本集集群环境搭建
  7. linux文件系统初始化过程(6)---执行init程序
  8. Cyborg Genes UVA - 10723
  9. 人物关系图谱:ECharts 实现
  10. 最长公共子序列问题解析
  11. Android使用弹出式对话框
  12. 未来能源互联网技术革命,能源产业大数据应用解析
  13. myScript调研,电子手写板使用,纯干货
  14. Linux——Ubuntu使用个给力的镜像,安装软件速度飞快
  15. EasyClass!Query类
  16. leetcode 18. 四数之和 (C++)
  17. 怎样将语音转化为文字
  18. 计算机考研零基础英语怎么复习,考研英语复习办法千万种,总有一种适合你!...
  19. zip压缩大于4g文件linux,unzip如何解压大于4GB的zip文件
  20. 认识c语言程序,C语言基础-认识C语言

热门文章

  1. 《Cortex-M0权威指南》之体系结构---栈空间操作
  2. MyEclipse2014配置Git
  3. 开源之旅之开源企业软件采购指南
  4. 做好产品的孵化器 淘特上线10元店、淘特100
  5. 坑了腾讯1624万!3人冒充老干妈员工诈骗腾讯 判决结果来了...
  6. 马斯克调侃苹果145元“抹布” !网友补刀:779元的空酒瓶比天价“抹布”更迷惑...
  7. 特斯拉宣布总部将从加州硅谷迁到得州
  8. 苏宁易购:全国1071万高考生可免费领取SUPER会员
  9. 陆正耀为瑞幸数据造假道歉:非常自责 会全力挽回损失
  10. Redmi K30 Pro渲染图曝光:升降式前置双摄相机模组亮眼