Skip to content

Commit 90735fc

Browse files
committed
Add AML HW decoders
This adds the ffmpeg harware decoders to use the amcodec library on AMLogic devices
1 parent 28b920c commit 90735fc

File tree

13 files changed

+1166
-0
lines changed

13 files changed

+1166
-0
lines changed

configure

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,6 +310,7 @@ External library support:
310310
--disable-nvenc disable Nvidia video encoding code [autodetect]
311311
--enable-omx enable OpenMAX IL code [no]
312312
--enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
313+
--enable-aml enable decoding via AmLogic HW decoders [no]
313314
--disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
314315
--disable-vda disable Apple Video Decode Acceleration code [autodetect]
315316
--disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
@@ -1571,6 +1572,7 @@ HWACCEL_LIBRARY_LIST="
15711572
vdpau
15721573
videotoolbox_hwaccel
15731574
xvmc
1575+
aml
15741576
"
15751577

15761578
DOCUMENT_LIST="
@@ -2565,6 +2567,9 @@ h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
25652567
h264_mmal_decoder_deps="mmal"
25662568
h264_mmal_decoder_select="mmal"
25672569
h264_mmal_hwaccel_deps="mmal"
2570+
h264_aml_decoder_deps="aml"
2571+
h264_aml_decoder_select="aml"
2572+
h264_aml_hwaccel_deps="aml"
25682573
h264_omx_encoder_deps="omx"
25692574
h264_qsv_hwaccel_deps="libmfx"
25702575
h264_vaapi_hwaccel_deps="vaapi"
@@ -5779,6 +5784,8 @@ enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect
57795784
die "ERROR: mmal not found"; }
57805785
enabled mmal && check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"
57815786

5787+
enabled aml && { check_lib amcodec/codec.h codec_init "-lamcodec" || die "ERROR : amcodec not found."; }
5788+
57825789
enabled netcdf && require_pkg_config netcdf netcdf.h nc_inq_libvers
57835790
enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
57845791
check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||

libavcodec/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ HEADERS = avcodec.h \
1515
vaapi.h \
1616
vda.h \
1717
vdpau.h \
18+
aml.h \
1819
version.h \
1920
videotoolbox.h \
2021
vorbis_parser.h \
@@ -318,6 +319,7 @@ OBJS-$(CONFIG_H264_DECODER) += h264dec.o h264_cabac.o h264_cavlc.o \
318319
OBJS-$(CONFIG_H264_CUVID_DECODER) += cuvid.o
319320
OBJS-$(CONFIG_H264_MEDIACODEC_DECODER) += mediacodecdec_h264.o
320321
OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o
322+
OBJS-$(CONFIG_H264_AML_DECODER) += amldec.o amltools.o amlqueue.o
321323
OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
322324
OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o
323325
OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o

