Quantcast
Channel: Media Foundation Development for Windows Desktop forum
Viewing all articles
Browse latest Browse all 1079

Writing H264 videos larger than 2048x2048?

$
0
0

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();


Viewing all articles
Browse latest Browse all 1079

Trending Articles