I used code from the SinkWriter sample to write a H264 MP4 file. That worked well until I tried to go over 2048x2048, at which point I get a MF_E_INVALIDMEDIATYPE error when calling SetInputMediaType on the sink writer. How do I overcome this problem?
I'm running on Windows 8.1 and developing in VS2013.
Here's the code I use to create the sink writer:
hr = MFCreateSinkWriterFromURL(wfile, NULL, NULL, &m_sinkWriter); // Set the output media type hr = MFCreateMediaType(&mediaTypeOut); hr = mediaTypeOut->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); hr = mediaTypeOut->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264); hr = mediaTypeOut->SetUINT32(MF_MT_MPEG2_PROFILE, eAVEncH264VProfile_High); // Default is Base, High requires Windows 8 hr = mediaTypeOut->SetUINT32(MF_MT_AVG_BITRATE, bitrate); hr = mediaTypeOut->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive); // No interlacing hr = mediaTypeOut->SetUINT32(MF_MT_DEFAULT_STRIDE, width * 4); hr = MFSetAttributeSize(mediaTypeOut, MF_MT_FRAME_SIZE, width, height); hr = MFSetAttributeRatio(mediaTypeOut, MF_MT_FRAME_RATE, c_fps, 1); hr = MFSetAttributeRatio(mediaTypeOut, MF_MT_PIXEL_ASPECT_RATIO, 1, 1); hr = m_sinkWriter->AddStream(mediaTypeOut, &m_videoStream); // Set the input media type hr = MFCreateMediaType(&mediaTypeIn); hr = mediaTypeIn->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video); hr = mediaTypeIn->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_RGB32); hr = mediaTypeIn->SetUINT32(MF_MT_INTERLACE_MODE, MFVideoInterlace_Progressive); // No interlacing hr = mediaTypeIn->SetUINT32(MF_MT_DEFAULT_STRIDE, width * 4); hr = MFSetAttributeSize(mediaTypeIn, MF_MT_FRAME_SIZE, width, height); hr = MFSetAttributeRatio(mediaTypeIn, MF_MT_FRAME_RATE, c_fps, 1); hr = MFSetAttributeRatio(mediaTypeIn, MF_MT_PIXEL_ASPECT_RATIO, 1, 1); hr = m_sinkWriter->SetInputMediaType(m_videoStream, mediaTypeIn, NULL); // Tell the sink writer to start accepting data hr = m_sinkWriter->BeginWriting();