Ошибка AVIStreamSetFormat

Я пытаюсь создать приложение для записи на рабочем столе. Когда я записываю полный экран, программа работает как положено, но в некоторых случаях, когда я выбираю конкретную область на рабочем столе для записи, я получаю ошибку по адресу: int result = AVIStreamSetFormat(psCompress, 0, ref bi, (Int32)bi.biSize);

Error in VideoStreamSetFormat: -2147205016.

Я использую кодек Xvid MPEG-4 для создания видео в формате AVI. Я думаю, что проблема может заключаться в том, что кодек Xvid MPEG-4 не поддерживает определенные размеры изображения (ширину и высоту). Я не уверен и застрял в этой проблеме, и я спрашиваю, может ли кто-нибудь помочь мне понять, почему это не работает.

private void SetFormat(IntPtr psCompress)
    {
        BITMAPINFOHEADER bi = new BITMAPINFOHEADER();
        bi.biSize = (uint)Marshal.SizeOf(bi);
        bi.biWidth = (Int32)_width;
        bi.biHeight = (Int32)_height;
        bi.biPlanes = 1;
        bi.biBitCount = 24; 
        bi.biCompression = 0;  // 0 = BI_RGB
        bi.biSizeImage = _stride * _height;

        int result = AVIStreamSetFormat(psCompress, 0, ref bi, (Int32)bi.biSize);
        if (result != 0)
        {
            throw new Exception("Error in VideoStreamSetFormat: " + result.ToString());
        }
    }

person danrt    schedule 09.04.2012    source источник
comment
BitCount не имеет ничего общего с частотой кадров. Попробуйте 24.   -  person Hans Passant    schedule 09.04.2012
comment
Спасибо, что заметили это, но это все еще не решает мою проблему.   -  person danrt    schedule 09.04.2012


Ответы (2)


Я нашел, в чем была проблема. При снятии скриншотов с выбранных областей на рабочем столе я должен был убедиться, что высота и ширина кратны 2. Похоже, кодек Xvid MPEG-4 не принимает любой размер изображения.

person danrt    schedule 31.05.2012

У меня такая же проблема. В моем случае я устанавливал масштаб и скорость на 0. Перед вызовом этой функции убедитесь, что вы правильно указываете скорость avi.

person Anon    schedule 20.09.2012
comment
Это всегда помогает, когда вы показываете небольшой фрагмент кода. Также поможет вам получить больше голосов/принятий. - person AYK; 21.09.2012