Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 376e2852 authored by Arun Johnson's avatar Arun Johnson
Browse files

MultiAccessunit benchmarks transfer multiple access unit infos

Multiple access units can be send with this change

Bug: 361349204
Flag: EXEMPT does not affect framework behaviour

Change-Id: I2d644c0d9730006a55efb05c67b02ba49bcb3fca
parent b1f5a7f1
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.media.benchmark.library;
import android.media.MediaCodec;

import java.util.ArrayDeque;
import java.nio.ByteBuffer;
/**
 * interfaces that can be used to implement
@@ -26,10 +28,11 @@ public class IBufferXfer {
      public ByteBuffer buf;
      public int idx;
      public Object obj;
      int flag;
      int bytesRead;
      boolean isComplete = true;
      long presentationTimeUs;
      public ArrayDeque<MediaCodec.BufferInfo> infos;
      public int flag;
      public int bytesRead;
      public boolean isComplete = true;
      public long presentationTimeUs;
  }

  public interface IReceiveBuffer {
+1 −1
Original line number Diff line number Diff line
@@ -96,10 +96,10 @@ public class IBufferXferImpl implements IBufferXfer.ISendBuffer {
                      pBuf.info.buf.remaining() +" C:" + cBuf.info.buf.remaining());
              }
          }
          cBuf.info.infos = pBuf.info.infos;
          cBuf.info.bytesRead = bytesRead;
          cBuf.info.presentationTimeUs = pBuf.info.presentationTimeUs;
          cBuf.info.flag = pBuf.info.flag;

          if (pBuf.rIface != null) {
              pBuf.rIface.receiveBuffer(pBuf.info);
          }
+13 −27
Original line number Diff line number Diff line
@@ -199,41 +199,27 @@ public class MultiAccessUnitDecoder extends Decoder {
                Log.d(TAG, "Error Dumping File: Exception " + e.toString());
            }
        }
        Iterator<BufferInfo> iter = infos.iterator();
        while (iter.hasNext()) {
            BufferInfo bufferInfo = iter.next();
            mNumOutputFrame++;
            if (DEBUG) {
                Log.d(TAG,
                        "In OutputBuffersAvailable ,"
                                + " OutputBuffer ID " + outputBufferId
                                + " output frame number = " + mNumOutputFrame
                                + " timestamp = " + bufferInfo.presentationTimeUs
                                + " size = " + bufferInfo.size);
            }
            if (mIBufferSend != null && mFrameReleaseQueue == null) {
        mNumOutputFrame += infos.size();
        MediaCodec.BufferInfo last = infos.peekLast();
        if (last != null) {
            mSawOutputEOS |= ((last.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0);
        }
        if (mIBufferSend != null) {
            IBufferXfer.BufferXferInfo info = new IBufferXfer.BufferXferInfo();
            info.buf = mc.getOutputBuffer(outputBufferId);
            info.idx = outputBufferId;
            info.obj = mc;
                info.bytesRead = bufferInfo.size;
                info.presentationTimeUs = bufferInfo.presentationTimeUs;
                info.flag = bufferInfo.flags;
                info.isComplete = iter.hasNext() ? false : true;
            info.infos = infos;
            mIBufferSend.sendBuffer(this, info);
            }
            mSawOutputEOS |= (bufferInfo.flags & MediaCodec.BUFFER_FLAG_END_OF_STREAM) != 0;
        }
        if (mFrameReleaseQueue != null) {
        } else if (mFrameReleaseQueue != null) {
            ByteBuffer outputBuffer = mc.getOutputBuffer(outputBufferId);
            mFrameReleaseQueue.pushFrame(
                    outputBufferId, outputBuffer.remaining());
        } else if (mIBufferSend == null) {
        } else {
            mc.releaseOutputBuffer(outputBufferId, mRender);
        }
        if (mSawOutputEOS) {
            Log.i(TAG, "Large frame - saw output EOS");
        }
        // we don't support frame release queue for large audio frame
    }
}