В настоящее время мы используем Silverlight VideoSink для захвата видео с локальных веб-камер пользователей, примерно так:
protected override void OnSample(long sampleTime, long frameDuration, byte[] sampleData)
{
if (FrameShouldBeSubmitted())
{
byte[] resampledData = ResizeFrame(sampleData);
mediaController.SetVideoFrame(resampledData);
}
}
Теперь на большинстве машин, которые мы тестировали, образец видео, предоставленный в параметре byte [] sampleData, перевернут, т. Е. Если вы попытаетесь взять данные RGBA и превратить их, скажем, в WriteableBitmap, растровое изображение будет в обратном порядке. Это странно, но, конечно, довольно легко исправить - вам просто нужно повернуть массив во время его кодирования.
Проблема в том, что, по крайней мере, на некоторых машинах (например, на одном Macintosh в нашей тестовой среде) предоставленный образец видео больше не переворачивается, а направлен вверх, и, следовательно, переворачивание изображения фактически приводит к изображение, полученное в обратном порядке на дальней стороне.
Я сообщил об этом MS как об ошибке, но их (краткий) ответ состоял в том, что это было «как задумано». Дальнейшие попытки разъяснения до сих пор игнорировались.
Теперь, я позволю себе, интересно представить себе обсуждение этого решения: «Хорошо, просто для того, чтобы сделать его интересным, давайте воспроизведем видео прямо вверх на Mac, но давайте перевернем его с ног на голову для Windows! " "Отличная идея!" «Да, это заставит разработчиков задуматься!» Но кроме этого, я не могу найти нигде задокументированную эту «особенность», а также не могу найти документацию о том, как можно предположить, что данный образец видео перевернут или направлен вверх. Есть мысли о том, как это сказать?
РЕДАКТИРОВАТЬ 29.03.10 16:50 - я получил ответ от MS, в котором говорилось, что соответствующий способ узнать - через свойство Stride объекта VideoFormat, т. Е. Если значение шага отрицательное, изображение будет быть с ног на голову. Однако мое собственное тестирование показывает, что если я не делаю что-то не так, это не так. По крайней мере, на моей собственной машине, независимо от того, является ли значение шага нулевым или отрицательным (единственные параметры, которые я вижу), выборочное изображение все еще перевернуто.