2010-04-28 3 views
0

Я использую класс grabber для захвата и обработки каждого кадра в видео. Класс можно найти здесь: http://www.codeproject.com/KB/graphics/FrameGrabber.aspxПереполнение стека на Marshal.PtrToStructure чтение файлов wmv

У меня проблемы с запуском. При загрузке файла он пытается маршалировать указатель видеоформата в VideoInfoHeader (я использую DirectShow.Net). Код, который делает это следующим образом:

videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader)); 

Когда я запускаю это сразу вылетает из среды отладки, вероятно, с переполнением стека. Когда я перешагиваю, я вижу, что форматPtr всегда равен 93, хотя я не знаю, что из этого сделать, поскольку я довольно новичок в сортировке.

Я проверил, что видео отлично работает в Windows Media Player.

Это необходимо для определения размеров видео, а также размера заголовка, который необходимо пропустить до того, как кадры могут быть прочитаны.

Я запускаю Windows 7 x64.

Любая помощь по этому поводу была бы высоко оценена, я, должно быть, попробовал пятнадцать различных методов захвата кадров.

+1

«возможно, с переполнением стека»: Возможно ли, что вы опубликуете полный след стека исключения? И как вы считаете, что проблема в переполнении стека? –

+0

93? Это, безусловно, не похоже на действительный указатель памяти. –

+0

Я могу показать трассировку стека только до того, как строка будет запущена, и это будет: vidanal.exe! User.DirectShow.FrameGrabber.FileName.set (string value = "XXX \\ test.wmv") Строка 35 + 0xf байт \t C# \t vidanal.exe! vidanal.Form1.button1_Click (объект отправитель = {Text = "Button1"}, System.EventArgs е = {X = 39 Y = 9 Кнопка = Left}) Строка 167 + 0x2c байт \t C# \t [External Code] \t \t vidanal.exe! vidanal.Program.Main() Строка 18 + 0x28 байт \t C# \t [External Code] –

ответ

2

Возможно, ваша структура mediaType повреждена, вы проверяете, что она содержит перед вызовом? Где он заполнен?

Также я рекомендую запустить приложение под WinDbg. Вы можете найти, что именно происходит там.

Если вы новичок, попробуйте прочитать Tess Ferrandez's Blog. Также есть много информации об отладке с помощью WinDbg, просто выполните поиск.

+0

Спасибо, я попробую. –