2014-12-23 3 views
0

В моих окнах универсального приложения, я пытаюсь использовать компонент WinRT: http://blogs.msdn.com/b/eternalcoding/archive/2013/03/06/developing-a-winrt-component-to-create-a-video-file-using-media-foundation.aspx (который является в основном C++ обертки для sinkWriter)создание видео из кадров

создать видео с кадрами.

Я положил весь этот код в проект на C++, и я могу вызвать его из моего кода на C# без проблем.

Проблема приходит с конструктором первого:

HRESULT CVideoGenerator::InitializeSinkWriter(Windows::Storage::Streams::IRandomAccessStream^ 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); 

Другое дело исходит от этой линии:

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

Любые идеи?

ответ

0

Я использовал этот образец VideoGenerator и получил ту же проблему. Я не эксперт Фонда медиа, но после некоторых исследовательских работ, я обнаружил, что проблема была в этих строках:

encodingFormat = MFVideoFormat_WMV3; 
inputFormat = MFVideoFormat_RGB32; 

Ну, я заменил первый формат на второй, как это:

encodingFormat = MFVideoFormat_RGB32; 
inputFormat = MFVideoFormat_RGB32; 

И это, кажется, работает до нового исключения в WriteSample методов

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

по-видимому, нарушение прав доступа при записи в Память. Все еще пытаясь понять это!

McSime