• 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.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