Я пытаюсь преобразовать видео VP9 с помощью Android Media Code c. Когда я устанавливаю KEY_COLOR_FORMAT для формата, отличного от форматов YUV, я получаю следующую ошибку: «[OMX.qcom.video.decoder.vp9] не поддерживает цветовой формат XXXX.»
Например, формат COLOR_FormatSurface , похоже, не поддерживается. Или я делаю что-то не так. Нужно ли вручную выполнять преобразование YUV в RGB? Если да, то какова цель предоставления Surfacetexture для кода c?
Вот пример кода:
public class VideoDecoder
{
private MediaCodec mVideoCodec = null;
private ByteBuffer[] mInputBuffers;
private ByteBuffer[] mOutputBuffers;
public VideoDecoder(int width, int height)
{
try
{
// Media settings
MediaFormat format = MediaFormat.createVideoFormat(MediaFormat.MIMETYPE_VIDEO_VP9,
width,
height);
format.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatSurface);
// COLOR_FormatYUV420Flexible
// Configure the decoder
mVideoCodec = MediaCodec.createDecoderByType(MediaFormat.MIMETYPE_VIDEO_VP9);
mVideoCodec.configure(format,
null,
null,
0);
// Start the decoder
mVideoCodec.start();
mInputBuffers = mVideoCodec.getInputBuffers();
mOutputBuffers = mVideoCodec.getOutputBuffers();
}
catch(Exception e)
{
Log.e("VideoDecoder", "CreateCodec failed message =" + e.getMessage());
}
}
public void release()
{
mVideoCodec.stop();
mVideoCodec.release();
}
public void decode(byte[] rawBuffer, int frameSize)
{
//todo
}
}
Спасибо!