Какая польза от вызова SurfaceHolder.setFixedSize()?

У меня есть подобный код для многих примеров, плавающих в сети:

mSurfaceHolder = mVideoSurface.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);
mSurfaceHolder.setFixedSize(20, 10);

Тогда в обратных вызовах у меня есть:

@Override public void surfaceCreated(SurfaceHolder holder)
{
    Log.d(TAG, "SurfaceCreated");
    mSurfaceHolder.setFixedSize(20, 10);
}

@Override public void surfaceChanged(
    SurfaceHolder holder, int format, int width, int height
)
{
    Log.d(TAG, "SurfaceChanged to " +
        format + " width " + width + " height " + height);
}

Исходя из этого кода, я ожидаю, что поверхность видео будет установлена ​​на крошечный размер 20x10 пикселей, а затем уменьшена до любого размера макета, который я использую, показывая пиксельную / размытую версию. Однако воспроизводимое видео выглядит правильно в полном родном разрешении, оно не уменьшается до 20х10. Но я получаю журналы, подобные этим:

SurfaceChanged to -2 width 20 height 10

Так что, если поверхность видео установлена ​​на этот крошечный размер, но графически видео все еще выглядит в высоком разрешении, какая польза от установки размера поверхности?

Полный исходный код доступен по адресу https://github.com/gradha/Stackru38118219.

1 ответ

Решение

Размер имеет значение для таких вещей, как OpenGL ES, где вы рисуете на поверхности в любом размере. Когда вы отправляете буферы данных с камеры или видеодекодера, буферы достигают того размера, который они дали камере или видео. Он масштабируется в соответствии с размером представления SurfaceView, но не масштабируется в соответствии с размером SurfaceView.

Единственное место, где эти две концепции пересекаются, - это API предварительного просмотра Camera2, который, по-видимому, изменит размер своего захвата, чтобы в некоторых случаях соответствовать поверхности.

Вы можете прочитать больше о первичном сценарии использования в этом сообщении в блоге (демо здесь) и больше о графической архитектуре в целом в этом документе.

Другие вопросы по тегам