zoukankan      html  css  js  c++  java
  • OpenH264

     转自:http://blog.csdn.net/chinabinlang/article/details/41209053

    目前最常用的264工程师x264;

    最近有又有一个开源工程OpenH264,WebRTC再用用,具体工程具体没有详细研究;

    编译完成工程后,用h264dec.exe命令行测试解码x264编码的文件,解码后正常显示,也就是说这两个工程编码的格式应该相互兼容;

    地址:http://www.openh264.org/faq.html

    提供C语言接口和C++接口;

    目前网络可以找到的文档相对较少,大概浏览了一下这个工程,觉得还不错;

    工程编译Win7:

    我在win7上简单编译了一些工程,没有特别需要配置的地方,

    1:下载源码,解压;

    2:msys进入解压目录,直接执行 make 命令;

    3:几分钟后编译完成,在解压目录生成相关exe文件,几个.a文件,和一个libopenh264.dll文件;

    4:在目录openh264-1.0.0codecuildwin32enc下有VS工程,打开可以编译出控制台程序和相关dll文件夹;生成的文件在openh264-1.0.0inwin32Debug;

    当然其它平台也有相关的工程IDE文件;

    5:还有一个方法:进入目录openh264-1.0.0 estbin,用管理员权限执行 AutoBuild_Windows_VS2008.bat 文件,注意修改文件中的VS路径与计算机上的安装路径一直;

    然后编译就可以了,文件在openh264-1.0.0inwin32目录中,有debug和release两个文件夹;

    以下是工程中的说明文档:

    OpenH264_API_v1.0.docx文档

    Contents

    Encoder Interface Usage: 2

    Step#1: create and destroy the encoder 2

    Step#2: initialize the encoder 2

    Step#3: invoker the encoding 2

    Step#4: control the encoding 3

    Encoder Option List: 4

    Encoder Parameter List: 6

    Encoder Return Value: CM_RETURN 9

    Encoder Return Value: EVideoFrameType: 9

    Decoder Usage: 10

    Step#1: create and destroy the decoder 10

    Step#2: initialize the decoder 10

    Step#3: invoker the decoding 10

    Step#4: control the decoding 11

    Decoder Option List: 12

    Decoder Parameter List: 13

    Decoder Usage Example: 13

    Revisions history

    Date

    Version

    Author

    Description

    12/23/2013

    0.1

    Sijia Chen, Wayne Liu

    Initial version

    12/25/2013

    0.2

    Sijia Chen

    Add encoder return value explanation

    12/25/2013

    0.3

    Sijia Chen

    Add explanation on range of some parameters in encoder

    03/04/2014

    0.4

    Karina Li

    Interface and parameters update

    05/23/2014

    1.0

    Wayne Liu, Karina Li

    Update for v1.0 release

    Encoder Interface Usage:

    Step#1: create and destroy the encoder

    int  WelsCreateSVCEncoder(ISVCEncoder** ppEncoder);

    void WelsDestroySVCEncoder(ISVCEncoder* pEncoder);

    Step#2: initialize the encoder

    /*

        Initilaize encoder by using base parameters.

      */

    virtual int Initialize (const SEncParamBase* pParam) = 0;

    /*

    Initilaize encoder by using extension parameters. If the user needs to set the more details, refer to use this interface.

      */

    virtual int InitializeExt (const SEncParamExt* pParam) = 0;

    /*

       Get the default extension parameters . some time the user doesn’t care about all of the parameters. So he can get use the interface to get the default parameter, then updates these parameters he cares.

      */

    virtual int GetDefaultParams (SEncParamExt* pParam) = 0;

    virtual int Unintialize() = 0;

    Step#3: invoker the encoding

    /*

     * return: 0 - success; otherwise - failed;

     */

    virtual int EncodeFrame(const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0;

    SSourcePicture:

    Format 

    Parameter Name

    Meaning/Constraint

    int

    iColorFormat

    the input image color space format, currently only supports videoFormatI420

    int

    iStride[4]

    The stride of picture buffer 

    unsigned char

    pData[4]

    Pointer to the source data  

    int

    iPicWidth

    width of picture in luminance samples

    int

    iPicHeight

    height of picture in luminance samples

    Long long

    uiTimeStamp

    Time stamp of the frame.

    // kpSrc = the pointer to the source luminance plane

    // chrominance data:

    // CbData = kpSrc + m_iMaxPicWidth * m_iMaxPicHeight;

    // CrData = CbData + (m_iMaxPicWidth * m_iMaxPicHeight)/4;

    //the application calling this interface needs to ensure the data validation between the location of [kpSrc, kpSrc+framesize-1]

    Step#4: control the encoding

    The upper layer application should ensure threading safety between calling these control interfaces and calling the encoding. 

    /*

      * return: 0 - success; otherwise - failed;

      */

    virtual int PauseFrame(const SSourcePicture* kpSrcPic, SFrameBSInfo* pBsInfo) = 0;

    /*

     * return: 0 - success; otherwise - failed;

     */

    virtual int ForceIntraFrame(bool bIDR) = 0;

    /***********************************************************************

     * InDataFormat, IDRInterval, SVC Encode Param, Frame Rate, Bitrate,..

    **************************** ******************************************/

    /*

     * return: CM_RETURN: 0 - success; otherwise - failed;

     */

    virtual int SetOption(ENCODER_OPTION eOptionId, void* pOption) = 0;

    virtual int GetOption(ENCODER_OPTION eOptionId, void* pOption) = 0;

    Encoder Option List:

    int CWelsH264SVCEncoder::SetOption(ENCODER_OPTION eOptionId, void* pOption)

    Option ID

    Input Format

    Meaning/Constraint

    ENCODER_OPTION_SVC_ENCODE_PARAM_BASE

    Structure of Base Param

    ENCODER_OPTION_SVC_ENCODE_PARAM_EXT

    Structure of Extension Param

    ENCODER_OPTION_IDR_INTERVAL

    int

    IDR period,

    0/-1 means no Intra period (only the first frame)

    >0 means the desired IDR period, must be multiple of (2^temporal_layer)

    ENCODER_OPTION_FRAME_RATE

    float

    Maximal input frame rate, current supported range: 

    MAX_FRAME_RATE = 30

    MIN_FRAME_RATE = 1

    ENCODER_OPTION_BITRATE

    int

    ENCODER_OPTION_MAX_BITRATE

    int

    ENCODER_PADDING_PADDING

    int

    0:disable padding;1:padding

    ENCODER_LTR_RECOVERY_REQUEST

    Structure of SLTRRecoverRequest

    ENCODER_LTR_MARKING_FEEDBACK

    Structure of SLTRMarkingFeedback

    ENCOCER_LTR_MARKING_PERIOD

    Unsigned int

    ENCODER_OPTION_LTR

    Unsigned int

    0:not enable LTR;>0 enable LTR; 

    LTR number is fixed to be 2 in current encoder

    ENCODER_OPTION_ENABLE_PREFIX_NAL_ADDING

    Bool

    false:not use Prefix NAL; true: use Prefix NAL

    ENCODER_OPTION_ENABLE_SPS_PPS_ID_ADDITION

    Bool

    false:not adjust ID in SPS/PPS; true: adjust ID in SPS/PPS

    ENCODER_OPTION_CURRENT_PATH

    string

    ENCODER_OPTION_DUMP_FILE

    Structure of SDumpLayer

    Dump layer reconstruct frame to a specified file

    ENCODER_OPTION_TRACE_LEVEL

    int

    Output some info accoding to the trace level

    Encoder Parameter List:

    (Note: some parameters in mentioned structure are not explained because they are to be removed)

    SEncParamBase:

    Format 

    Parameter Name

    Meaning/Constraint

    int

    iUsageType

    Currently two type applications are supported. 

    0: camera video 

    1: screen content

    int

    iInputCsp

    color space of input sequence

    currently only supports videoFormatI420

    int

    iPicWidth

    width of picture in luminance samples (the maximum of all layers if multiple spatial layers presents)

    int

    iPicHeight

    height of picture in luminance samples((the maximum of all layers if multiple spatial layers presents)

    int

    iTargetBitrate

    target bitrate 

    int

    iRCMode

    Rate control mode

    float

    fMaxFrameRate

    maximal input frame rate

    SEncParamExt:

    Format 

    Parameter Name

    Meaning/Constraint

    int

    iUsageType

    Currently two type applications are supported. 

    0: camera video 

    1: screen content

    int

    iInputCsp

    color space of input sequence

    currently only supports videoFormatI420

    int

    iPicWidth

    width of picture in luminance samples (the maximum of all layers if multiple spatial layers presents)

    int

    iPicHeight

    height of picture in luminance samples((the maximum of all layers if multiple spatial layers presents)

    int

    iTargetBitrate

    target bitrate 

    int

    iRCMode

    Rate control mode

    float

    fMaxFrameRate

    maximal input frame rate

    int

    iTemporalLayerNum

    temporal layer number, max temporal layer = 4

    int

    iSpatialLayerNum

    spatial layer number, 

    1<= iSpatialLayerNum <= MAX_SPATIAL_LAYER_NUM

    MAX_SPATIAL_LAYER_NUM = 4

    SSpatialLayerConfig 

    sSpatialLayers[MAX_SPATIAL_LAYER_NUM];

    int

    iInputCsp

    color space of input sequence

    int

    iTemporalLayerNum

    temporal layer number, max temporal layer = 4

    int

    iSpatialLayerNum

    spatial layer number, 

    1<= iSpatialLayerNum <= MAX_SPATIAL_LAYER_NUM

    MAX_SPATIAL_LAYER_NUM = 4

    unsigned int

    uiIntraPeriod

    period of IDR frame

    int

    iNumRefFrame

    The number of the reference frame

    Unsigned int

    uiFrameToBeCoded

    The number of the frames to be encoded. the user doesn’t know the number or doesn’t care the number,can set 0xFFFFFFFF.

    bool    

    bEnableSpsPpsIdAddition

    false:not adjust ID in SPS/PPS; true: adjust ID in SPS/PPS

    bool    

    bPrefixNalAddingCtrl

    false:not use Prefix NAL; true: use Prefix NAL

    bool

    bEnableSSEI

    false:not use SSEI; true: use SSEI

    int

    iPaddingFlag

    0:disable padding;1:padding

    int

    iEntropyCodingModeFlag

    0:CAVLC  1:CABAC. 

    Currently only supports CAVLC.

    bool

    bEnableRc

    False: don’t use rate control; true: use rate control

    bool

    bEnableFrameSKip

    False: don’t skip frame even if VBV buffer overflow.

    True: allow skipping frames to keep the bitrate within limits

    int

    iMaxBitrate

    the maximum bitrate 

    int

    iMaxQp

    the maximum QP encoder supports 

    int

    iMinQp

    The minmum QP encoder supports

    Unsigned int

    uiMaxNalSize

    The maximum NAL size.  This value should be not 0 for dynamic slice mode

    bool     

    bEnableLongTermReference;

    0: on, 1: off

    int

    iLTRRefNum

    The number of LTR(long term reference)

    int

    iLtrMarkPeriod

    The LTR marked period that is used in feedback. 

    Short 

    iMultipleThreadIdc

    # 0: auto(dynamic imp. internal encoder); 1: multiple threads imp. disabled; > 1: count number of threads;

    Int

    iLoopFilterDisableIdc

    0: on, 1: off, 2: on except for slice boundaries

    Int

    iLoopFilterAlphaC0Offset

    AlphaOffset: valid range [-6, 6], default 0

    Int

    iLoopFilterBetaOffset

    BetaOffset: valid range [-6, 6], default 0

    bool   

    bEnableDenoise;

    denoise control

    bool    

    bEnableBackgroundDetection

    background detection control 

    bool    

    bEnableAdaptiveQuant

    adaptive quantization control

    bool

    bEnableFrameCroppingFlag;

    enable cropping source picture

    int

    bEnableSceneChangeDetect

    Enable scene change detection 

    SSpatialLayerConfig

    Format 

    Parameter Name

    Meaning/Constraint

    int

    iVideoWidth

    width of picture in luminance samples of a layer

    int

    iVideoHeight

    height of picture in luminance samples of a layer

    float

    fFrameRate

    frame rate for a layer

    int

    iSpatialBitrate

    target bitrate for a spatial layer

    int

    iMaxSpatialBitrate

    Maximum  bitrate for a spatial layer

    EProfileIdc

    uiProfileIdc

    value of profile IDC (0 for auto-detection)

    ELevelIdc

    uiLevelIdc

    value of level IDC (0 for auto-detection)

    Int 

    iDLayerQp

    Each layer QP for fixed quant case

    SSliceConfig

    sSliceCfg

    slicing configuration

    sSliceCfg.uiSliceMode

    0: SM_SINGLE_SLICE: SliceNum==1

    1: SM_FIXEDSLCNUM_SLICE: according to SliceNum, Enabled dynamic slicing for multi-thread

    2: SM_RASTER_SLICE: according to SlicesAssign, Need input of MB numbers each slice. In addition, if other constraint in SSliceArgument is presented, need to follow the constraints. Typically if MB num and slice size are both constrained, re-encoding may be involved.

    3: SM_ROWMB_SLICE: according to PictureMBHeight, a row of mbs per slice 

    4: SM_DYN_SLICE: according to SliceSize,  Dynamic slicing (have no idea about slice_nums until encoding current frame)

    sSliceCfg. sSliceArgument uiSliceMbNum

    Used in uiSliceMode=2

    sSliceCfg. sSliceArgument uiSliceNum

    Used in uiSliceMode=1

    sSliceCfg. sSliceArgument uiSliceSizeConstraint

    Used in uiSliceMode=4

    Encoder Return Value: CM_RETURN 

    Return value of parameter Initializtion: Initialize() and set option SetOption()

    Value 

    Parameter Name

    Meaning/Constraint

    0

    cmResultSuccess

    Successful initialized

    1

    cmInitParaError

    Found error in input parameters

    2

    cmMachPerfIsBad

    Not supported yet

    3

    cmUnkonwReason

    Not supported yet

    4

    cmMallocMemeError

    Input source picture is NULL

    cmInitExpected

    Encoder is not created correctly

    Encoder Return Value: EVideoFrameType:

    Return value of encode one frame: EncodeFrame()

    Value 

    Parameter Name

    Meaning/Constraint

    0

    videoFrameTypeInvalid

    Encoder not ready or parameters are invalidate

    1

    videoFrameTypeIDR

    IDR frame in H.264 

    2

    videoFrameTypeI

    I frame type

    3

    videoFrameTypeP

    P frame type

    4

    videoFrameTypeSkip

    Encoder decides to skip the frame, no bit stream will be ouputed

    videoFrameTypeIPMixed

    A frame where I and P slices are mixing, not supported yet

    Decoder Usage:

    Step#1: create and destroy the decoder

    int  WelsCreateDecoder(ISVCDecoder** ppDecoder);

    void WelsDestroyDecoder(ISVCDecoder* pDecoder);

    Step#2: initialize the decoder

    virtual long Initialize(const SDecodingParam* pParam) = 0;   

    virtual long Unintialize() = 0;

    Step#3: invoker the decoding

    /***************************************************************************

        *       Description:

        *    Decompress one frame or slice, and output I420 decoded data.

        *

        *Input parameters:

        *        ParameterTYPE Description

        *        kpSrcconst unsigned char* the h264 stream to be decoded

        *      kiSrcLenconst int                   the length of h264 steam

        *       ppDst            unsigned char**       buffer pointer of decoded data (YUV)

        *      pDstInfo       SBufferInfo*information provided to API including width, height, etc

        *pStrideint*output stride

        *iWidthint&output width

        *iHeightint&output height

        *

        *return: if decode frame success return 0, otherwise corresponding error returned.

    /***************************************************************************/

    //the following API is for slice level decoding

    virtual DECODING_STATE DecodeFrame2(

    const unsigned char* kpSrc, 

    const int kiSrcLen,

    unsigned char** ppDst,

    SBufferInfo* pDstInfo);

    //the following API is for frame level decoding

    Virtual DECODING_STATE DecodeFrame(

    const unsigned char* kpSrc,

    const int kiSrcLen,

    unsigned char** ppDst,

    int* pStride,

    int& iWidth,

    int& iHeight );

    //Note: DecodeFrameEx() is not used.

    //Note: for slice level DecodeFrame2() (4 parameters input), whatever the function return value is, the outputted data of I420 format will only be available when pDstInfo->iBufferStatus == 1,. (e.g., in multi-slice cases, only when the whole picture is completely reconstructed, this variable would be set as 1.)  

    Step#4: control the decoding

    virtual int SetOption(DECODER_OPTION eOptionId, void* pOption) = 0;

    virtual int GetOption(DECODER_OPTION eOptionId, void* pOption) = 0;

    Decoder Option List:

    Option ID

    Input Format

    Meaning/Constraint

    DECODER_OPTION_DATAFORMAT

    int

    color format, now supports 23 only (I420)

    DECODER_OPTION_END_OF_STREAM

    bool

    end of stream flag

    DECODER_OPTION_VCL_NAL

    bool

    feedback whether or not have VCL NAL in current AU for application layer

    DECODER_OPTION_TEMPORAL_ID

    int

    if have VCL NAL in current AU, then feedback the temporal ID

    DECODER_OPTION_FRAME_NUM

    int

    Indicate frame_num

    DECODER_OPTION_IDR_PIC_ID

    int

    Indicate current IDR_ID

    DECODER_OPTION_LTR_MARKING_FLAG

    bool

    read only, indicating if LTR_marking SE flag is used in current AU

    DECODER_OPTION_LTR_MARKED_FRAME_NUM

    int

    Read only, indicating the frame_num of current AU marked as LTR

    DECODER_OPTION_ERROR_CON_IDC

    int

    Indicate error concealment method

    0: disable

    1: frame_copy

    2: slice_copy (default)

    Decoder Parameter List:

    (Note: some parameters in mentioned structure are not explained because they are to be removed)

    SDecodingParam: (Note: some of the members may not be used for now.)

    Format 

    Parameter Name

    Meaning/Constraint

    char*

    pFileNameRestructed

    File name of restructed frame used for PSNR calculation based debug;

    int

    iOutputColorFormat

    color space format to be outputed

    unsigned int

    uiCpuLoad

    CPU load

    unsigned char

    uiTargetDqLayer

    target dq layer number 

    unsigned char

    uiEcActiveFlag

    Whether active error concealment feature in decoder

    SVideoProperty

    sVideoProperty

    Video stream property

    SVideoProperty

    Format 

    Parameter Name

    Meaning/Constraint

    unsigned int

    size

    size of structure

    VIDEO_BITSTREAM_TYPE

    eVideoBsType

    Video stream type (AVC/SVC)

    SBufferInfo: 

    Format 

    Parameter Name

    Meaning/Constraint

    int

    iBufferStatus

    0: data not ready, 1: data ready

    union UsrData

    Output buffer info, see following tables

    union UsrData: 

    Format 

    Parameter Name

    Meaning/Constraint

    SSysMEMBuffer

    sSysMEMBuffer

    output with memory, see following tables

    SSysMEMBuffer

    Format 

    Parameter Name

    Meaning/Constraint

    int

    iWidth

    width of decoded pic

    int

    iHeight

    height of decoded pic

    int

    iFormat

    type is “EVideoFormatType”, see codec_def.h

    int

    iStride[2]

    stride

    Decoder Usage Example:

    A dummy process for using the decoder could be: (for static library)

    1. ISVCDecoder *pSvcDecoder;  //declare a decoder

        unsigned char *pBuf = …; //input: encoded bitstream start position; should include start code prefix

        int iSize = …; //input: encoded bitsteam length; should include the size of start code prefix

        unsigned char *pData[3] = …; //output: [0~2] for Y,U,V buffer

        SBufferInfo sDstBufInfo; //in-out: declare the output buffer info

        memset(&sDstBufInfo, 0, sizeof(SBufferInfo));

    2. CreateDecoder(pSvcDecoder); //create a decoder

    3. SDecodingParam sDecParam = {0}; //declare required param

        sDecParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_AVC;

    4. Initialize(&sDecParam); //initialize the param and decoder context, allocate memory

    5. DecodeFrame2(pBuf, iSize, pData, &sDstBufInfo); //do actual decoding for slice/frame level; this can be done in a loop until data ends

    //if (sDstBufInfo.iBufferStatus==1), pData can be used for render.

    6. Uninitialize(); //Uninitialize the decoder and memory free.

    7. DestroyDecoder(); //Destroy the decoder

    README.md文档

    OpenH264
    ========
    OpenH264 is a codec library which supports H.264 encoding and decoding. It is suitable for use in real time applications such as WebRTC. See http://www.openh264.org/ for more details.


    Encoder Features
    ----------------
    - Constrained Baseline Profile up to Level 5.2 (4096x2304)
    - Arbitrary resolution, support cropping
    - Rate control with adaptive quantization, or constant quantization
    - Slice options: 1 slice per frame, N slices per frame, N macroblocks per slice, or N bytes per slice
    - Multiple threads automatically used for multiple slices
    - Temporal scalability up to 4 layers in a dyadic hierarchy
    - Spatial simulcast up to 4 resolutions from a single input
    - Long Term Reference (LTR) frames
    - Memory Management Control Operation (MMCO)
    - Reference picture list modification
    - Single reference frame for inter prediction
    - Multiple reference frames when using LTR and/or 3-4 temporal layers
    - Periodic and on-demand Instantaneous Decoder Refresh (IDR) frame insertion
    - Dynamic changes to bit rate, frame rate, and resolution
    - Annex B byte stream output
    - YUV 4:2:0 planar input


    Decoder Features
    ----------------
    - Constrained Baseline Profile up to Level 5.2 (4096x2304)
    - Arbitrary resolution, not constrained to multiples of 16x16
    - Single thread for all slices
    - Long Term Reference (LTR) frames
    - Memory Management Control Operation (MMCO)
    - Reference picture list modification
    - Multiple reference frames when specified in Sequence Parameter Set (SPS)
    - Annex B byte stream input
    - YUV 4:2:0 planar output
    - Decoder output timing conformance
    - Error concealment support with slice copy as default method


    OS Support
    ----------
    - Windows 64-bit and 32-bit
    - Mac OS X 64-bit and 32-bit
    - Linux 64-bit and 32-bit
    Android 32-bit
    - iOS 64-bit and 32-bit (not fully tested)


    Processor Support
    -----------------
    - Intel x86 optionally with MMX/SSE (no AVX yet, help is welcome)
    - ARMv7 optionally with NEON
    - Any architecture using C/C++ fallback functions


    Building the Library
    --------------------
    NASM needed to be installed for assembly code: workable version 2.07 or above, nasm can downloaded from http://www.nasm.us/


    To build the arm assembly for Windows Phone, gas-preprocessor is required. It can be downloaded from git://git.libav.org/gas-preprocessor.git


    For Android Builds
    ------------------
    To build for android platform, You need to install android sdk and ndk. You also need to export **ANDROID_SDK**/tools to PATH. On Linux, this can be done by


    'export PATH=**ANDROID_SDK**/tools:$PATH'


    The codec and demo can be built by


    'make OS=android NDKROOT=**ANDROID_NDK** TARGET= **ANDROID_TARGET**'


    Valid **ANDROID_TARGET** can be found in **ANDROID_SDK**/platforms, such as android-12.
    You can also set ARCH, NDKLEVEL, GCCVERSION according to your device and NDK version.
    ARCH specifies the architecture of android device. Currently only arm and x86 are supported, the default is arm.
    NDKLEVEL specifies android api level, the api level can be 12-19, the default is 12.
    GCCVERSION specifies which gcc in NDK is used, the default is 4.8.


    By default these commands build for the armeabi-v7a ABI. To build for the other android
    ABIs, add "ARCH=mips" or "ARCH=x86". To build for the older armeabi ABI (which has
    armv5te as baseline), add "APP_ABI=armeabi" (ARCH=arm is implicit).


    For iOS Builds
    --------------
    You can build the libraries and demo applications using xcode project files
    located in codec/build/iOS/dec and codec/build/iOS/enc.


    You can also build the libraries (but not the demo applications) using the
    make based build system from the command line. Build with


    'make OS=ios ARCH=**ARCH**'


    Valid values for **ARCH** are the normal iOS architecture names such as
    armv7, armv7s, arm64, and i386 and x86_64 for the simulator. Additionally,
    one might need to add 'SDK=X.Y' to the make command line in case the default
    SDK version isn't available. Another settable iOS specific parameter
    is SDK_MIN, specifying the minimum deployment target for the built library.
    For other details on building using make on the command line, see
    'For All Platforms' below.


    For Windows Builds
    ------------------


    Our Windows builds use MinGW which can be found here - http://www.mingw.org/


    To build with gcc, add the MinGW bin directory (e.g. /c/MinGW/bin) to your path and follow the 'For All Platforms' instructions below.


    To build with Visual Studio you will need to set up your path to run cl.exe.  The easiest way is to start MSYS from a developer command line session - http://msdn.microsoft.com/en-us/library/ms229859(v=vs.110).aspx  If you need to do it by hand here is an example from a Windows 64bit install of VS2012:


    export PATH="$PATH:/c/Program Files (x86)/Microsoft Visual Studio 11.0/VC/bin:/c/Program Files (x86)/Microsoft Visual Studio 11.0/Common7/IDE"


    You will also need to set your INCLUDE and LIB paths to point to your VS and SDK installs.  Something like this, again from Win64 with VS2012 (note the use of Windows-style paths here).


    export INCLUDE="C:Program Files (x86)Microsoft Visual Studio 11.0VCinclude;C:Program Files (x86)Windows Kits8.0Includeum;C:Program Files (x86)Windows Kits8.0Includeshared"
    export LIB="C:Program Files (x86)Windows Kits8.0LibWin8umx86;C:Program Files (x86)Microsoft Visual Studio 11.0VClib"


    Then add 'OS=msvc' to the make line of the 'For All Platforms' instructions.


    For All Platforms
    -------------------
    From the main project directory:
    'make' for automatically detecting 32/64bit and building accordingly
    'make ENABLE64BIT=No' for 32bit builds
    'make ENABLE64BIT=Yes' for 64bit builds
    'make V=No' for a silent build (not showing the actual compiler commands)


    The command line programs h264enc and h264dec will appear in the main project directory.


    A shell script to run the command-line apps is in testbin/CmdLineExample.sh


    Usage information can be found in testbin/CmdLineReadMe


    Using the Source
    ----------------
    codec - encoder, decoder, console (test app), build (makefile, vcproj)
    build - scripts for Makefile build system.
    test - GTest unittest files.
    testbin - autobuild scripts, test app config files
    res - yuv and bitstream test files


    Known Issues
    ------------
    See the issue tracker on https://github.com/cisco/openh264/issues
    - Encoder errors when resolution exceeds 3840x2160
    - Encoder errors when compressed frame size exceeds half uncompressed size
    - Encoder does not support QP < 10 encoding
    - Encoder does not support slice number > 35 encoding
    - The result of float-point calculation in rate control will be affected by preciseness of double-typed variable on different platform
    - Decoder errors when compressed frame size exceeds 1MB
    - Encoder RC requires frame skipping to be enabled to hit the target bitrate,
      if frame skipping is disabled the target bitrate may be exceeded


    License
    -------
    BSD, see LICENSE file for details.

     
     
  • 相关阅读:
    linux基础学习6
    Linux基础学习5
    Linux基础学习4
    Linux基础学习3
    Linux基础学习2
    ASP.NET MVC学习——控制器传递数据到view的简单案例
    转载:URL链接中的不同用处
    MVC学习的心路历程
    45道SQL数据题详细超基础解析
    结束基础,开始MVC之旅!
  • 原文地址:https://www.cnblogs.com/x_wukong/p/6290899.html
Copyright © 2011-2022 走看看