blob: 10f38277b54db76371d0ab21707fc333d3490805
1 | /* |
2 | * Android MediaCodec decoder |
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_MEDIACODECDEC_COMMON_H |
24 | #define AVCODEC_MEDIACODECDEC_COMMON_H |
25 | |
26 | #include <stdint.h> |
27 | #include <stdatomic.h> |
28 | #include <sys/types.h> |
29 | |
30 | #include "libavutil/frame.h" |
31 | #include "libavutil/pixfmt.h" |
32 | |
33 | #include "avcodec.h" |
34 | #include "mediacodec_wrapper.h" |
35 | |
36 | typedef struct MediaCodecDecContext { |
37 | |
38 | atomic_int refcount; |
39 | |
40 | char *codec_name; |
41 | |
42 | FFAMediaCodec *codec; |
43 | FFAMediaFormat *format; |
44 | |
45 | void *surface; |
46 | |
47 | int started; |
48 | int draining; |
49 | int flushing; |
50 | int eos; |
51 | |
52 | int width; |
53 | int height; |
54 | int stride; |
55 | int slice_height; |
56 | int color_format; |
57 | enum AVPixelFormat pix_fmt; |
58 | int crop_top; |
59 | int crop_bottom; |
60 | int crop_left; |
61 | int crop_right; |
62 | |
63 | uint64_t output_buffer_count; |
64 | |
65 | } MediaCodecDecContext; |
66 | |
67 | int ff_mediacodec_dec_init(AVCodecContext *avctx, |
68 | MediaCodecDecContext *s, |
69 | const char *mime, |
70 | FFAMediaFormat *format); |
71 | |
72 | int ff_mediacodec_dec_decode(AVCodecContext *avctx, |
73 | MediaCodecDecContext *s, |
74 | AVFrame *frame, |
75 | int *got_frame, |
76 | AVPacket *pkt); |
77 | |
78 | int ff_mediacodec_dec_flush(AVCodecContext *avctx, |
79 | MediaCodecDecContext *s); |
80 | |
81 | int ff_mediacodec_dec_close(AVCodecContext *avctx, |
82 | MediaCodecDecContext *s); |
83 | |
84 | int ff_mediacodec_dec_is_flushing(AVCodecContext *avctx, |
85 | MediaCodecDecContext *s); |
86 | |
87 | typedef struct MediaCodecBuffer { |
88 | |
89 | MediaCodecDecContext *ctx; |
90 | ssize_t index; |
91 | int64_t pts; |
92 | atomic_int released; |
93 | |
94 | } MediaCodecBuffer; |
95 | |
96 | #endif /* AVCODEC_MEDIACODECDEC_COMMON_H */ |
97 |