我正在尝试使用Nexus来测试Mediacodec API的编码。我可以看到编码器提供的inputBuffers是119040(通过记录inputBuffers.capacity)。但框架的大小,即输入,是460800.我在inputBuffer.put
buffer overflow
收到错误消息。所以我打算将输入缓冲区设置为460800.我能找到的API是BufferInfo.set
。但是,我找不到将此设置附加到编码器的方法。有人可以帮忙吗?谢谢!!!
encoder = MediaCodec.createByCodecName(codecInfo.getName());
ByteBuffer[] inputBuffers = encoder.getInputBuffers();
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(input);
encoder.queueInputBuffer(inputBufferIndex, 0, input.length, 0, 0);}
答案 0 :(得分:4)
我迟到了,但基于:http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table我认为更改缓冲区的正确方法是调整MAX_INPUT_SIZE,如:
with alpha as (
select 1 as id
from dual
),
beta as (
select 1 as alpha_id,
1 as beta_no
from dual
union all
select 1 as alpha_id,
2 as beta_no
from dual
)
select a.id,
b.beta_no,
level as the_level
from alpha a
inner join beta b
on b.alpha_id = a.id
connect by level <= 4
order by a.id,
b.beta_no,
level
;
答案 1 :(得分:2)
您没有设置输入缓冲区的大小。大小由MediaFormat
确定,特别是宽度,高度和颜色格式。如果输入数据的大小不同,则需要将其转换为编解码器所期望的格式。
这并非完全无足轻重,但可行。例如,请参阅CTS EncodeDecodeTest中的缓冲区到缓冲区测试。测试查询编解码器以查看支持的颜色格式,以该格式生成帧,将它们提交给编码器,然后对视频进行解码并确认出现的内容与进入的内容相同。
测试通常需要API 18(Android 4.3),但缓冲区到缓冲区代码将在API 16中运行。它是否适用于任何给定的设备是一个不同的问题 - 因为CTS测试没有直到API 18存在,4.3之前的设备可能会做错了。