FFmpeg
mediacodec_wrapper.h
Go to the documentation of this file.
1 /*
2  * Android MediaCodec Wrapper
3  *
4  * Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 #ifndef AVCODEC_MEDIACODEC_WRAPPER_H
24 #define AVCODEC_MEDIACODEC_WRAPPER_H
25 
26 #include <stdint.h>
27 #include <sys/types.h>
28 
29 #include "avcodec.h"
30 
31 /**
32  * The following API around MediaCodec and MediaFormat is based on the
33  * NDK one provided by Google since Android 5.0.
34  *
35  * Differences from the NDK API:
36  *
37  * Buffers returned by ff_AMediaFormat_toString and ff_AMediaFormat_getString
38  * are newly allocated buffer and must be freed by the user after use.
39  *
40  * The MediaCrypto API is not implemented.
41  *
42  * ff_AMediaCodec_infoTryAgainLater, ff_AMediaCodec_infoOutputBuffersChanged,
43  * ff_AMediaCodec_infoOutputFormatChanged, ff_AMediaCodec_cleanOutputBuffers
44  * ff_AMediaCodec_getName and ff_AMediaCodec_getBufferFlagEndOfStream are not
45  * part of the original NDK API and are convenience functions to hide JNI
46  * implementation.
47  *
48  * The API around MediaCodecList is not part of the NDK (and is lacking as
49  * we still need to retrieve the codec name to work around faulty decoders
50  * and encoders).
51  *
52  * For documentation, please refers to NdkMediaCodec.h NdkMediaFormat.h and
53  * http://developer.android.com/reference/android/media/MediaCodec.html.
54  *
55  */
56 
58 
59 char *ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int encoder, void *log_ctx);
60 
61 struct FFAMediaFormat;
62 typedef struct FFAMediaFormat FFAMediaFormat;
63 
66 
68 
70 int ff_AMediaFormat_getInt64(FFAMediaFormat* format, const char *name, int64_t *out);
71 int ff_AMediaFormat_getFloat(FFAMediaFormat* format, const char *name, float *out);
72 int ff_AMediaFormat_getBuffer(FFAMediaFormat* format, const char *name, void** data, size_t *size);
73 int ff_AMediaFormat_getString(FFAMediaFormat* format, const char *name, const char **out);
74 
76 void ff_AMediaFormat_setInt64(FFAMediaFormat* format, const char* name, int64_t value);
77 void ff_AMediaFormat_setFloat(FFAMediaFormat* format, const char* name, float value);
78 void ff_AMediaFormat_setString(FFAMediaFormat* format, const char* name, const char* value);
79 void ff_AMediaFormat_setBuffer(FFAMediaFormat* format, const char* name, void* data, size_t size);
80 
81 struct FFAMediaCodec;
82 typedef struct FFAMediaCodec FFAMediaCodec;
84 
89  uint32_t flags;
90 };
92 
94 
98 
99 int ff_AMediaCodec_configure(FFAMediaCodec* codec, const FFAMediaFormat* format, void* surface, void *crypto, uint32_t flags);
104 
105 uint8_t* ff_AMediaCodec_getInputBuffer(FFAMediaCodec* codec, size_t idx, size_t *out_size);
106 uint8_t* ff_AMediaCodec_getOutputBuffer(FFAMediaCodec* codec, size_t idx, size_t *out_size);
107 
108 ssize_t ff_AMediaCodec_dequeueInputBuffer(FFAMediaCodec* codec, int64_t timeoutUs);
109 int ff_AMediaCodec_queueInputBuffer(FFAMediaCodec* codec, size_t idx, off_t offset, size_t size, uint64_t time, uint32_t flags);
110 
113 
114 int ff_AMediaCodec_releaseOutputBuffer(FFAMediaCodec* codec, size_t idx, int render);
115 int ff_AMediaCodec_releaseOutputBufferAtTime(FFAMediaCodec *codec, size_t idx, int64_t timestampNs);
116 
117 int ff_AMediaCodec_infoTryAgainLater(FFAMediaCodec *codec, ssize_t idx);
119 int ff_AMediaCodec_infoOutputFormatChanged(FFAMediaCodec *codec, ssize_t indx);
120 
124 
126 
128 
129 int ff_Build_SDK_INT(AVCodecContext *avctx);
130 
131 #endif /* AVCODEC_MEDIACODEC_WRAPPER_H */
ssize_t ff_AMediaCodec_dequeueOutputBuffer(FFAMediaCodec *codec, FFAMediaCodecBufferInfo *info, int64_t timeoutUs)
int ff_AMediaFormat_getString(FFAMediaFormat *format, const char *name, const char **out)
ptrdiff_t const GLvoid * data
Definition: opengl_enc.c:100
void ff_AMediaFormat_setBuffer(FFAMediaFormat *format, const char *name, void *data, size_t size)
FFAMediaFormat * ff_AMediaFormat_new(void)
int ff_AMediaFormat_getInt32(FFAMediaFormat *format, const char *name, int32_t *out)
char * ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int encoder, void *log_ctx)
int ff_AMediaCodec_start(FFAMediaCodec *codec)
struct FFAMediaCodecCryptoInfo FFAMediaCodecCryptoInfo
int out_size
Definition: movenc.c:55
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
int ff_AMediaCodec_flush(FFAMediaCodec *codec)
int ff_AMediaCodec_releaseOutputBuffer(FFAMediaCodec *codec, size_t idx, int render)
uint8_t
int ff_AMediaCodec_infoTryAgainLater(FFAMediaCodec *codec, ssize_t idx)
int ff_AMediaFormat_delete(FFAMediaFormat *format)
GLsizei GLboolean const GLfloat * value
Definition: opengl_enc.c:108
FFAMediaCodec * ff_AMediaCodec_createDecoderByType(const char *mime_type)
ssize_t ff_AMediaCodec_dequeueInputBuffer(FFAMediaCodec *codec, int64_t timeoutUs)
int ff_AMediaCodec_cleanOutputBuffers(FFAMediaCodec *codec)
ptrdiff_t size
Definition: opengl_enc.c:100
int ff_AMediaCodec_getBufferFlagEndOfStream(FFAMediaCodec *codec)
int ff_AMediaFormat_getInt64(FFAMediaFormat *format, const char *name, int64_t *out)
char * ff_AMediaCodec_getName(FFAMediaCodec *codec)
char * ff_AMediaFormat_toString(FFAMediaFormat *format)
int ff_AMediaCodec_getBufferFlagKeyFrame(FFAMediaCodec *codec)
int ff_AMediaCodec_releaseOutputBufferAtTime(FFAMediaCodec *codec, size_t idx, int64_t timestampNs)
int ff_AMediaCodec_delete(FFAMediaCodec *codec)
MIPS optimizations info
Definition: mips.txt:2
int ff_AMediaFormat_getFloat(FFAMediaFormat *format, const char *name, float *out)
int ff_AMediaFormat_getBuffer(FFAMediaFormat *format, const char *name, void **data, size_t *size)
int32_t
int ff_AMediaCodec_getBufferFlagCodecConfig(FFAMediaCodec *codec)
FFAMediaCodec * ff_AMediaCodec_createCodecByName(const char *name)
Libavcodec external API header.
int ff_AMediaCodec_queueInputBuffer(FFAMediaCodec *codec, size_t idx, off_t offset, size_t size, uint64_t time, uint32_t flags)
uint8_t * ff_AMediaCodec_getOutputBuffer(FFAMediaCodec *codec, size_t idx, size_t *out_size)
void ff_AMediaFormat_setInt32(FFAMediaFormat *format, const char *name, int32_t value)
main external API structure.
Definition: avcodec.h:1566
void ff_AMediaFormat_setInt64(FFAMediaFormat *format, const char *name, int64_t value)
void ff_AMediaFormat_setFloat(FFAMediaFormat *format, const char *name, float value)
void ff_AMediaFormat_setString(FFAMediaFormat *format, const char *name, const char *value)
int ff_AMediaCodec_infoOutputFormatChanged(FFAMediaCodec *codec, ssize_t indx)
mfxU16 profile
Definition: qsvenc.c:44
int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx)
The following API around MediaCodec and MediaFormat is based on the NDK one provided by Google since ...
int ff_AMediaCodec_getConfigureFlagEncode(FFAMediaCodec *codec)
FFAMediaFormat * ff_AMediaCodec_getOutputFormat(FFAMediaCodec *codec)
int ff_AMediaCodec_stop(FFAMediaCodec *codec)
uint8_t * ff_AMediaCodec_getInputBuffer(FFAMediaCodec *codec, size_t idx, size_t *out_size)
FILE * out
Definition: movenc.c:54
int ff_AMediaCodec_configure(FFAMediaCodec *codec, const FFAMediaFormat *format, void *surface, void *crypto, uint32_t flags)
int ff_AMediaCodec_infoOutputBuffersChanged(FFAMediaCodec *codec, ssize_t idx)
FFAMediaCodec * ff_AMediaCodec_createEncoderByType(const char *mime_type)
int ff_Build_SDK_INT(AVCodecContext *avctx)
const char * name
Definition: opengl_enc.c:102