zoukankan      html  css  js  c++  java
  • 【mpeg2】MPEG-2官方参考代码MPEG2_reference_software

    Date: 2018.10.22


    1、介绍和源码下载
    2、linux平台和ARM平台下编译和运行

    编译:

    makefile中增加arm32和arm64平台的编译:

    CC_TOOL = gcc
    #arm32
    ifeq (findstring arm32, $(platform), arm32)
    	CROSS ?= arm-hisiv500-linux- 
    	AS_TOOL = gcc
    	CFLAGS += -mcpu=cortex-a7 -mfloat-abi=softfp -fpu=neon-vfpv4 -fPIC -Wall -Wunused-value -fsigned-char
    	LDFLAGS += -fPIC
    endif
    #arm64
    ifeq (findstring arm64, $(platform), arm64)
    	CROSS ?= aarch64-himix100-linux- 
    	AS_TOOL = gcc
    	CFLAGS += -mcpu=armv8-a  -fPIC -Wall -Wunused-value -fsigned-char
    	LDFLAGS += -fPIC
    endif
    CLFAGAS += $(EXTRA_FLAGS)
    CC = $(CROSS)$(CC_TOOL)
    
    cd src/mpeg2enc
    #linux 64位编译
    make CFLAGS+=-O3
    #linux 32位编译
    make CFLAGS+=-m32 -O3
    #arm 32位编译
    make platform=arm32
    #arm 64位编译
    make platform=arm64
    
    cd src/mpeg2dec
    #linux 64位编译
    make CFLAGS+=-O3
    #linux 32位编译
    make CLAGS+=-m32 -O3
    #arm 32位编译
    make platform=arm32
    #arm 64位编译
    make platform=arm64
    

    运行:

    #mpeg2enc运行:
    ./mpeg2encode in.par out.m2v
    

    说明:
    (1)其中in.par是编码配置文件,编码输入YUV,目标码率和分辨率等参数在这里进行配置。注意:原始工程中输入YUV要求是每帧分别输入分离的YUV,可以修改为输入整个YUV进行编码。通过fseek和fread函数可以很容易实现读取各帧yuv。
    (2)增加时间统计函数:
    利用gettimeofday函数,(gettimeofday.c和gettimeofday.h)
    在put_seq()的每帧编码for循环中统计每帧的编码时间,在for循环的外面统计整个序列的编码时间。

    #mpeg2dec运行
    ./mpeg2decode -b bitstream.m2v -f -r -o0 rec%d
    

    说明:
    (1)当前的输出YUV格式是每帧按照Y,U,V分别存储的。
    可以通过在video_sequence()中设置输出文件fout并将解码的每帧yuv依次写入到fout中,注意需要修改store_yuv的方式。
    (2)增加时间统计函数:
    利用gettimeofday函数,(gettimeofday.c和gettimeofday.h)
    在video_sequence函数中统计整个序列的解码时间,在Decode_Picture中统计每帧的解码时间。

    3、Windows平台VS工程编译和运行

       首先需要自己新建一个vs solution,添加相应的库源文件和demo源文件以及必要的头文件,配置相应参数。mpeg2enc和mpeg2dec的代码关系很清晰,很容易建立vs工程,可以采用cmd批处理脚本编译windows工程。

    3.1 VS工程编译:
    build.bat release Win32
    build.bat release x64
    

    windows cmd脚本:

    @rem 说明:Windows平台命令行编译脚本
    @rem 作用:通过批处理脚本命令行编译VS工程
    
    @echo off
    @rem example: build.bat Release/Debug Win32/x64
     
    
    @rem set build_config= "Debug|Win32"
    @rem set build_config= "Release|Win32"
    @rem set build_config= $ALL
    
    @setlocal
    set build=%1
    set platform=%2
    set build_config="%build%|%platform%"
    
    @echo %date% %time%
    
    
    @echo %~dp0 
    set build_root = %~dp0
    
    @rem vcvarsall.bat所在路径
    set VCVARS="%VS120COMNTOOLS%../../VC/vcvarsall.bat"
    set DEVENV="%VS120COMNTOOLS%../IDE/devenv.exe"
    
    @rem 设置解决方案路径
    set SOlUTION="%~dp0mpeg2_reference_software.sln"
    
    @echo %SOLUTION%
    
    if not exist %VCVARS% echo "VCVARS不存在!" &goto end
    if not exist %DEVENV% echo "DEVENV不存在!" &goto end
    if not exist %SOlUTION% echo "SOlUTION不存在!" &goto end
     
    @rem 配置编译环境
    @echo "config...."
    if %platform%=="Win32"  call %VCVARS% x86
    if %platform%=="x64"    call %VCVARS% x86_amd64
    @echo build_config:%build_config%,please waiting
    
    @echo "building...." 
    %DEVENV% %SOlUTION% /rebuild %build_config% /out build.log
    
    
    copy %~dp0%build%mpeg2_enc.exe %~dp0bin
    copy %~dp0%build%mpeg2_dec.exe %~dp0bin
    
    @endlocal
    :end
    
    notepad build.log
    
    3.2 运行

    mpeg2enc编码器

    #mpeg2enc运行:
    ./mpeg2encode in.par out.m2v
    

    说明:
    (1)其中in.par是编码配置文件,编码输入YUV,目标码率和分辨率等参数在这里进行配置。注意:原始工程中输入YUV要求是每帧分别输入分离的YUV,可以修改为输入整个YUV进行编码。通过fseek和fread函数可以很容易实现读取各帧yuv。
    (2)增加时间统计函数:
    利用gettimeofday函数,(gettimeofday.c和gettimeofday.h)
    在put_seq()的每帧编码for循环中统计每帧的编码时间,在for循环的外面统计整个序列的编码时间。
    (3)上述2个增加功能已经实现在:https://download.csdn.net/download/soaringlee_fighting/10748537

    编码器时间统计功能如下图所示:
    在这里插入图片描述

    mpeg2dec解码器:

    #mpeg2dec运行
    ./mpeg2decode -b bitstream.m2v -f -r -o0 rec%d
    

    说明:
    (1)当前的输出YUV格式是每帧按照Y,U,V分别存储的。
    可以通过在video_sequence()中设置输出文件fout并将解码的每帧yuv依次写入到fout中,注意需要修改store_yuv的方式。
    (2)增加时间统计函数:
    利用gettimeofday函数,(gettimeofday.c和gettimeofday.h)
    在video_sequence函数中统计整个序列的解码时间,在Decode_Picture中统计每帧的解码时间。
    (3)上述2个增加功能已经实现在:https://download.csdn.net/download/soaringlee_fighting/10748537

    解码器时间统计功能如下图所示:


    THE END!

  • 相关阅读:
    SQLServer之视图简介
    几种快速以伺服静态文件的方法
    Node.js静态文件服务器实战[转]
    mac ssh中文乱码解决
    SSH上传和下载文件
    在web项目中集成pdf.js的默认查看器
    用pip批量更新所有包
    C# 异步锁【转】
    .NET 4并行编程入门之Task的取消[转]
    VIM技巧:选择文本块
  • 原文地址:https://www.cnblogs.com/SoaringLee/p/10532326.html
Copyright © 2011-2022 走看看