Skip to content
Permalink
Browse files
Add AML HW decoders
This adds the ffmpeg harware decoders to use the amcodec library on AMLogic devices
  • Loading branch information
LongChair committed Sep 4, 2016
1 parent 28b920c commit 90735fcbc47fae185ed59f63a9e0350c77ed9c8e
@@ -310,6 +310,7 @@ External library support:
--disable-nvenc disable Nvidia video encoding code [autodetect]
--enable-omx enable OpenMAX IL code [no]
--enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no]
--enable-aml enable decoding via AmLogic HW decoders [no]
--disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect]
--disable-vda disable Apple Video Decode Acceleration code [autodetect]
--disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect]
@@ -1571,6 +1572,7 @@ HWACCEL_LIBRARY_LIST="
vdpau
videotoolbox_hwaccel
xvmc
aml
"

DOCUMENT_LIST="
@@ -2565,6 +2567,9 @@ h264_mediacodec_decoder_select="h264_mp4toannexb_bsf h264_parser"
h264_mmal_decoder_deps="mmal"
h264_mmal_decoder_select="mmal"
h264_mmal_hwaccel_deps="mmal"
h264_aml_decoder_deps="aml"
h264_aml_decoder_select="aml"
h264_aml_hwaccel_deps="aml"
h264_omx_encoder_deps="omx"
h264_qsv_hwaccel_deps="libmfx"
h264_vaapi_hwaccel_deps="vaapi"
@@ -5779,6 +5784,8 @@ enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect
die "ERROR: mmal not found"; }
enabled mmal && check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS"

enabled aml && { check_lib amcodec/codec.h codec_init "-lamcodec" || die "ERROR : amcodec not found."; }

