1 /* 2 * Copyright 2018 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 package org.webrtc; 12 13 import android.annotation.TargetApi; 14 import android.media.MediaCodec; 15 import android.media.MediaCodec.BufferInfo; 16 import android.media.MediaCrypto; 17 import android.media.MediaFormat; 18 import android.os.Bundle; 19 import android.view.Surface; 20 import java.io.IOException; 21 import java.nio.ByteBuffer; 22 23 /** 24 * Implementation of MediaCodecWrapperFactory that returns MediaCodecInterfaces wrapping 25 * {@link android.media.MediaCodec} objects. 26 */ 27 class MediaCodecWrapperFactoryImpl implements MediaCodecWrapperFactory { 28 private static class MediaCodecWrapperImpl implements MediaCodecWrapper { 29 private final MediaCodec mediaCodec; 30 MediaCodecWrapperImpl(MediaCodec mediaCodec)31 public MediaCodecWrapperImpl(MediaCodec mediaCodec) { 32 this.mediaCodec = mediaCodec; 33 } 34 35 @Override configure(MediaFormat format, Surface surface, MediaCrypto crypto, int flags)36 public void configure(MediaFormat format, Surface surface, MediaCrypto crypto, int flags) { 37 mediaCodec.configure(format, surface, crypto, flags); 38 } 39 40 @Override start()41 public void start() { 42 mediaCodec.start(); 43 } 44 45 @Override flush()46 public void flush() { 47 mediaCodec.flush(); 48 } 49 50 @Override stop()51 public void stop() { 52 mediaCodec.stop(); 53 } 54 55 @Override release()56 public void release() { 57 mediaCodec.release(); 58 } 59 60 @Override dequeueInputBuffer(long timeoutUs)61 public int dequeueInputBuffer(long timeoutUs) { 62 return mediaCodec.dequeueInputBuffer(timeoutUs); 63 } 64 65 @Override queueInputBuffer( int index, int offset, int size, long presentationTimeUs, int flags)66 public void queueInputBuffer( 67 int index, int offset, int size, long presentationTimeUs, int flags) { 68 mediaCodec.queueInputBuffer(index, offset, size, presentationTimeUs, flags); 69 } 70 71 @Override dequeueOutputBuffer(BufferInfo info, long timeoutUs)72 public int dequeueOutputBuffer(BufferInfo info, long timeoutUs) { 73 return mediaCodec.dequeueOutputBuffer(info, timeoutUs); 74 } 75 76 @Override releaseOutputBuffer(int index, boolean render)77 public void releaseOutputBuffer(int index, boolean render) { 78 mediaCodec.releaseOutputBuffer(index, render); 79 } 80 81 @Override getOutputFormat()82 public MediaFormat getOutputFormat() { 83 return mediaCodec.getOutputFormat(); 84 } 85 86 @Override getInputBuffers()87 public ByteBuffer[] getInputBuffers() { 88 return mediaCodec.getInputBuffers(); 89 } 90 91 @Override getOutputBuffers()92 public ByteBuffer[] getOutputBuffers() { 93 return mediaCodec.getOutputBuffers(); 94 } 95 96 @Override 97 @TargetApi(18) createInputSurface()98 public Surface createInputSurface() { 99 return mediaCodec.createInputSurface(); 100 } 101 102 @Override 103 @TargetApi(19) setParameters(Bundle params)104 public void setParameters(Bundle params) { 105 mediaCodec.setParameters(params); 106 } 107 } 108 109 @Override createByCodecName(String name)110 public MediaCodecWrapper createByCodecName(String name) throws IOException { 111 return new MediaCodecWrapperImpl(MediaCodec.createByCodecName(name)); 112 } 113 } 114