FFmpeg
4.0
libavcodec
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
/**
30
* The following API around MediaCodec and MediaFormat is based on the
31
* NDK one provided by Google since Android 5.0.
32
*
33
* Differences from the NDK API:
34
*
35
* Buffers returned by ff_AMediaFormat_toString and ff_AMediaFormat_getString
36
* are newly allocated buffer and must be freed by the user after use.
37
*
38
* The MediaCrypto API is not implemented.
39
*
40
* ff_AMediaCodec_infoTryAgainLater, ff_AMediaCodec_infoOutputBuffersChanged,
41
* ff_AMediaCodec_infoOutputFormatChanged, ff_AMediaCodec_cleanOutputBuffers
42
* ff_AMediaCodec_getName and ff_AMediaCodec_getBufferFlagEndOfStream are not
43
* part of the original NDK API and are convenience functions to hide JNI
44
* implementation.
45
*
46
* The API around MediaCodecList is not part of the NDK (and is lacking as
47
* we still need to retrieve the codec name to work around faulty decoders
48
* and encoders).
49
*
50
* For documentation, please refers to NdkMediaCodec.h NdkMediaFormat.h and
51
* http://developer.android.com/reference/android/media/MediaCodec.html.
52
*
53
*/
54
55
int
ff_AMediaCodecProfile_getProfileFromAVCodecContext
(
AVCodecContext
*avctx);
56
57
char
*
ff_AMediaCodecList_getCodecNameByType
(
const
char
*mime,
int
profile
,
int
encoder,
void
*log_ctx);
58
59
struct
FFAMediaFormat
;
60
typedef
struct
FFAMediaFormat
FFAMediaFormat
;
61
62
FFAMediaFormat
*
ff_AMediaFormat_new
(
void
);
63
int
ff_AMediaFormat_delete
(
FFAMediaFormat
*
format
);
64
65
char
*
ff_AMediaFormat_toString
(
FFAMediaFormat
*
format
);
66
67
int
ff_AMediaFormat_getInt32
(
FFAMediaFormat
*
format
,
const
char
*
name
,
int32_t
*
out
);
68
int
ff_AMediaFormat_getInt64
(
FFAMediaFormat
*
format
,
const
char
*
name
, int64_t *
out
);
69
int
ff_AMediaFormat_getFloat
(
FFAMediaFormat
*
format
,
const
char
*
name
,
float
*
out
);
70
int
ff_AMediaFormat_getBuffer
(
FFAMediaFormat
*
format
,
const
char
*
name
,
void
**
data
,
size_t
*
size
);
71
int
ff_AMediaFormat_getString
(
FFAMediaFormat
*
format
,
const
char
*
name
,
const
char
**
out
);
72
73
void
ff_AMediaFormat_setInt32
(
FFAMediaFormat
*
format
,
const
char
*
name
,
int32_t
value
);
74
void
ff_AMediaFormat_setInt64
(
FFAMediaFormat
*
format
,
const
char
*
name
, int64_t
value
);
75
void
ff_AMediaFormat_setFloat
(
FFAMediaFormat
*
format
,
const
char
*
name
,
float
value
);
76
void
ff_AMediaFormat_setString
(
FFAMediaFormat
*
format
,
const
char
*
name
,
const
char
*
value
);
77
void
ff_AMediaFormat_setBuffer
(
FFAMediaFormat
*
format
,
const
char
*
name
,
void
*
data
,
size_t
size
);
78
79
struct
FFAMediaCodec
;
80
typedef
struct
FFAMediaCodec
FFAMediaCodec
;
81
typedef
struct
FFAMediaCodecCryptoInfo
FFAMediaCodecCryptoInfo
;
82
83
struct
FFAMediaCodecBufferInfo
{
84
int32_t
offset
;
85
int32_t
size
;
86
int64_t
presentationTimeUs
;
87
uint32_t
flags
;
88
};
89
typedef
struct
FFAMediaCodecBufferInfo
FFAMediaCodecBufferInfo
;
90
91
char
*
ff_AMediaCodec_getName
(
FFAMediaCodec
*codec);
92
93
FFAMediaCodec
*
ff_AMediaCodec_createCodecByName
(
const
char
*
name
);
94
FFAMediaCodec
*
ff_AMediaCodec_createDecoderByType
(
const
char
*mime_type);
95
FFAMediaCodec
*
ff_AMediaCodec_createEncoderByType
(
const
char
*mime_type);
96
97
int
ff_AMediaCodec_configure
(
FFAMediaCodec
* codec,
const
FFAMediaFormat
*
format
,
void
* surface,
void
*crypto, uint32_t
flags
);
98
int
ff_AMediaCodec_start
(
FFAMediaCodec
* codec);
99
int
ff_AMediaCodec_stop
(
FFAMediaCodec
* codec);
100
int
ff_AMediaCodec_flush
(
FFAMediaCodec
* codec);
101
int
ff_AMediaCodec_delete
(
FFAMediaCodec
* codec);
102
103
uint8_t
*
ff_AMediaCodec_getInputBuffer
(
FFAMediaCodec
* codec,
size_t
idx,
size_t
*
out_size
);
104
uint8_t
*
ff_AMediaCodec_getOutputBuffer
(
FFAMediaCodec
* codec,
size_t
idx,
size_t
*
out_size
);
105
106
ssize_t
ff_AMediaCodec_dequeueInputBuffer
(
FFAMediaCodec
* codec, int64_t timeoutUs);
107
int
ff_AMediaCodec_queueInputBuffer
(
FFAMediaCodec
* codec,
size_t
idx, off_t
offset
,
size_t
size
, uint64_t time, uint32_t
flags
);
108
109
ssize_t
ff_AMediaCodec_dequeueOutputBuffer
(
FFAMediaCodec
* codec,
FFAMediaCodecBufferInfo
*info, int64_t timeoutUs);
110
FFAMediaFormat
*
ff_AMediaCodec_getOutputFormat
(
FFAMediaCodec
* codec);
111
112
int
ff_AMediaCodec_releaseOutputBuffer
(
FFAMediaCodec
* codec,
size_t
idx,
int
render);
113
int
ff_AMediaCodec_releaseOutputBufferAtTime
(
FFAMediaCodec
*codec,
size_t
idx, int64_t timestampNs);
114
115
int
ff_AMediaCodec_infoTryAgainLater
(
FFAMediaCodec
*codec, ssize_t idx);
116
int
ff_AMediaCodec_infoOutputBuffersChanged
(
FFAMediaCodec
*codec, ssize_t idx);
117
int
ff_AMediaCodec_infoOutputFormatChanged
(
FFAMediaCodec
*codec, ssize_t indx);
118
119
int
ff_AMediaCodec_getBufferFlagCodecConfig
(
FFAMediaCodec
*codec);
120
int
ff_AMediaCodec_getBufferFlagEndOfStream
(
FFAMediaCodec
*codec);
121
int
ff_AMediaCodec_getBufferFlagKeyFrame
(
FFAMediaCodec
*codec);
122
123
int
ff_AMediaCodec_getConfigureFlagEncode
(
FFAMediaCodec
*codec);
124
125
int
ff_AMediaCodec_cleanOutputBuffers
(
FFAMediaCodec
*codec);
126
127
#endif
/* AVCODEC_MEDIACODEC_WRAPPER_H */
name
const char * name
Definition:
avisynth_c.h:775
ff_AMediaCodec_dequeueOutputBuffer
ssize_t ff_AMediaCodec_dequeueOutputBuffer(FFAMediaCodec *codec, FFAMediaCodecBufferInfo *info, int64_t timeoutUs)
Definition:
mediacodec_wrapper.c:1479
ff_AMediaFormat_getString
int ff_AMediaFormat_getString(FFAMediaFormat *format, const char *name, const char **out)
Definition:
mediacodec_wrapper.c:919
format
static const char * format[]
Definition:
af_aiir.c:311
size
int size
Definition:
twinvq_data.h:11134
ff_AMediaFormat_setBuffer
void ff_AMediaFormat_setBuffer(FFAMediaFormat *format, const char *name, void *data, size_t size)
Definition:
mediacodec_wrapper.c:1079
FFAMediaFormat
Definition:
mediacodec_wrapper.c:162
ff_AMediaFormat_new
FFAMediaFormat * ff_AMediaFormat_new(void)
Definition:
mediacodec_wrapper.c:617
ff_AMediaFormat_getInt32
int ff_AMediaFormat_getInt32(FFAMediaFormat *format, const char *name, int32_t *out)
Definition:
mediacodec_wrapper.c:744
ff_AMediaCodecList_getCodecNameByType
char * ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int encoder, void *log_ctx)
Definition:
mediacodec_wrapper.c:382
ff_AMediaCodec_start
int ff_AMediaCodec_start(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1360
FFAMediaCodecCryptoInfo
struct FFAMediaCodecCryptoInfo FFAMediaCodecCryptoInfo
Definition:
mediacodec_wrapper.h:81
out_size
int out_size
Definition:
movenc.c:55
FFAMediaCodecBufferInfo::offset
int32_t offset
Definition:
mediacodec_wrapper.h:84
ff_AMediaCodec_flush
int ff_AMediaCodec_flush(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1394
ff_AMediaCodec_releaseOutputBuffer
int ff_AMediaCodec_releaseOutputBuffer(FFAMediaCodec *codec, size_t idx, int render)
Definition:
mediacodec_wrapper.c:1411
uint8_t
uint8_t
Definition:
audio_convert.c:194
ff_AMediaCodec_infoTryAgainLater
int ff_AMediaCodec_infoTryAgainLater(FFAMediaCodec *codec, ssize_t idx)
Definition:
mediacodec_wrapper.c:1633
ff_AMediaFormat_delete
int ff_AMediaFormat_delete(FFAMediaFormat *format)
Definition:
mediacodec_wrapper.c:697
ff_AMediaCodec_createDecoderByType
FFAMediaCodec * ff_AMediaCodec_createDecoderByType(const char *mime_type)
ff_AMediaCodec_dequeueInputBuffer
ssize_t ff_AMediaCodec_dequeueInputBuffer(FFAMediaCodec *codec, int64_t timeoutUs)
Definition:
mediacodec_wrapper.c:1445
data
const char data[16]
Definition:
mxf.c:90
ff_AMediaCodec_cleanOutputBuffers
int ff_AMediaCodec_cleanOutputBuffers(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1668
FFAMediaCodecBufferInfo
Definition:
mediacodec_wrapper.h:83
ff_AMediaCodec_getBufferFlagEndOfStream
int ff_AMediaCodec_getBufferFlagEndOfStream(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1653
FFAMediaCodecBufferInfo::flags
uint32_t flags
Definition:
mediacodec_wrapper.h:87
ff_AMediaFormat_getInt64
int ff_AMediaFormat_getInt64(FFAMediaFormat *format, const char *name, int64_t *out)
Definition:
mediacodec_wrapper.c:783
ff_AMediaCodec_getName
char * ff_AMediaCodec_getName(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1324
ff_AMediaFormat_toString
char * ff_AMediaFormat_toString(FFAMediaFormat *format)
Definition:
mediacodec_wrapper.c:719
ff_AMediaCodec_getBufferFlagKeyFrame
int ff_AMediaCodec_getBufferFlagKeyFrame(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1658
ff_AMediaCodec_releaseOutputBufferAtTime
int ff_AMediaCodec_releaseOutputBufferAtTime(FFAMediaCodec *codec, size_t idx, int64_t timestampNs)
Definition:
mediacodec_wrapper.c:1428
ff_AMediaCodec_delete
int ff_AMediaCodec_delete(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1294
ff_AMediaFormat_getFloat
int ff_AMediaFormat_getFloat(FFAMediaFormat *format, const char *name, float *out)
Definition:
mediacodec_wrapper.c:822
ff_AMediaFormat_getBuffer
int ff_AMediaFormat_getBuffer(FFAMediaFormat *format, const char *name, void **data, size_t *size)
Definition:
mediacodec_wrapper.c:861
int32_t
int32_t
Definition:
audio_convert.c:194
ff_AMediaCodec_getBufferFlagCodecConfig
int ff_AMediaCodec_getBufferFlagCodecConfig(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1648
ff_AMediaCodec_createCodecByName
FFAMediaCodec * ff_AMediaCodec_createCodecByName(const char *name)
ff_AMediaCodec_queueInputBuffer
int ff_AMediaCodec_queueInputBuffer(FFAMediaCodec *codec, size_t idx, off_t offset, size_t size, uint64_t time, uint32_t flags)
Definition:
mediacodec_wrapper.c:1462
ff_AMediaCodec_getOutputBuffer
uint8_t * ff_AMediaCodec_getOutputBuffer(FFAMediaCodec *codec, size_t idx, size_t *out_size)
Definition:
mediacodec_wrapper.c:1562
ff_AMediaFormat_setInt32
void ff_AMediaFormat_setInt32(FFAMediaFormat *format, const char *name, int32_t value)
Definition:
mediacodec_wrapper.c:969
AVCodecContext
main external API structure.
Definition:
avcodec.h:1518
ff_AMediaFormat_setInt64
void ff_AMediaFormat_setInt64(FFAMediaFormat *format, const char *name, int64_t value)
Definition:
mediacodec_wrapper.c:994
ff_AMediaFormat_setFloat
void ff_AMediaFormat_setFloat(FFAMediaFormat *format, const char *name, float value)
Definition:
mediacodec_wrapper.c:1019
value
double value
Definition:
eval.c:98
FFAMediaCodecBufferInfo::size
int32_t size
Definition:
mediacodec_wrapper.h:85
ff_AMediaFormat_setString
void ff_AMediaFormat_setString(FFAMediaFormat *format, const char *name, const char *value)
Definition:
mediacodec_wrapper.c:1044
ff_AMediaCodec_infoOutputFormatChanged
int ff_AMediaCodec_infoOutputFormatChanged(FFAMediaCodec *codec, ssize_t indx)
Definition:
mediacodec_wrapper.c:1643
profile
mfxU16 profile
Definition:
qsvenc.c:44
ff_AMediaCodecProfile_getProfileFromAVCodecContext
int ff_AMediaCodecProfile_getProfileFromAVCodecContext(AVCodecContext *avctx)
The following API around MediaCodec and MediaFormat is based on the NDK one provided by Google since ...
Definition:
mediacodec_wrapper.c:313
FFAMediaCodec
Definition:
mediacodec_wrapper.c:274
ff_AMediaCodec_getConfigureFlagEncode
int ff_AMediaCodec_getConfigureFlagEncode(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1663
FFAMediaCodecBufferInfo::presentationTimeUs
int64_t presentationTimeUs
Definition:
mediacodec_wrapper.h:86
ff_AMediaCodec_getOutputFormat
FFAMediaFormat * ff_AMediaCodec_getOutputFormat(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1610
ff_AMediaCodec_stop
int ff_AMediaCodec_stop(FFAMediaCodec *codec)
Definition:
mediacodec_wrapper.c:1377
ff_AMediaCodec_getInputBuffer
uint8_t * ff_AMediaCodec_getInputBuffer(FFAMediaCodec *codec, size_t idx, size_t *out_size)
Definition:
mediacodec_wrapper.c:1514
out
FILE * out
Definition:
movenc.c:54
ff_AMediaCodec_configure
int ff_AMediaCodec_configure(FFAMediaCodec *codec, const FFAMediaFormat *format, void *surface, void *crypto, uint32_t flags)
Definition:
mediacodec_wrapper.c:1343
ff_AMediaCodec_infoOutputBuffersChanged
int ff_AMediaCodec_infoOutputBuffersChanged(FFAMediaCodec *codec, ssize_t idx)
Definition:
mediacodec_wrapper.c:1638
ff_AMediaCodec_createEncoderByType
FFAMediaCodec * ff_AMediaCodec_createEncoderByType(const char *mime_type)
Generated on Tue May 22 2018 07:06:35 for FFmpeg by
1.8.13