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.media.MediaCodec; 14 import android.media.MediaCodec.BufferInfo; 15 import android.media.MediaCrypto; 16 import android.media.MediaFormat; 17 import android.os.Bundle; 18 import android.view.Surface; 19 import java.io.IOException; 20 import java.nio.ByteBuffer; 21 22 /** 23 * Implementation of MediaCodecWrapperFactory that returns MediaCodecInterfaces wrapping 24 * {@link android.media.MediaCodec} objects. 25 */ 26 class MediaCodecWrapperFactoryImpl implements MediaCodecWrapperFactory { 27 private static class MediaCodecWrapperImpl implements MediaCodecWrapper { 28 private final MediaCodec mediaCodec; 29 MediaCodecWrapperImpl(MediaCodec mediaCodec)30 public MediaCodecWrapperImpl(MediaCodec mediaCodec) { 31 this.mediaCodec = mediaCodec; 32 } 33 34 @Override configure(MediaFormat format, Surface surface, MediaCrypto crypto, int flags)35 public void configure(MediaFormat format, Surface surface, MediaCrypto crypto, int flags) { 36 mediaCodec.configure(format, surface, crypto, flags); 37 } 38 39 @Override start()40 public void start() { 41 mediaCodec.start(); 42 } 43 44 @Override flush()45 public void flush() { 46 mediaCodec.flush(); 47 } 48 49 @Override stop()50 public void stop() { 51 mediaCodec.stop(); 52 } 53 54 @Override release()55 public void release() { 56 mediaCodec.release(); 57 } 58 59 @Override dequeueInputBuffer(long timeoutUs)60 public int dequeueInputBuffer(long timeoutUs) { 61 return mediaCodec.dequeueInputBuffer(timeoutUs); 62 } 63 64 @Override queueInputBuffer( int index, int offset, int size, long presentationTimeUs, int flags)65 public void queueInputBuffer( 66 int index, int offset, int size, long presentationTimeUs, int flags) { 67 mediaCodec.queueInputBuffer(index, offset, size, presentationTimeUs, flags); 68 } 69 70 @Override dequeueOutputBuffer(BufferInfo info, long timeoutUs)71 public int dequeueOutputBuffer(BufferInfo info, long timeoutUs) { 72 return mediaCodec.dequeueOutputBuffer(info, timeoutUs); 73 } 74 75 @Override releaseOutputBuffer(int index, boolean render)76 public void releaseOutputBuffer(int index, boolean render) { 77 mediaCodec.releaseOutputBuffer(index, render); 78 } 79 80 @Override getInputFormat()81 public MediaFormat getInputFormat() { 82 return mediaCodec.getInputFormat(); 83 } 84 85 @Override getOutputFormat()86 public MediaFormat getOutputFormat() { 87 return mediaCodec.getOutputFormat(); 88 } 89 90 @Override getInputBuffer(int index)91 public ByteBuffer getInputBuffer(int index) { 92 return mediaCodec.getInputBuffer(index); 93 } 94 95 @Override getOutputBuffer(int index)96 public ByteBuffer getOutputBuffer(int index) { 97 return mediaCodec.getOutputBuffer(index); 98 } 99 100 @Override createInputSurface()101 public Surface createInputSurface() { 102 return mediaCodec.createInputSurface(); 103 } 104 105 @Override setParameters(Bundle params)106 public void setParameters(Bundle params) { 107 mediaCodec.setParameters(params); 108 } 109 } 110 111 @Override createByCodecName(String name)112 public MediaCodecWrapper createByCodecName(String name) throws IOException { 113 return new MediaCodecWrapperImpl(MediaCodec.createByCodecName(name)); 114 } 115 } 116