enabled netcdf && require_pkg_config netcdf netcdf.h nc_inq_libvers
enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do
check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } ||
@@ -15,6 +15,7 @@ HEADERS = avcodec.h \
vaapi.h \
vda.h \
vdpau.h \
aml.h \
version.h \
videotoolbox.h \
vorbis_parser.h \
@@ -318,6 +319,7 @@ OBJS-$(CONFIG_H264_DECODER) += h264dec.o h264_cabac.o h264_cavlc.o \
OBJS-$(CONFIG_H264_CUVID_DECODER) += cuvid.o
OBJS-$(CONFIG_H264_MEDIACODEC_DECODER) += mediacodecdec_h264.o
OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o
OBJS-$(CONFIG_H264_AML_DECODER) += amldec.o amltools.o amlqueue.o
OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o
OBJS-$(CONFIG_NVENC_H264_ENCODER) += nvenc_h264.o
@@ -81,23 +81,30 @@ void avcodec_register_all(void)
REGISTER_HWACCEL(H264_VDPAU, h264_vdpau);
REGISTER_HWACCEL(H264_VIDEOTOOLBOX, h264_videotoolbox);
REGISTER_HWACCEL(HEVC_CUVID, hevc_cuvid);
REGISTER_HWACCEL(H264_AML, h264_aml);
REGISTER_HWACCEL(HEVC_D3D11VA, hevc_d3d11va);
REGISTER_HWACCEL(HEVC_DXVA2, hevc_dxva2);
REGISTER_HWACCEL(HEVC_QSV, hevc_qsv);
REGISTER_HWACCEL(HEVC_VAAPI, hevc_vaapi);
REGISTER_HWACCEL(HEVC_VDPAU, hevc_vdpau);
REGISTER_HWACCEL(HEVC_AML, hevc_aml);
REGISTER_HWACCEL(MPEG1_XVMC, mpeg1_xvmc);
REGISTER_HWACCEL(MPEG1_VDPAU, mpeg1_vdpau);
REGISTER_HWACCEL(MPEG1_VIDEOTOOLBOX, mpeg1_videotoolbox);
REGISTER_HWACCEL(MPEG2_XVMC, mpeg2_xvmc);
REGISTER_HWACCEL(MPEG2_D3D11VA, mpeg2_d3d11va);
REGISTER_HWACCEL(MPEG2_DXVA2, mpeg2_dxva2);
REGISTER_HWACCEL(MPEG2_MMAL, mpeg2_mmal);
REGISTER_HWACCEL(MPEG2_AML, mpeg2_aml);
REGISTER_HWACCEL(MPEG2_QSV, mpeg2_qsv);
REGISTER_HWACCEL(MPEG2_VAAPI, mpeg2_vaapi);
REGISTER_HWACCEL(MPEG2_VDPAU, mpeg2_vdpau);
REGISTER_HWACCEL(MPEG2_VIDEOTOOLBOX, mpeg2_videotoolbox);
REGISTER_HWACCEL(MPEG4_MMAL, mpeg4_mmal);
REGISTER_HWACCEL(MPEG4_AML, mpeg4_aml);
REGISTER_HWACCEL(MSMPEG4V1_AML, msmpeg4v1_aml);
REGISTER_HWACCEL(MSMPEG4V2_AML, msmpeg4v2_aml);
REGISTER_HWACCEL(MSMPEG4V3_AML, msmpeg4v3_aml);
REGISTER_HWACCEL(MPEG4_VAAPI, mpeg4_vaapi);
REGISTER_HWACCEL(MPEG4_VDPAU, mpeg4_vdpau);
REGISTER_HWACCEL(MPEG4_VIDEOTOOLBOX, mpeg4_videotoolbox);
@@ -107,6 +114,7 @@ void avcodec_register_all(void)
REGISTER_HWACCEL(VC1_VAAPI, vc1_vaapi);
REGISTER_HWACCEL(VC1_VDPAU, vc1_vdpau);
REGISTER_HWACCEL(VC1_MMAL, vc1_mmal);
REGISTER_HWACCEL(VC1_AML, vc1_aml);
REGISTER_HWACCEL(VC1_QSV, vc1_qsv);
REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid);
REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid);
@@ -202,9 +210,11 @@ void avcodec_register_all(void)
#if FF_API_VDPAU
REGISTER_DECODER(H264_VDPAU, h264_vdpau);
#endif
REGISTER_DECODER(H264_AML, h264_aml)
REGISTER_ENCDEC (HAP, hap);
REGISTER_DECODER(HEVC, hevc);
REGISTER_DECODER(HEVC_QSV, hevc_qsv);
REGISTER_DECODER(HEVC_AML, hevc_aml)
REGISTER_DECODER(HNM4_VIDEO, hnm4_video);
REGISTER_DECODER(HQ_HQA, hq_hqa);
REGISTER_DECODER(HQX, hqx);
@@ -240,6 +250,10 @@ void avcodec_register_all(void)
REGISTER_ENCDEC (MPEG4, mpeg4);
REGISTER_DECODER(MPEG4_CRYSTALHD, mpeg4_crystalhd);
REGISTER_DECODER(MPEG4_MMAL, mpeg4_mmal);
REGISTER_DECODER(MPEG4_AML, mpeg4_aml);
REGISTER_DECODER(MSMPEG4V1_AML, msmpeg4v1_aml);
REGISTER_DECODER(MSMPEG4V2_AML, msmpeg4v2_aml);
REGISTER_DECODER(MSMPEG4V3_AML, msmpeg4v3_aml);
#if FF_API_VDPAU
REGISTER_DECODER(MPEG4_VDPAU, mpeg4_vdpau);
#endif
@@ -249,6 +263,7 @@ void avcodec_register_all(void)
REGISTER_DECODER(MPEG1_VDPAU, mpeg1_vdpau);
#endif
REGISTER_DECODER(MPEG2_MMAL, mpeg2_mmal);
REGISTER_DECODER(MPEG2_AML, mpeg2_aml);
REGISTER_DECODER(MPEG2_CRYSTALHD, mpeg2_crystalhd);
REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv);
REGISTER_DECODER(MSA1, msa1);
@@ -339,6 +354,7 @@ void avcodec_register_all(void)
#endif
REGISTER_DECODER(VC1IMAGE, vc1image);
REGISTER_DECODER(VC1_MMAL, vc1_mmal);
REGISTER_DECODER(VC1_AML, vc1_aml);
REGISTER_DECODER(VC1_QSV, vc1_qsv);
REGISTER_ENCODER(VC2, vc2);
REGISTER_DECODER(VCR1, vcr1);
@@ -0,0 +1,11 @@
#ifndef LAVC_AML_H
#define LAVC_AML_H

#include "libavutil/common.h"

typedef struct {
unsigned long handle;
int free;
} AMLBuffer;

#endif // LAVC_AML_H

3 comments on commit 90735fc

@jhallard

This comment has been minimized.

Copy link

@jhallard jhallard replied Jun 25, 2020

Did this code every make it into ffmpeg? I have the ffmpeg sources checked out and I don't see any references to --enable-aml or anything involving amlogic in the repo. Were these changes rejected? Is there a guide for getting these changes working in practice?

Thanks!

@LongChair

This comment has been minimized.

Copy link
Owner Author

@LongChair LongChair replied Jun 25, 2020

Hi, I dont think it ended up in ffmpeg for a reason i clearly not recall :)
That patchset would probably require a lot of rework to be rebased on the current ffmpeg and i don't have the time anymore to do this.
Feel free to use that work though :)

@jhallard

This comment has been minimized.

Copy link

@jhallard jhallard replied Jun 25, 2020

Ah, okay, thanks for your help!

Please sign in to comment.