Ignore:
Timestamp:
Jul 13, 2017, 8:01:48 AM (5 years ago)
Author:
roman
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Utilities/DirectShowReferenceSource/Sample/MfGenerate/Application.cpp

    r637 r769  
    11////////////////////////////////////////////////////////////
    2 // Copyright (C) Roman Ryltsov, 2015-2016
     2// Copyright (C) Roman Ryltsov, 2015-2017
    33// Created by Roman Ryltsov roman@alax.info
    44//
     
    4848                //      __D(pMediaSource, E_NOINTERFACE);
    4949                //}
     50
     51                //const SIZE g_Extent = { 640, 360 };
     52                //const LONG g_nFrameRateNumerator = 30000;
     53                //const LONG g_nFrameRateDenominator = 1001;
     54                //const LONG g_nDuration = 1 * 60; // 1 minutes
     55                //const LONG g_nBitrate = (2 << 10) * 1000; // 2 MBps
     56
     57                //const SIZE g_Extent = { 720, 480 };
     58                //const LONG g_nFrameRateNumerator = 90; //30 * 1000;
     59                //const LONG g_nFrameRateDenominator = 1; //1001;
     60                //const LONG g_nDuration = 60; //5 * 60; // 5 minutes
     61                //const LONG g_nBitrate = (2 << 10) * 1000; // 2 MBps
     62
     63                //const SIZE g_Extent = { 1280, 720 };
     64                //const LONG g_nFrameRateNumerator = 60 * 1000;
     65                //const LONG g_nFrameRateDenominator = 1000;
     66                //const LONG g_nDuration = 5 * 60; // 5 minutes
     67                //const LONG g_nBitrate = (5 << 10) * 1000; // 5 MBps
     68
     69                const SIZE g_Extent = { 1920, 1080 };
     70                const LONG g_nFrameRateNumerator = 25 * 1000; // frames/second
     71                const LONG g_nFrameRateDenominator = 1000;
     72                const LONG g_nDuration = 1 * 60; // minutes
     73                const LONG g_nBitrate = (2 << 10) * 1000; // 2 MBps
     74
     75                //const SIZE g_Extent = { 4096, 2304 };
     76                //const LONG g_nFrameRateNumerator = 50;
     77                //const LONG g_nFrameRateDenominator = 1;
     78                //const LONG g_nDuration = 5 * 60; // 5 minutes
     79                //const LONG g_nBitrate = (2 << 10) * 1000; // 2 MBps
     80
    5081                {
    5182                        using namespace AlaxInfoDirectShowReferenceSource;
    5283                        CComPtr<IVideoMediaSource> pVideoMediaSource;
    5384                        __C(pVideoMediaSource.CoCreateInstance(__uuidof(VideoMediaSource)));
    54                         __C(pVideoMediaSource->SetMediaType(4096, 2304, CComVariant(_PersistHelper::StringFromIdentifier(MEDIASUBTYPE_RGB32))));
     85                        __C(pVideoMediaSource->SetMediaType(g_Extent.cx, g_Extent.cy, CComVariant(_PersistHelper::StringFromIdentifier(MEDIASUBTYPE_RGB32))));
    5586                        //__C(pVideoMediaSource->SetMediaTypeAspectRatio(...));
    56                         __C(pVideoMediaSource->SetMediaTypeRate(50, 1));
    57                         __C(pVideoMediaSource->put_Duration(5.0));
     87                        __C(pVideoMediaSource->SetMediaTypeRate(g_nFrameRateNumerator, g_nFrameRateDenominator));
     88                        __C(pVideoMediaSource->put_Duration((DOUBLE) g_nDuration));
    5889                        pMediaSource = pVideoMediaSource;
    5990                }
     
    74105                pWriterMediaType[MF_MT_MAJOR_TYPE] = MFMediaType_Video;
    75106                pWriterMediaType[MF_MT_SUBTYPE] = MFVideoFormat_H264;
    76                 pWriterMediaType[MF_MT_AVG_BITRATE] = (UINT32) (12 << 10) * 1000; // 12 MBps
     107                pWriterMediaType[MF_MT_AVG_BITRATE] = (UINT32) g_nBitrate;
    77108                pWriterMediaType[MF_MT_FRAME_RATE] = pMediaType.GetUINT64(MF_MT_FRAME_RATE);
    78109                pWriterMediaType[MF_MT_FRAME_SIZE] = pMediaType.GetUINT64(MF_MT_FRAME_SIZE);
    79110                pWriterMediaType[MF_MT_INTERLACE_MODE] = pMediaType.GetUINT32(MF_MT_INTERLACE_MODE);
    80111                pWriterMediaType[MF_MT_PIXEL_ASPECT_RATIO] = pMediaType.GetUINT64(MF_MT_PIXEL_ASPECT_RATIO);
     112
     113        //pWriterMediaType[MF_MT_MPEG2_PROFILE] = (UINT32) eAVEncH264VProfile_High;
     114
     115                pWriterMediaType.Trace();
    81116                DWORD nWriterStreamIndex;
    82117                __C(pSinkWriter->AddStream(pWriterMediaType, &nWriterStreamIndex));
     
    88123                        __C(pSinkWriter->SetInputMediaType(nWriterStreamIndex, pMediaType, pAttributes));
    89124                }
     125
     126        //CRoArrayT<CComPtr<IMFTransform>> TransformArray;
     127        //MF::CSinkWriterHelper::GetTransforms(pSinkWriter, nWriterStreamIndex, TransformArray);
     128        //_A(!TransformArray.IsEmpty());
     129        //MF::CCodecApi pCodecApi(TransformArray[TransformArray.GetCount() - 1]);
     130        //// NOTE: H.264 Video Encoder https://msdn.microsoft.com/en-us/library/windows/desktop/dd797816
     131        //pCodecApi[CODECAPI_AVEncMPVGOPSize] = (UINT32) 16;
     132        //pCodecApi[CODECAPI_AVEncMPVDefaultBPictureCount] = (UINT32) 3;
     133
    90134                __C(pSinkWriter->BeginWriting());
    91135                for(; ; )
Note: See TracChangeset for help on using the changeset viewer.