利用ffmpeg来进行视频解码的完整示例代码(H.264)

Decode()
    {
    FILE * inpf;
     
    int nWrite;
    int i,p;
    int nalLen;
    unsigned char* Buf;
    int got_picture, consumed_bytes;
    unsigned char *DisplayBuf;
    DisplayBuf=(unsigned char *)malloc(60000);
     
    char outfile[] = "test.pgm";
     
    //1.打开输入文件
    inpf = fopen("test.264", "rb");
     
    //outf = fopen("out.yuv", "wb");
     
    if(!inpf)
    {
    goto Decodereturn;
    }
     
    nalLen = 0;
    Buf = (unsigned char*)calloc ( 1000000, sizeof(char)); //准备解码文件缓冲
     
    //2.注册解码器,并且找到H264解码器
    avcodec_init();
    avcodec_register_all();
    codec = avcodec_find_decoder(CODEC_ID_H264);
     
    if (!codec) {
    return 0;
    }
    //allocate codec context
    //分配解码器内存
    c = avcodec_alloc_context();
     
    if(!c){
    return 0;
    }
    //open codec
    //3.打开解码器
    if (avcodec_open(c, codec) < 0) {
    return 0;
    }
     
    //allocate frame buffer
    //分配解码器用的帧缓冲
    picture = avcodec_alloc_frame();
    if(!picture){
    return 0;
    }
     
    rgbdatanew = (unsigned char *)malloc(sizeof(unsigned char)*(3 * width * height));
     
    while(!feof(inpf))
    {
     
    //4.获取下一个NAL的长度,并且将NAL放入Buf
    nalLen = getNextNal(inpf, Buf);
     
    //5.对改NAL解码,解码的YUV数据存在picture中
    consumed_bytes= avcodec_decode_video(c, picture, &got_picture, Buf, nalLen);
     
    if(consumed_bytes > 0)
    {
     
    //6.将picture中的YUV数据显示或者保存到文件
    p=0;
    for(i=0; i<c->height; i++)
    {
    memcpy(DisplayBuf+p,picture->data[0] + i * picture->linesize[0], c->width);
    p+=c->width;
    }
    for(i=0; i<c->height/2; i++)
    {
    memcpy(DisplayBuf+p,picture->data[1] + i * picture->linesize[1], c->width/2);
    p+=c->width/2;
    }
    for(i=0; i<c->height/2; i++)
    {
    memcpy(DisplayBuf+p,picture->data[2] + i * picture->linesize[2], c->width/2);
    p+=c->width/2;
    }
    //显示画面
    DisplayVideo(DisplayBuf);
    }
    }
     
    //7.关闭输入文件
    if(inpf)
    fclose(inpf);
     
    Decodereturn:
     
    //8.关闭解码器,释放解码器内存
    if(c) {
    avcodec_close(c);
    av_free(c);
    c = NULL;
    }
    //9.释放解码画面内存
    if(picture) {
    av_free(picture);
    picture = NULL;
    }
     
    //10.释放解码文件缓冲
    if(Buf)
    {
    free(Buf);
    Buf = NULL;
    }
     
    free(DisplayBuf);
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254833.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何成为非标行业的大拿

&#xfeff;&#xfeff;1&#xff0c;选一个好的舞台&#xff08;工作环境&#xff09;&#xff0c;有个广告词叫&#xff1a;‘心有多大&#xff0c;舞台就有多大’&#xff0c;我想变个说法叫‘舞台越大&#xff0c;心就越大’。决定你表演效果的舞台&#xff0c;你如果选择…

TCP UDP HTTP 的关系和区别

TCP UDP HTTP 三者的关系: TCP/IP是个协议组&#xff0c;可分为四个层次&#xff1a;网络接口层、网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。 TCP…

微信开放平台全网发布时,检测失败 —— C#

主要就是三个&#xff1a;返回API文本消息&#xff0c;返回普通文本消息&#xff0c;发送事件消息 --会出现失败的情况 &#xff08;后续补充说明&#xff1a;出现检测出错&#xff0c;不一定是代码出现了问题&#xff0c;也有可能是1.微信方面检测时出现服务器请求失败&…

halcon reduce_ocr_class_svm 缩减基于SVM的OCR分类器。

目录reduce_ocr_class_svm&#xff08;算子&#xff09;描述参数reduce_ocr_class_svm&#xff08;算子&#xff09; reduce_ocr_class_svm - 缩减基于SVM的OCR分类器。 reduce_ocr_class_svm&#xff08;:: OCRHandle&#xff0c;Method&#xff0c;MinRemainingSV&#xff…

Zabbix 钉钉报警

话不多说&#xff0c;咱们直接进入正题钉钉报警时基于zabbix&#xff0c;访问钉钉应用接口去推送的报警消息&#xff0c;所以我们需要一个在钉钉创建一个报警应用1、 我做的钉钉报警是基于钉钉自定义应用进行推送的所以需要登录钉钉管理后台进行创建&#xff08;zabbix自定义应…

七大因素阻碍非标自动化行业发展,那么应对的策略是什么呢?

&#xfeff;&#xfeff; 非标自动化机械相对于标准机械而言&#xff0c;是可以根据企业需要量身定做的设备&#xff0c;可以实现标准机械所不能实现的一些功能&#xff0c;实现标准件不可能达到的产量。例如在注塑行业中&#xff0c;众多注塑企业根据自身实际情况通过制造业自…

单播、多播(组播)和广播的区别

单播、多播和广播单播”&#xff08;Unicast&#xff09;、“多播”&#xff08;Multicast&#xff09;和“广播”&#xff08;Broadcast&#xff09;这三个术语都是用来描述网络节点之间通讯方式的术语。那么这些术语究竟是什么意思&#xff1f;区别何在&#xff1f;1.单播&am…

数据库资源博客---小麦苗BEST

http://blog.csdn.net/lihuarongaini/article/details/60584577 http://blog.csdn.net/lihuarongaini/article/details/68485838转载于:https://www.cnblogs.com/zengkefu/p/6718754.html

halcon write_ocr_class_svm 将OCR分类器写入文件

目录write_ocr_class_svm&#xff08;运算符&#xff09;描述参数write_ocr_class_svm&#xff08;运算符&#xff09; write_ocr_class_svm - 将OCR分类器写入文件。 write_ocr_class_svm&#xff08;:: OCRHandle&#xff0c;FileName ? 描述 write_ocr_class_svm将OCR分…

jQuery插件备忘

jQuery BlockUI Plugin 遮罩插件 http://malsup.com/jquery/block/ artDialog是一个基于javascript编写的对话框组件&#xff0c;它拥有精致的界面与友好的接口 …

于敦德:途牛五大战略纵深不惧同质化竞争

&#xfeff;&#xfeff;于敦德说&#xff0c;途牛已经在目的地、出发地、产品系列、客户和品牌五个领域建立起了纵深壁垒&#xff0c;不担心任何局部竞争&#xff0c;将坚决把局部同质化战争打到底。 一个行业的两种公司 包括旅游在内的很多行业通常都有两种公司&#xff1a;…

活在当下吧

‘’你得为你自己而活&#xff0c;想要什么就去争取&#xff0c;不要干等着以为别人会施舍给你&#xff0c;也不要在意别人的眼光和看法&#xff0c;你首先得考虑的是你自己。” “你要明白&#xff0c;只有当你自己在乎自己的时候&#xff0c;别人才会用正眼看你&#xff0c;才…

ptime概述

官方给出的ptime的定义是&#xff1a;ptime gives the length of time in milliseconds represented by themedia in a packet。简单来讲就是一个数据包中媒体的时长&#xff0c;以毫秒为单位。比如&#xff1a;ptime:20就是定义为20毫秒。 每种媒体的时间是不一样。比如&#…

halcon clear_ocr_class_svm 清除基于SVM的OCR分类器

目录clear_ocr_class_svm&#xff08;算子&#xff09;描述参数&#xff1a;clear_ocr_class_svm&#xff08;算子&#xff09; clear_ocr_class_svm - 清除基于SVM的OCR分类器。 clear_ocr_class_svm&#xff08;:: OCRHandle ? 描述 clear_ocr_class_svm清除OCRHandle给…

自定义线程的方式

2019独角兽企业重金招聘Python工程师标准>>> package com.javaxxz.test;public class Demo extends Thread {/*** 创建线程的方式* 方式一&#xff1a;* 1、自定义一个类继承Thread类* 2、重写Thread类的run方法,把自定线程的任务代码写在run方法中* …

如何使用思维导图

&#xfeff;&#xfeff;思​维​导​图​比​较​容​易​,​因​为​我​们​平​时​都​是​这​样​思​考​,​但​参​考​一​些​思​维​导​图​练​习​案​例​,​还​是​有​帮​助​的​,​使​我​们​做​的​更​好​!

Linux下基于C/C++的Socket编程基础

什么是Socket Socket接口是TCP/IP网络的API&#xff0c;Socket接口定义了许多函数或例程&#xff0c;程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程&#xff0c;必须理解Socket接口。 Socket接口设计者最先是将接口放在Unix操作系统里面的。如…

tyvj 1059 过河 dp

P1059 过河时间: 1000ms / 空间: 131072KiB / Java类名: Main背景 NOIP2005 提高组 第二道描述 在河上有一座独木桥&#xff0c;一只青蛙想沿着独木桥从河的一侧跳到另一侧。在桥上有一些石子&#xff0c;青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都 是正整…

20155204 2016-2017-2 《Java程序设计》第8周学习总结

学号 2016-2017-2 《Java程序设计》第X周学习总结 教材学习内容总结 想要取得channel的操作对象&#xff0c;可以使用channels类&#xff0c;它定义了静态方法newChannel()。Buffer的直接子类们都有一个alloocate()方法&#xff0c;可以让你指定Buffer容量。1.java.util.loggin…

HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体

HALCON示例程序train_characters_ocr.hdev使用SVM分类器训练字体 小哥哥小姐姐觉得有用点个赞呗&#xff01; 示例程序源码&#xff08;加注释&#xff09; 蓝色字体均为算子解释链接&#xff0c;可以前往查看解答 关于显示类函数解释 read_image (Image, ‘ocr/chars_tra…