Commit b33fa8a1 authored by Philip Langdale's avatar Philip Langdale Committed by Michael Niedermayer

CrystalHD decoder support v7

The Broadcom CrystalHD decoder chips provide hardware video
decoding for a number of video formats. It does so using a
memory:memory interface where a compressed bitstream is fed
in and decompressed pictures are copied out. As such, it works
independent of any graphics hardware in the system.

Features supported in this initial version:
* Support for Linux (using current drivers/library from git.wilsonet.com)
* Support for 70015 hardware
* Formats: MPEG2, MPEG4 Part 2, H.264, VC1 and DivX 3.11 (untested)
* Progressive content
* Non-H.264 Interlaced content
* H.264 MBAFF content

Features missing in this initial version:
* Support for OSX (might work - untested)
* Support for Windows
* Support for 70012 hardware
* H.264 PAFF content
Signed-off-by: 's avatarPhilip Langdale <philipl@overt.org>
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent 0b82612d
...@@ -231,6 +231,7 @@ Codecs: ...@@ -231,6 +231,7 @@ Codecs:
zmbv* Kostya Shishkov zmbv* Kostya Shishkov
Hardware acceleration: Hardware acceleration:
crystalhd.c Philip Langdale
dxva2* Laurent Aimar dxva2* Laurent Aimar
vaapi* Gwenole Beauchesne vaapi* Gwenole Beauchesne
vdpau* Carl Eugen Hoyos vdpau* Carl Eugen Hoyos
......
...@@ -878,6 +878,7 @@ CONFIG_LIST=" ...@@ -878,6 +878,7 @@ CONFIG_LIST="
avformat avformat
avisynth avisynth
bzlib bzlib
crystalhd
dct dct
doc doc
dwt dwt
...@@ -1244,6 +1245,7 @@ h263_vaapi_hwaccel_select="vaapi h263_decoder" ...@@ -1244,6 +1245,7 @@ h263_vaapi_hwaccel_select="vaapi h263_decoder"
h263i_decoder_select="h263_decoder" h263i_decoder_select="h263_decoder"
h263p_encoder_select="h263_encoder" h263p_encoder_select="h263_encoder"
h264_decoder_select="golomb h264dsp h264pred" h264_decoder_select="golomb h264dsp h264pred"
h264_crystalhd_decoder_select="crystalhd h264_mp4toannexb_bsf"
h264_dxva2_hwaccel_deps="dxva2api_h" h264_dxva2_hwaccel_deps="dxva2api_h"
h264_dxva2_hwaccel_select="dxva2 h264_decoder" h264_dxva2_hwaccel_select="dxva2 h264_decoder"
h264_vaapi_hwaccel_select="vaapi" h264_vaapi_hwaccel_select="vaapi"
...@@ -1266,13 +1268,16 @@ mpeg4_decoder_select="h263_decoder mpeg4video_parser" ...@@ -1266,13 +1268,16 @@ mpeg4_decoder_select="h263_decoder mpeg4video_parser"
mpeg4_encoder_select="h263_encoder" mpeg4_encoder_select="h263_encoder"
mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder" mpeg_vdpau_decoder_select="vdpau mpegvideo_decoder"
mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder" mpeg1_vdpau_decoder_select="vdpau mpeg1video_decoder"
mpeg2_crystalhd_decoder_select="crystalhd"
mpeg2_dxva2_hwaccel_deps="dxva2api_h" mpeg2_dxva2_hwaccel_deps="dxva2api_h"
mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder" mpeg2_dxva2_hwaccel_select="dxva2 mpeg2video_decoder"
mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder" mpeg2_vaapi_hwaccel_select="vaapi mpeg2video_decoder"
mpeg4_crystalhd_decoder_select="crystalhd"
mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder" mpeg4_vaapi_hwaccel_select="vaapi mpeg4_decoder"
mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder" mpeg4_vdpau_decoder_select="vdpau mpeg4_decoder"
mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h" mpeg_xvmc_decoder_deps="X11_extensions_XvMClib_h"
mpeg_xvmc_decoder_select="mpegvideo_decoder" mpeg_xvmc_decoder_select="mpegvideo_decoder"
msmpeg4_crystalhd_decoder_select="crystalhd"
msmpeg4v1_decoder_select="h263_decoder" msmpeg4v1_decoder_select="h263_decoder"
msmpeg4v1_encoder_select="h263_encoder" msmpeg4v1_encoder_select="h263_encoder"
msmpeg4v2_decoder_select="h263_decoder" msmpeg4v2_decoder_select="h263_decoder"
...@@ -1309,6 +1314,7 @@ truehd_decoder_select="mlp_decoder" ...@@ -1309,6 +1314,7 @@ truehd_decoder_select="mlp_decoder"
tscc_decoder_select="zlib" tscc_decoder_select="zlib"
twinvq_decoder_select="mdct lsp" twinvq_decoder_select="mdct lsp"
vc1_decoder_select="h263_decoder" vc1_decoder_select="h263_decoder"
vc1_crystalhd_decoder_select="crystalhd"
vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex" vc1_dxva2_hwaccel_deps="dxva2api_h DXVA_PictureParameters_wDecodedPictureIndex"
vc1_dxva2_hwaccel_select="dxva2 vc1_decoder" vc1_dxva2_hwaccel_select="dxva2 vc1_decoder"
vc1_vaapi_hwaccel_select="vaapi vc1_decoder" vc1_vaapi_hwaccel_select="vaapi vc1_decoder"
...@@ -1330,6 +1336,7 @@ wmv1_encoder_select="h263_encoder" ...@@ -1330,6 +1336,7 @@ wmv1_encoder_select="h263_encoder"
wmv2_decoder_select="h263_decoder" wmv2_decoder_select="h263_decoder"
wmv2_encoder_select="h263_encoder" wmv2_encoder_select="h263_encoder"
wmv3_decoder_select="vc1_decoder" wmv3_decoder_select="vc1_decoder"
wmv3_crystalhd_decoder_select="crystalhd"
wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel" wmv3_dxva2_hwaccel_select="vc1_dxva2_hwaccel"
wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel" wmv3_vaapi_hwaccel_select="vc1_vaapi_hwaccel"
wmv3_vdpau_decoder_select="vc1_vdpau_decoder" wmv3_vdpau_decoder_select="vc1_vdpau_decoder"
...@@ -1338,6 +1345,7 @@ zlib_encoder_select="zlib" ...@@ -1338,6 +1345,7 @@ zlib_encoder_select="zlib"
zmbv_decoder_select="zlib" zmbv_decoder_select="zlib"
zmbv_encoder_select="zlib" zmbv_encoder_select="zlib"
crystalhd_deps="libcrystalhd_libcrystalhd_if_h"
vaapi_deps="va_va_h" vaapi_deps="va_va_h"
vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h" vdpau_deps="vdpau_vdpau_h vdpau_vdpau_x11_h"
...@@ -2760,6 +2768,7 @@ check_func_headers windows.h VirtualAlloc ...@@ -2760,6 +2768,7 @@ check_func_headers windows.h VirtualAlloc
check_header conio.h check_header conio.h
check_header dlfcn.h check_header dlfcn.h
check_header dxva2api.h check_header dxva2api.h
check_header libcrystalhd/libcrystalhd_if.h
check_header malloc.h check_header malloc.h
check_header poll.h check_header poll.h
check_header sys/mman.h check_header sys/mman.h
...@@ -2808,6 +2817,7 @@ for thread in $THREADS_LIST; do ...@@ -2808,6 +2817,7 @@ for thread in $THREADS_LIST; do
done done
check_lib math.h sin -lm check_lib math.h sin -lm
disabled crystalhd || check_lib libcrystalhd/libcrystalhd_if.h DtsGetVersion -lcrystalhd
disabled vaapi || check_lib va/va.h vaInitialize -lva disabled vaapi || check_lib va/va.h vaInitialize -lva
check_mathfunc exp2 check_mathfunc exp2
......
...@@ -26,6 +26,7 @@ OBJS = allcodecs.o \ ...@@ -26,6 +26,7 @@ OBJS = allcodecs.o \
# parts needed for many different codecs # parts needed for many different codecs
OBJS-$(CONFIG_AANDCT) += aandcttab.o OBJS-$(CONFIG_AANDCT) += aandcttab.o
OBJS-$(CONFIG_CRYSTALHD) += crystalhd.o
OBJS-$(CONFIG_ENCODERS) += faandct.o jfdctfst.o jfdctint.o OBJS-$(CONFIG_ENCODERS) += faandct.o jfdctfst.o jfdctint.o
OBJS-$(CONFIG_DCT) += dct.o OBJS-$(CONFIG_DCT) += dct.o
OBJS-$(CONFIG_DWT) += dwt.o OBJS-$(CONFIG_DWT) += dwt.o
......
...@@ -116,6 +116,7 @@ void avcodec_register_all(void) ...@@ -116,6 +116,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (H263I, h263i); REGISTER_DECODER (H263I, h263i);
REGISTER_ENCODER (H263P, h263p); REGISTER_ENCODER (H263P, h263p);
REGISTER_DECODER (H264, h264); REGISTER_DECODER (H264, h264);
REGISTER_DECODER (H264_CRYSTALHD, h264_crystalhd);
REGISTER_DECODER (H264_VDPAU, h264_vdpau); REGISTER_DECODER (H264_VDPAU, h264_vdpau);
REGISTER_ENCDEC (HUFFYUV, huffyuv); REGISTER_ENCDEC (HUFFYUV, huffyuv);
REGISTER_DECODER (IDCIN, idcin); REGISTER_DECODER (IDCIN, idcin);
...@@ -141,10 +142,13 @@ void avcodec_register_all(void) ...@@ -141,10 +142,13 @@ void avcodec_register_all(void)
REGISTER_ENCDEC (MPEG1VIDEO, mpeg1video); REGISTER_ENCDEC (MPEG1VIDEO, mpeg1video);
REGISTER_ENCDEC (MPEG2VIDEO, mpeg2video); REGISTER_ENCDEC (MPEG2VIDEO, mpeg2video);
REGISTER_ENCDEC (MPEG4, mpeg4); REGISTER_ENCDEC (MPEG4, mpeg4);
REGISTER_DECODER (MPEG4_CRYSTALHD, mpeg4_crystalhd);
REGISTER_DECODER (MPEG4_VDPAU, mpeg4_vdpau); REGISTER_DECODER (MPEG4_VDPAU, mpeg4_vdpau);
REGISTER_DECODER (MPEGVIDEO, mpegvideo); REGISTER_DECODER (MPEGVIDEO, mpegvideo);
REGISTER_DECODER (MPEG_VDPAU, mpeg_vdpau); REGISTER_DECODER (MPEG_VDPAU, mpeg_vdpau);
REGISTER_DECODER (MPEG1_VDPAU, mpeg1_vdpau); REGISTER_DECODER (MPEG1_VDPAU, mpeg1_vdpau);
REGISTER_DECODER (MPEG2_CRYSTALHD, mpeg2_crystalhd);
REGISTER_DECODER (MSMPEG4_CRYSTALHD, msmpeg4_crystalhd);
REGISTER_ENCDEC (MSMPEG4V1, msmpeg4v1); REGISTER_ENCDEC (MSMPEG4V1, msmpeg4v1);
REGISTER_ENCDEC (MSMPEG4V2, msmpeg4v2); REGISTER_ENCDEC (MSMPEG4V2, msmpeg4v2);
REGISTER_ENCDEC (MSMPEG4V3, msmpeg4v3); REGISTER_ENCDEC (MSMPEG4V3, msmpeg4v3);
...@@ -197,6 +201,7 @@ void avcodec_register_all(void) ...@@ -197,6 +201,7 @@ void avcodec_register_all(void)
REGISTER_DECODER (V210X, v210x); REGISTER_DECODER (V210X, v210x);
REGISTER_DECODER (VB, vb); REGISTER_DECODER (VB, vb);
REGISTER_DECODER (VC1, vc1); REGISTER_DECODER (VC1, vc1);
REGISTER_DECODER (VC1_CRYSTALHD, vc1_crystalhd);
REGISTER_DECODER (VC1_VDPAU, vc1_vdpau); REGISTER_DECODER (VC1_VDPAU, vc1_vdpau);
REGISTER_DECODER (VCR1, vcr1); REGISTER_DECODER (VCR1, vcr1);
REGISTER_DECODER (VMDVIDEO, vmdvideo); REGISTER_DECODER (VMDVIDEO, vmdvideo);
...@@ -211,6 +216,7 @@ void avcodec_register_all(void) ...@@ -211,6 +216,7 @@ void avcodec_register_all(void)
REGISTER_ENCDEC (WMV1, wmv1); REGISTER_ENCDEC (WMV1, wmv1);
REGISTER_ENCDEC (WMV2, wmv2); REGISTER_ENCDEC (WMV2, wmv2);
REGISTER_DECODER (WMV3, wmv3); REGISTER_DECODER (WMV3, wmv3);
REGISTER_DECODER (WMV3_CRYSTALHD, wmv3_crystalhd);
REGISTER_DECODER (WMV3_VDPAU, wmv3_vdpau); REGISTER_DECODER (WMV3_VDPAU, wmv3_vdpau);
REGISTER_DECODER (WNV1, wnv1); REGISTER_DECODER (WNV1, wnv1);
REGISTER_DECODER (XAN_WC3, xan_wc3); REGISTER_DECODER (XAN_WC3, xan_wc3);
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment