我正在尝试在android上使用硬件编码器进行AVC编码
OMX.qcom.video.encoder.avc
我的格式设置看起来像
AMediaFormat_setString(avc_format, AMEDIAFORMAT_KEY_MIME, "video/avc");
AMediaFormat_setInt32(avc_format, AMEDIAFORMAT_KEY_WIDTH, 1920);
AMediaFormat_setInt32(avc_format, AMEDIAFORMAT_KEY_HEIGHT, 1080);
AMediaFormat_setInt32(avc_format, AMEDIAFORMAT_KEY_BIT_RATE, 1000000);
AMediaFormat_setInt32(avc_format, AMEDIAFORMAT_KEY_I_FRAME_INTERVAL, 5);
AMediaFormat_setFloat(avc_format, AMEDIAFORMAT_KEY_FRAME_RATE, 15.0);
AMediaFormat_setInt32(avc_format, AMEDIAFORMAT_KEY_COLOR_FORMAT, 21);
当我尝试将输出缓冲区出队时
if (status >= 0) {
bufsize = 0;
uint8_t* buf = AMediaCodec_getOutputBuffer(avc_encoder_, status, &bufsize);
}
缓冲区大小始终为 1MB。我尝试更改比特率和帧速率,但没有看到任何差异。 知道为什么会发生这种情况吗?
我尝试更改比特率和帧速率,但没有看到任何差异。知道为什么会发生这种情况吗?
事实证明,API AMediaCodec_dequeueOutputBuffer() 的 info 参数中提供了正确的缓冲区大小。