creating a video from frames

0

In my windows universal app, I'm trying to use a WinRT component: http://blogs.msdn.com/b/eternalcoding/archive/2013/03/06/developing-a-winrt-component-to-create-a-video-file-using-media-foundation.aspx (which is basically a C++ wrapper for sinkWriter)

to create a video with frames.

I put all this code in a C++ project and I can call it from my C# code without problem.

The problem come with the constructor first:

HRESULT CVideoGenerator::InitializeSinkWriter(Windows::Storage::Streams::IRandomAccessStream^ stream)

I'm not sure of how to create the stream:

    var filename = "exportedVideo.wmv";
    var folder = Windows.Storage.KnownFolders.VideosLibrary;
    StorageFile storageFile = await folder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
    IRandomAccessStream stream = await storageFile.OpenAsync(FileAccessMode.ReadWrite);

    StorageFile file = await StorageFile.GetFileFromPathAsync(App.PhotoModel.Path);
    CVideoGenerator videoGenerator = new CVideoGenerator(1280, 720, stream, 20);

The other thing is coming from this line:

hr = sinkWriter->SetInputMediaType(streamIndex, mediaTypeIn, NULL);   
//hr    0xc00d5212 : No suitable transform was found to encode or decode the content.   HRESULT

Any ideas ?

c#
c++
win-universal-app

1 Answer

0

I've used this VideoGenerator sample, and got the same problem. I'm not an expert of Media Foundation, but after some researchs, I've found that the problem was at these lines :

encodingFormat = MFVideoFormat_WMV3;
inputFormat = MFVideoFormat_RGB32;

Well, I've replaced the first format by the second one, like this :

encodingFormat = MFVideoFormat_RGB32;
inputFormat = MFVideoFormat_RGB32;

And it seems to work till the new exception in the WriteSample methods

hr = MFCopyImage(
        pData,                      // Destination buffer.
        cbWidth,                    // Destination stride.
        (BYTE*)videoFrameBuffer,    // First row in source image.
        cbWidth,                    // Source stride.
        cbWidth,                    // Image width in bytes.
        videoHeight                // Image height in pixels.
        );

Apparently an Access Violation while writing in the memory. Still trying to figure it out !

McSime

answered on Stack Overflow Jan 14, 2015 by McSIME

User contributions licensed under CC BY-SA 3.0