http://blog.csdn.net/huahuahailang/article/details/9040847

  1. /*************************************************
  2. * 主要功能:两路 YUV4:2:0拼接一路左右半宽格式YUV视频
  3. 参考资料:http://www.pudn.com/downloads271/sourcecode/multimedia/vfw/detail1237363.html
  4. U_size=V_size=Y_size/2
  5. *************************************************/
  6. #include<stdio.h>
  7. #include<stdlib.h>
  8. #include<string.h>
  9. #define PREWEIGHT 1920
  10. #define PREHEIGHT 1080
  11. #define RESWEIGHT 3840
  12. #define RESHEIGHT 1080
  13. #define PREYSIZE ((PREWEIGHT)*(PREHEIGHT))
  14. #define PREUSIZE ((PREWEIGHT/2)*(PREHEIGHT/2))
  15. #define PREVSIZE ((PREWEIGHT/2)*(PREHEIGHT/2))
  16. #define RESYSIZE ((RESWEIGHT)*(RESHEIGHT))
  17. #define RESUSIZE ((RESWEIGHT/2)*(RESHEIGHT/2))
  18. #define RESVSIZE ((RESWEIGHT/2)*(RESHEIGHT/2))
  19. #define PRESIZE ((PREYSIZE)+(PREUSIZE)+(PREVSIZE))
  20. #define RESSIZE ((RESYSIZE)+(RESUSIZE)+(RESVSIZE))
  21.  
  22. int GetFrameNum(const char *File)
  23. {
  24. FILE *fp;
  25. int size=;
  26. if (!(fp=fopen(File,"rb")))
  27. {
  28. printf("Open %s error !",File);
  29. exit();
  30. }
  31. else
  32. {
  33. fseek(fp,,SEEK_END);/*将文件指针移到YUV文件的末尾*/
  34. size=ftell(fp);/*计算文件的总大小*/
  35. }
  36. return (size/PRESIZE);
  37. }
  38. void ReadYUV(char *ResBuf,char *PreBuf,int resstart,int prestart,int resoffset,int preoffset,int size,int height)
  39. {
  40. int k;
  41. for (k=;k<height;k++)
  42. {
  43. memmove(ResBuf+resstart+k*(resoffset),PreBuf+prestart+k*(preoffset),size);//注意这里用memmov不用strncpy
  44. }
  45. }
  46. int main(int argc,char *argv[])
  47. {
  48. const char *FileName[]={"e:\BMX_L_1920x1080_240frms.yuv","e:\BMX_R_1920x1080_240frms.yuv"};/*两路YUV文件名*/
  49. FILE *FileResult;/*输出文件名*/
  50. FILE** fp_combine=(FILE**)malloc(sizeof(FILE *)*);/*申请文件指针*/
  51. int *FileFrameNum=(int *)malloc(sizeof(int)*);/*每个YUV的帧数*/
  52. char *PreBuf=(char *)malloc(sizeof(char)*(PRESIZE+));/*处理前每一帧图像的大小*/
  53. char *ResBuf=(char*)malloc(sizeof(char)*(RESSIZE+));/*处理后每一帧图像的大小*/
  54. int Y_start_section=;/*预处理图片Y分量存入目标区域的起始区域*/
  55. int U_start_section = ;/*预处理图片U分量存入目标区域的起始区域*/
  56. int V_start_section = ;/*预处理图片V分量存入目标区域的起始区域*/
  57. int File_offset = ;/*预处理文件偏移值*/
  58. int i_combine=,j_combine=,k_combine=;/*控制循环*/
  59. /*判断申请内存是否成功*/
  60. if (!((fp_combine)&&(FileFrameNum)&&(PreBuf)&&(ResBuf)))
  61. {
  62. printf("Allocate memeroy Faile !");
  63. exit();
  64. }
  65. /*初始化申请空间*/
  66. memset(fp_combine,,sizeof(FILE *)*);
  67. memset(FileFrameNum,,sizeof(int)*);
  68. memset(PreBuf,,sizeof(char)*PRESIZE);
  69. memset(ResBuf,,sizeof(char)*RESSIZE);
  70. if (!(FileResult=fopen("hua_result.YUV","wb")))/*创建输出文件*/
  71. {
  72. printf("Creat File faile !");
  73. exit();
  74. }
  75. for (i_combine=;i_combine<;i_combine++)
  76. {
  77. if(!(fp_combine[i_combine]=fopen(FileName[i_combine],"rb")))/*打开输入文件*/
  78. {
  79. printf("Open File %s Faile !",FileName[i_combine]);
  80. exit();
  81. }
  82. else
  83. {
  84. FileFrameNum[i_combine]=GetFrameNum(FileName[i_combine]);/*存储每一个视频的帧数*/
  85. }
  86. }
  87. i_combine=;
  88. k_combine=FileFrameNum[i_combine];
  89. while (i_combine<k_combine)
  90. {
  91. File_offset = i_combine*PRESIZE;
  92. j_combine=;
  93. while (j_combine<)
  94. {
  95. fseek(fp_combine[j_combine],File_offset,SEEK_SET);/*移动文件指针至需要处理的数据的位置*/
  96. fread(PreBuf,,PRESIZE,fp_combine[j_combine]);/*读取一幅图像*/
  97. if (j_combine==)
  98. {
  99. /*把读取预处理图片Y/U/V分量的起始位置放置目标对应位置*/
  100. Y_start_section=;
  101. U_start_section=RESYSIZE;
  102. V_start_section=RESYSIZE+RESUSIZE;
  103. }
  104. else
  105. {
  106. /*把读取预处理图片Y/U/V分量的起始位置放置目标对应位置*/
  107. Y_start_section=PREWEIGHT;
  108. U_start_section=RESYSIZE+PREWEIGHT/;
  109. V_start_section=RESYSIZE+RESUSIZE+PREWEIGHT/;
  110. }
  111. /*分别读Y、U、V*/
  112. ReadYUV(ResBuf,PreBuf,Y_start_section,, RESWEIGHT,PREWEIGHT,PREWEIGHT,PREHEIGHT);
  113. ReadYUV(ResBuf,PreBuf,U_start_section,PREYSIZE, RESWEIGHT/,PREWEIGHT/,PREWEIGHT/,PREHEIGHT/);
  114. ReadYUV(ResBuf,PreBuf,V_start_section,PREYSIZE+PREUSIZE, RESWEIGHT/,PREWEIGHT/,PREWEIGHT/,PREHEIGHT/);
  115. j_combine++;
  116. }
  117. fwrite(ResBuf,,RESSIZE,FileResult);
  118. fflush(FileResult);
  119. i_combine++;
  120. }
  121. fclose(fp_combine[]);
  122. fclose(fp_combine[]);
  123. fclose(FileResult);
  124. return ;
  125. }

