Как Android MediaPlayer определяет 3D-дисплей, глядя на SEI FPA?
Я хочу понять принципы работы 3D-дисплея HTC Evo 3D; однако код и учебник HTCDev не помогают в этом. Говорят, что бит SEI FPA в заголовке переопределяет выбор, который задается вручную, например:
public void surfaceChanged(SurfaceHolder surfaceholder, int i, int j, int k) {
holder = surfaceholder;
enableS3D(true, holder.getSurface()); // note SEI FPA flag in content
// overrides this
}
Код воспроизводимого видео:
private void playVideo() {
release();
fileName = "HTCDemo.mp4";
try {
mediaPlayer = new MediaPlayer();
final AssetFileDescriptor afd = getAssets().openFd(fileName);
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(),
afd.getLength());
mediaPlayer.setDisplay(holder);
mediaPlayer.prepare();
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} catch (Exception e) {
Log.e(TAG, Log.getStackTraceString(e));
}
}
На данный момент я не смог отследить, где он смотрит на бит SEI FPA в заголовке. Мне нужна помощь для отображения необходимой части кода. Заранее спасибо.
1 ответ
Вам нужно разобрать бит SEI FPA в самом заголовке? Это выходит за рамки этого API. Как уже отмечалось, кодек анализирует это, чтобы включить (и переопределить) настройку S3D.
В обзоре упоминается, как вы можете использовать сторонние инструменты, такие как x264, чтобы добавить этот бит к существующему контенту.
Я бы порекомендовал посмотреть на код для x264 для помощи в разборе заголовка файла, если это то, что вам нужно сделать во время выполнения.