windows phone 8.1 विंडोज फोन 8.1 मीडिया फाउंडेशन एच 264 अधिकतम रिज़ॉल्यूशन



windows-phone-8.1 h.264 (1)

प्रत्येक संकल्प के लिए डिफ़ॉल्ट बिटरेट्स के लिए खोज करके समाधान मिला,

1080p 5.0 एमबीपीएस के बिटरेट के साथ काम करता है,

1600x900 बिल्टेट 2.5 एमबीपीएस के साथ काम करता है,

1.25 एमबीपीएस के बिटरेट के साथ 720 पी काम करता है ...

मैं मीडिया फाउंडेशन पुस्तकालय और सिंक लेखक की सहायता से विंडोज फोन 8.1 में एक वीडियो को सांकेतिक शब्दों में बदलना चाहता हूं।

मैं MF_MT_SUBTYPE को अपने मीडिया आउटपुट के लिए MFVideoFormat_H264 रूप में सेट करके और 720p और 480p जैसे प्रस्तावों का उपयोग करके इसे प्राप्त करने में सक्षम हूं ..

लेकिन जब मैं रिज़ॉल्यूशन को 1920x1080 (या 1920x1088) में बदलता हूं, तो मुझे Incorrect Parameter त्रुटि मिलती है। इसलिए मुझे लगता है कि एच .264 कोडेक का अधिकतम संकल्प 1280x720 है।

मैंने एचडीईसी या एमपीईजी 2 को कोडेक बदलने की कोशिश की, लेकिन ... लेकिन कोई भाग्य नहीं।

यह सीपीपी कोड है जहां मैं आउटपुट प्रकार सेटअप करता हूं और इसे स्ट्रीम में जोड़ें:

// Setup the output video type   

ComPtr<IMFMediaType> spvideoTypeOut;
CHK(MFCreateMediaType(&spvideoTypeOut));
CHK(spvideoTypeOut->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));

GUID _vformat =  MFVideoFormat_H264;

CHK(spvideoTypeOut->SetGUID(MF_MT_SUBTYPE, _vformat));
CHK(spvideoTypeOut->SetUINT32(MF_MT_AVG_BITRATE, _bitrate));
CHK(spvideoTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive));
CHK(MFSetAttributeSize(spvideoTypeOut.Get(), MF_MT_FRAME_SIZE, _width, _height));
CHK(MFSetAttributeRatio(spvideoTypeOut.Get(), MF_MT_FRAME_RATE, framerate, 1));
CHK(MFSetAttributeRatio(spvideoTypeOut.Get(), MF_MT_PIXEL_ASPECT_RATIO, ASPECT_NUM, ASPECT_DENOM));

CHK(_spSinkWriter->AddStream(spvideoTypeOut.Get(), &_streamIndex));

और यह वह जगह है जहां मैं इनपुट प्रकार सेटअप करता हूं:

// Setup the input video type   

    ComPtr<IMFMediaType> spvideoTypeIn;
    CHK(MFCreateMediaType(&spvideoTypeIn));
    CHK(spvideoTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));
    CHK(spvideoTypeIn->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32));
    CHK(spvideoTypeIn->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive));
    CHK(MFSetAttributeSize(spvideoTypeIn.Get(), MF_MT_FRAME_SIZE, _width, _height));
    CHK(MFSetAttributeRatio(spvideoTypeIn.Get(), MF_MT_FRAME_RATE, framerate, 1));
    CHK(MFSetAttributeRatio(spvideoTypeIn.Get(), MF_MT_PIXEL_ASPECT_RATIO, ASPECT_NUM, ASPECT_DENOM));

    CHK(_spSinkWriter->SetInputMediaType(_streamIndex, spvideoTypeIn.Get(), nullptr));

    CHK(_spSinkWriter->BeginWriting());

लेखक सिंक करने के लिए नमूने जोड़ने के लिए मैं इस फ़ंक्शन का उपयोग कर रहा हूं, और यह वह जगह है जहां अपवाद होता है:

void PictureWriter::AddFrame(const Platform::Array<uint8>^ videoFrameBuffer, int imageWidth, int imageHeight)
{
    // Create a media sample   
    ComPtr<IMFSample> spSample;
    CHK(MFCreateSample(&spSample));
    CHK(spSample->SetSampleDuration(_duration));
    CHK(spSample->SetSampleTime(_hnsSampleTime));

    _hnsSampleTime += _duration;

    // Add a media buffer
    ComPtr<IMFMediaBuffer> spBuffer;
    CHK(MFCreateMemoryBuffer(_bufferLength, &spBuffer));
    CHK(spBuffer->SetCurrentLength(_bufferLength));
    CHK(spSample->AddBuffer(spBuffer.Get()));

    // Copy the picture into the buffer
    unsigned char *pbBuffer = nullptr;
    CHK(spBuffer->Lock(&pbBuffer, nullptr, nullptr));
    BYTE* buffer = (BYTE*)videoFrameBuffer->begin() + 4 * imageWidth * (imageHeight - 1);
    CHK(MFCopyImage(pbBuffer + 4 * _width * (_height - imageHeight),
        4 * _width, buffer, -4 * imageWidth, 4 * imageWidth, imageHeight));

CHK(spBuffer->Unlock());

    // Write the media sample   
    CHK(_spSinkWriter->WriteSample(_streamIndex, spSample.Get()));
}

आपको लगता है मुझे अपवाद क्यों मिलता है और मैं इसे कैसे ठीक कर सकता हूं?

धन्यवाद।