libavcodec/allcodecs.c

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,23 +81,30 @@ void avcodec_register_all(void)
8181
REGISTER_HWACCEL(H264_VDPAU, h264_vdpau);
8282
REGISTER_HWACCEL(H264_VIDEOTOOLBOX, h264_videotoolbox);
8383
REGISTER_HWACCEL(HEVC_CUVID, hevc_cuvid);
84+
REGISTER_HWACCEL(H264_AML, h264_aml);
8485
REGISTER_HWACCEL(HEVC_D3D11VA, hevc_d3d11va);
8586
REGISTER_HWACCEL(HEVC_DXVA2, hevc_dxva2);
8687
REGISTER_HWACCEL(HEVC_QSV, hevc_qsv);
8788
REGISTER_HWACCEL(HEVC_VAAPI, hevc_vaapi);
8889
REGISTER_HWACCEL(HEVC_VDPAU, hevc_vdpau);
90+
REGISTER_HWACCEL(HEVC_AML, hevc_aml);
8991
REGISTER_HWACCEL(MPEG1_XVMC, mpeg1_xvmc);
9092
REGISTER_HWACCEL(MPEG1_VDPAU, mpeg1_vdpau);
9193
REGISTER_HWACCEL(MPEG1_VIDEOTOOLBOX, mpeg1_videotoolbox);
9294
REGISTER_HWACCEL(MPEG2_XVMC, mpeg2_xvmc);
9395
REGISTER_HWACCEL(MPEG2_D3D11VA, mpeg2_d3d11va);
9496
REGISTER_HWACCEL(MPEG2_DXVA2, mpeg2_dxva2);
9597
REGISTER_HWACCEL(MPEG2_MMAL, mpeg2_mmal);
98+
REGISTER_HWACCEL(MPEG2_AML, mpeg2_aml);
9699
REGISTER_HWACCEL(MPEG2_QSV, mpeg2_qsv);
97100
REGISTER_HWACCEL(MPEG2_VAAPI, mpeg2_vaapi);
98101
REGISTER_HWACCEL(MPEG2_VDPAU, mpeg2_vdpau);
99102
REGISTER_HWACCEL(MPEG2_VIDEOTOOLBOX, mpeg2_videotoolbox);
100103
REGISTER_HWACCEL(MPEG4_MMAL, mpeg4_mmal);
104+
REGISTER_HWACCEL(MPEG4_AML, mpeg4_aml);
105+
REGISTER_HWACCEL(MSMPEG4V1_AML, msmpeg4v1_aml);
106+
REGISTER_HWACCEL(MSMPEG4V2_AML, msmpeg4v2_aml);
107+
REGISTER_HWACCEL(MSMPEG4V3_AML, msmpeg4v3_aml);
101108
REGISTER_HWACCEL(MPEG4_VAAPI, mpeg4_vaapi);
102109
REGISTER_HWACCEL(MPEG4_VDPAU, mpeg4_vdpau);
103110
REGISTER_HWACCEL(MPEG4_VIDEOTOOLBOX, mpeg4_videotoolbox);
@@ -107,6 +114,7 @@ void avcodec_register_all(void)
107114
REGISTER_HWACCEL(VC1_VAAPI, vc1_vaapi);
108115
REGISTER_HWACCEL(VC1_VDPAU, vc1_vdpau);
109116
REGISTER_HWACCEL(VC1_MMAL, vc1_mmal);
117+
REGISTER_HWACCEL(VC1_AML, vc1_aml);
110118
REGISTER_HWACCEL(VC1_QSV, vc1_qsv);
111119
REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid);
112120
REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid);
@@ -202,9 +210,11 @@ void avcodec_register_all(void)
202210
#if FF_API_VDPAU
203211
REGISTER_DECODER(H264_VDPAU, h264_vdpau);
204212
#endif
213+
REGISTER_DECODER(H264_AML, h264_aml)
205214
REGISTER_ENCDEC (HAP, hap);
206215
REGISTER_DECODER(HEVC, hevc);
207216
REGISTER_DECODER(HEVC_QSV, hevc_qsv);
217+
REGISTER_DECODER(HEVC_AML, hevc_aml)
208218
REGISTER_DECODER(HNM4_VIDEO, hnm4_video);
209219
REGISTER_DECODER(HQ_HQA, hq_hqa);
210220
REGISTER_DECODER(HQX, hqx);
@@ -240,6 +250,10 @@ void avcodec_register_all(void)
240250
REGISTER_ENCDEC (MPEG4, mpeg4);
241251
REGISTER_DECODER(MPEG4_CRYSTALHD, mpeg4_crystalhd);
242252
REGISTER_DECODER(MPEG4_MMAL, mpeg4_mmal);
253+
REGISTER_DECODER(MPEG4_AML, mpeg4_aml);
254+
REGISTER_DECODER(MSMPEG4V1_AML, msmpeg4v1_aml);
255+
REGISTER_DECODER(MSMPEG4V2_AML, msmpeg4v2_aml);
256+
REGISTER_DECODER(MSMPEG4V3_AML, msmpeg4v3_aml);
243257
#if FF_API_VDPAU
244258
REGISTER_DECODER(MPEG4_VDPAU, mpeg4_vdpau);
245259
#endif
@@ -249,6 +263,7 @@ void avcodec_register_all(void)
249263
REGISTER_DECODER(MPEG1_VDPAU, mpeg1_vdpau);
250264
#endif
251265
REGISTER_DECODER(MPEG2_MMAL, mpeg2_mmal);
266+
REGISTER_DECODER(MPEG2_AML, mpeg2_aml);
252267
REGISTER_DECODER(MPEG2_CRYSTALHD, mpeg2_crystalhd);
253268
REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv);
254269
REGISTER_DECODER(MSA1, msa1);
@@ -339,6 +354,7 @@ void avcodec_register_all(void)
339354
#endif
340355
REGISTER_DECODER(VC1IMAGE, vc1image);
341356
REGISTER_DECODER(VC1_MMAL, vc1_mmal);
357+
REGISTER_DECODER(VC1_AML, vc1_aml);
342358
REGISTER_DECODER(VC1_QSV, vc1_qsv);
343359
REGISTER_ENCODER(VC2, vc2);
344360
REGISTER_DECODER(VCR1, vcr1);

libavcodec/aml.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifndef LAVC_AML_H
2+
#define LAVC_AML_H
3+
4+
#include "libavutil/common.h"
5+
6+
typedef struct {
7+
unsigned long handle;
8+
int free;
9+
} AMLBuffer;
10+
11+
#endif // LAVC_AML_H

0 commit comments

Comments
 (0)