• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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