拼接两个yuv合帧的更多相关文章

  1. Android中使用MediaCodec硬件解码,高效率得到YUV格式帧,快速保存JPEG图片(不使用OpenGL)(附Demo)

    MediaCodec的使用demo: https://github.com/vecio/MediaCodecDemo https://github.com/taehwandev/MediaCodecE ...

  2. Android零基础入门第30节:两分钟掌握FrameLayout帧布局

    原文:Android零基础入门第30节:两分钟掌握FrameLayout帧布局 前面学习了线性布局.相对布局.表格布局,那么本期来学习第四种布局--FrameLayout帧布局. 一.认识FrameL ...

  3. elementui中的el-table中拼接两个列表字段

    我们知道,在ElementUI中我们是使用下面的语法来展示列表字段的: <el-table :data="yanggbs" stripe style="width: ...

  4. 合并两个yuv文件的C++代码

    //将BasketballPass_416x240_50.yuv序列的前50帧和BlowingBubbles_416x240_50.yuv序列的前250帧合并成out.yuv //参数配置416 24 ...

  5. 用sql合并列,两句话合为一句

    合并bc两列 UPDATE `test` SET `a`=concat(`b`,`c`) 清空a列 UPDATE `test` SET `a` = NULL

  6. java中拼接两个对象集合

    目标:  根据两个list中每条记录的某个属性是否相同来拼接. 1.首先定义一个字符串 String str = "[{\"ITEMID\":2,\"ITEMN ...

  7. java中拼接两个数组

    int a[]={1,2,3,2}; int b[]={4,2,90,8,98}; int[] d3 = new int[a.length + b.length]; System.arraycopy( ...

  8. 图像处理之基础---2个YUV视频 拼接技术

    /************************************************* * 主要功能:两路 YUV4:2:0拼接一路左右半宽格式YUV视频 参考资料:http://www ...

  9. 2个YUV视频拼接技术

    http://blog.csdn.net/huahuahailang/article/details/9040847 2个YUV视频拼接技术 http://zhongcong386.blog.163. ...

随机推荐

  1. NOI2001 食物链【扩展域并查集】*

    NOI2001 食物链 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B,C 中的 ...

  2. Codeforces 1027E Inverse Coloring 【DP】

    Codeforces 1027E Inverse Coloring 题目链接 #include<bits/stdc++.h> using namespace std; #define N ...

  3. 使用python处理selenium中的窗口切换问题

    # 获取当前页面的句柄 ch = self.driver.current_window_handle # 获取所有句柄 ah = self.driver.window_handles # 切换句柄 s ...

  4. WPF 使用 WindowChrome,在自定义窗口标题栏的同时最大程度保留原生窗口样式(类似 UWP/Chrome)

    WPF 自定义窗口样式有多种方式,不过基本核心实现都是在修改 Win32 窗口样式.然而,Windows 上的应用就应该有 Windows 应用的样子嘛,在保证自定义的同时也能与其他窗口样式保持一致当 ...

  5. 优化 UWP 中图片的内存占用

    跟图片打交道的 UWP 应用或多或少都会遇到图片带来的性能问题,就算不主要处理图片,做个论坛做个新闻客户端都涉及到大量图片.一个帖子.一篇文章里多半都是些高清大图,这些图片一张即可占用程序 1~2M ...

  6. 《selenium2 python 自动化测试实战》(13)——上传文件

    看代码: # coding: utf-8 from selenium import webdriver from time import sleep driver = webdriver.Firefo ...

  7. SQL server无法连接,服务无法启动

    Windows 不能在 本地计算机 启动 SQL Server 服务 错误代码126 在使用SQL2005(或2008)是可能会遇到错误提示: “Windows 不能在 本地计算机 启动 SQL Se ...

  8. WinForm窗体继承自定义的模板窗体出错

    在开发Winform程序的时候,我们往往需要根据需要做一些自定义的控件模块,这样可以给系统模块重复利用,或者实现更好的效果等功能.而今天自定义一个窗体,然后子窗体继承的时候出现了一点问题. 问题: 在 ...

  9. [转]使用tcpdump抓取HTTP包

    tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 0x4745 为"GET"前两个字母"G ...

  10. ubuntu :安装好了搜狗输入法但是没法用

    用 im-config 命令打开一个配置器窗口 默认是ibus,需要修改为 fcitx 重启 ubuntu 系统就可以了.