2013-03-04 20 views
5

Mediacodec API'leriyle kodlamayı test etmek için Nexus kullanmaya çalışıyorum. Enkoder tarafından sağlanan inputBuffer'ların 119040 olduğunu görebiliyorum (inputBuffers.capacity giriş yaparak). Ancak çerçevenin boyutu, yani giriş, 460800'dür. inputBuffer.put numaralı telefondan buffer overflow ile hata mesajı aldım. Bu yüzden giriş arabelleğini 460800 olarak ayarlamak üzereydim. Bulabildiğim API BufferInfo.set. Ancak, bu ayarı kodlayıcıya eklemenin bir yolunu bulamıyorum. Birisi yardım edebilir mi? Teşekkürler!!!MediaCodec tarafından oluşturulmuş kodlayıcı arabellek boyutu nasıl ayarlanır

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);} 

cevap

2

Giriş arabelleğinin boyutunu ayarlamazsınız. Boyut, MediaFormat, özellikle genişlik, yükseklik ve renk formatı tarafından belirlenir. Giriş verileriniz farklı bir boyuta sahipse, kodekin beklediği biçime dönüştürmeniz gerekir.

Bu tamamen önemsiz değil, yapılabilir. Örnekler için, CTS EncodeDecodeTest'daki arabellekten arabellek testlerine bakın. Sınama, hangi renk biçiminin desteklendiğini görmek için codec'i sorgular, bu biçimde kareler oluşturur, bunları kodlayıcıya gönderir, sonra videoyu deşifre eder ve çıktının içeriğindekiyle aynı olduğunu doğrular.

Test genellikle API 18 (Android 4.3) gerektirir, ancak arabellekten arabelleğe kod API 16'da çalışacaktır. Herhangi bir aygıtta çalışıp çalışmadığı farklı bir sorudur - CTS sınaması API 18'e kadar var olmadığı için 4.3 öncesi cihazlar için bunu yanlış yapmak mümkün.

3

Ben partiye geç kaldım ama dayalı: Bana uyar

int width=800; 
int height=480; 
encoder = MediaCodec.createByCodecName(codecInfo.getName()); 
format = MediaFormat.createVideoFormat ("video/avc", width, height); 
format.setInteger(MediaFormat.KEY_MAX_INPUT_SIZE,655360); // 0.5MB but adjust it as you need. 
+0

: Ben tampon değiştirmek için doğru yolu MAX_INPUT_SIZE gibi bir şey ayarlamak olacağını düşünüyorum Android MediaCodec Documentation! –