diff options
author | wm4 <wm4@nowhere> | 2012-07-30 18:40:46 +0200 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-07-30 22:14:32 +0200 |
commit | 1fde09db6f4cee7347842261234082470dd3a2ca (patch) | |
tree | c05bf64b1b397a62e6f0b9cf295a6f9d0266eed2 | |
parent | 17b69493b70413326c95c3c552009626809b45ec (diff) | |
download | mpv-1fde09db6f4cee7347842261234082470dd3a2ca.tar.bz2 mpv-1fde09db6f4cee7347842261234082470dd3a2ca.tar.xz |
Remove some demuxers and decoders
Most of these demuxers and decoders are provided in better form by
libav, while the mplayer builtin ones are essentially unmaintained. The
only legimitate use case for not using the libav ones was working around
libav bugs or bugs related to the way mplayer uses libav. Instead of
trying to keep dead code alive, development effort should go into
improving libav or the mplayer libav glue code.
Note that the libav demuxer have been preferred over the mplayer builtin
ones for a while in mplayer2. There were some exceptions: playing DVDs
with dvdnav or playing network sources. (That's because some stream
modules and network.c requested explicit file formats, such as
DEMUXER_TYPE_MPEG_PS, which mapped to builtin demuxers.) With this
commit, they are switched to use libav. One caveat is that the requested
format is not passed to libavformat, instead we rely on the auto probing
to select the correct libav demuxer (see code in demux_open_stream()).
54 files changed, 34 insertions, 19301 deletions
@@ -88,11 +88,9 @@ SRCS_COMMON-$(LIBMAD) += libmpcodecs/ad_libmad.c SRCS_COMMON-$(LIBNEMESI) += libmpdemux/demux_nemesi.c \ stream/stream_nemesi.c -SRCS_COMMON-$(LIBNUT) += libmpdemux/demux_nut.c SRCS_COMMON-$(LIBPOSTPROC) += libmpcodecs/vf_pp.c SRCS_COMMON-$(LIBSMBCLIENT) += stream/stream_smb.c -SRCS_COMMON-$(LIBTHEORA) += libmpcodecs/vd_theora.c SRCS_COMMON-$(LIVE555) += libmpdemux/demux_rtp.cpp \ libmpdemux/demux_rtp_codec.cpp \ stream/stream_live555.c @@ -103,8 +101,6 @@ SRCS_COMMON-$(COCOA) += libvo/osx_common.c \ SRCS_COMMON-$(MNG) += libmpdemux/demux_mng.c SRCS_COMMON-$(MPG123) += libmpcodecs/ad_mpg123.c -SRCS_COMMON-$(MUSEPACK) += libmpcodecs/ad_mpc.c \ - libmpdemux/demux_mpc.c SRCS_COMMON-$(NATIVE_RTSP) += stream/stream_rtsp.c \ stream/freesdp/common.c \ stream/freesdp/errorlist.c \ @@ -148,7 +144,6 @@ SRCS_COMMON-$(RADIO) += stream/stream_radio.c SRCS_COMMON-$(RADIO_CAPTURE) += stream/audio_in.c SRCS_COMMON-$(REAL_CODECS) += libmpcodecs/ad_realaud.c \ libmpcodecs/vd_realvid.c -SRCS_COMMON-$(SPEEX) += libmpcodecs/ad_speex.c SRCS_COMMON-$(STREAM_CACHE) += stream/cache2.c SRCS_COMMON-$(TV) += stream/stream_tv.c stream/tv.c \ @@ -161,8 +156,6 @@ SRCS_COMMON-$(TV_DSHOW) += stream/tvi_dshow.c \ SRCS_COMMON-$(TV_V4L1) += stream/tvi_v4l.c stream/audio_in.c SRCS_COMMON-$(TV_V4L2) += stream/tvi_v4l2.c stream/audio_in.c SRCS_COMMON-$(VCD) += stream/stream_vcd.c -SRCS_COMMON-$(VORBIS) += libmpcodecs/ad_libvorbis.c \ - libmpdemux/demux_ogg.c SRCS_COMMON-$(VSTREAM) += stream/stream_vstream.c SRCS_QTX_EMULATION += loader/wrapper.S SRCS_COMMON-$(QTX_EMULATION) += $(SRCS_QTX_EMULATION) @@ -181,7 +174,6 @@ SRCS_COMMON-$(WIN32_EMULATION) += $(SRCS_WIN32_EMULATION) SRCS_COMMON-$(WIN32DLL) += libmpcodecs/ad_acm.c \ libmpcodecs/ad_dmo.c \ libmpcodecs/ad_dshow.c \ - libmpcodecs/ad_twin.c \ libmpcodecs/vd_dmo.c \ libmpcodecs/vd_dshow.c \ libmpcodecs/vd_vfw.c \ @@ -207,7 +199,6 @@ SRCS_COMMON-$(WIN32DLL) += libmpcodecs/ad_acm.c \ loader/dmo/dmo_guids.c \ SRCS_COMMON-$(XANIM_CODECS) += libmpcodecs/vd_xanim.c -SRCS_COMMON-$(XVID4) += libmpcodecs/vd_xvid4.c SRCS_COMMON-$(DUMMY_OSD) += sub/osd_dummy.c SRCS_COMMON-$(LIBASS_OSD) += sub/osd_libass.c @@ -262,7 +253,6 @@ SRCS_COMMON = asxparser.c \ libaf/window.c \ libmpcodecs/ad.c \ libmpcodecs/ad_alaw.c \ - libmpcodecs/ad_dk3adpcm.c \ libmpcodecs/ad_dvdpcm.c \ libmpcodecs/ad_ffmpeg.c \ libmpcodecs/ad_hwac3.c \ @@ -280,11 +270,9 @@ SRCS_COMMON = asxparser.c \ libmpcodecs/vd_ffmpeg.c \ libmpcodecs/vd_hmblck.c \ libmpcodecs/vd_lzo.c \ - libmpcodecs/vd_mpegpes.c \ libmpcodecs/vd_mtga.c \ libmpcodecs/vd_null.c \ libmpcodecs/vd_raw.c \ - libmpcodecs/vd_sgi.c \ libmpcodecs/vf.c \ libmpcodecs/vf_1bpp.c \ libmpcodecs/vf_2xsai.c \ @@ -357,48 +345,30 @@ SRCS_COMMON = asxparser.c \ libmpcodecs/vf_yadif.c \ libmpcodecs/vf_yuvcsp.c \ libmpcodecs/vf_yvu9.c \ - libmpdemux/aac_hdr.c \ libmpdemux/asfheader.c \ libmpdemux/aviheader.c \ libmpdemux/aviprint.c \ libmpdemux/demuxer.c \ - libmpdemux/demux_aac.c \ libmpdemux/demux_asf.c \ libmpdemux/demux_audio.c \ libmpdemux/demux_avi.c \ libmpdemux/demux_demuxers.c \ libmpdemux/demux_edl.c \ libmpdemux/demux_cue.c \ - libmpdemux/demux_film.c \ - libmpdemux/demux_fli.c \ libmpdemux/demux_lavf.c \ - libmpdemux/demux_lmlm4.c \ libmpdemux/demux_mf.c \ libmpdemux/demux_mkv.c \ - libmpdemux/demux_mov.c \ - libmpdemux/demux_mpg.c \ - libmpdemux/demux_nsv.c \ - libmpdemux/demux_pva.c \ libmpdemux/demux_rawaudio.c \ libmpdemux/demux_rawvideo.c \ libmpdemux/demux_realaud.c \ libmpdemux/demux_real.c \ - libmpdemux/demux_roq.c \ - libmpdemux/demux_smjpeg.c \ - libmpdemux/demux_ts.c \ - libmpdemux/demux_ty.c \ libmpdemux/demux_viv.c \ - libmpdemux/demux_vqf.c \ - libmpdemux/demux_y4m.c \ libmpdemux/ebml.c \ libmpdemux/extension.c \ libmpdemux/mf.c \ libmpdemux/mp3_hdr.c \ libmpdemux/mp_taglists.c \ - libmpdemux/mpeg_hdr.c \ libmpdemux/mpeg_packetizer.c \ - libmpdemux/parse_es.c \ - libmpdemux/parse_mp4.c \ libmpdemux/video.c \ libmpdemux/yuv4mpeg.c \ libmpdemux/yuv4mpeg_ratio.c \ diff --git a/cfg-mplayer.h b/cfg-mplayer.h index 489419d941..8dc026a00d 100644 --- a/cfg-mplayer.h +++ b/cfg-mplayer.h @@ -30,7 +30,6 @@ #include "config.h" #include "m_config.h" #include "m_option.h" -#include "libmpdemux/demux_ts.h" #include "stream/tv.h" #include "stream/stream_radio.h" #include "libvo/csputils.h" @@ -77,12 +76,6 @@ extern const m_option_t demux_rawaudio_opts[]; extern const m_option_t demux_rawvideo_opts[]; extern const m_option_t cdda_opts[]; -extern int ts_prog; -extern int ts_keep_broken; -extern off_t ts_probe; -extern int audio_substream_id; -extern off_t ps_probe; - extern int sws_flags; extern const char pp_help[]; @@ -465,7 +458,6 @@ const m_option_t common_opts[] = { // select audio/video/subtitle stream OPT_INTRANGE("aid", audio_id, 0, -2, 8190), - {"ausid", &audio_substream_id, CONF_TYPE_INT, 0, 0, 0, NULL}, OPT_INTRANGE("vid", video_id, 0, -2, 8190), OPT_INTRANGE("sid", sub_id, 0, -2, 8190), OPT_FLAG_CONSTANTS("no-sub", sub_id, 0, -1, -2), @@ -566,10 +558,6 @@ const m_option_t common_opts[] = { OPT_FLAG_CONSTANTS("flip", flip, 0, -1, 1), OPT_FLAG_CONSTANTS("no-flip", flip, 0, -1, 0), - {"tsprog", &ts_prog, CONF_TYPE_INT, CONF_RANGE, 0, 65534, NULL}, - {"tsprobe", &ts_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, - {"psprobe", &ps_probe, CONF_TYPE_POSITION, 0, 0, TS_MAX_PROBE_SIZE, NULL}, - {"tskeepbroken", &ts_keep_broken, CONF_TYPE_FLAG, 0, 0, 1, NULL}, // draw by slices or whole frame (useful with libmpeg2/libavcodec) OPT_MAKE_FLAGS("slices", vd_use_slices, 0), @@ -1610,8 +1610,7 @@ static int mp_property_sub(m_option_t *prop, int action, void *arg, if ((d_sub->demuxer->type == DEMUXER_TYPE_MATROSKA || d_sub->demuxer->type == DEMUXER_TYPE_LAVF - || d_sub->demuxer->type == DEMUXER_TYPE_LAVF_PREFERRED - || d_sub->demuxer->type == DEMUXER_TYPE_OGG) + || d_sub->demuxer->type == DEMUXER_TYPE_LAVF_PREFERRED) && d_sub->sh && opts->sub_id >= 0) { struct sh_sub *sh = d_sub->sh; char *lang = sh->lang ? sh->lang : mp_gtext("unknown"); @@ -349,13 +349,7 @@ Codecs: --disable-qtx disable QuickTime codecs support [enabled] --disable-xanim disable XAnim codecs support [enabled] --disable-real disable RealPlayer codecs support [enabled] - --disable-xvid disable Xvid [autodetect] - --disable-libnut disable libnut [autodetect] --enable-libav skip Libav autodetection [autodetect] - --disable-libvorbis disable libvorbis support [autodetect] - --disable-tremor disable Tremor [autodetect if no libvorbis] - --disable-speex disable Speex support [autodetect] - --enable-theora enable OggTheora libraries [autodetect] --enable-faad enable FAAD2 (AAC) [autodetect] --disable-ladspa disable LADSPA plugin support [autodetect] --disable-libbs2b disable libbs2b audio filter support [autodetect] @@ -364,8 +358,6 @@ Codecs: --disable-mad disable libmad (MPEG audio) support [autodetect] --enable-libdca enable libdca support [autodetect] --disable-liba52 disable liba52 [autodetect] - --enable-musepack enable libmpcdec support (deprecated, libavcodec - Musepack decoder is preferred) [disabled] Video output: --enable-gl enable OpenGL video output [autodetect] @@ -492,10 +484,6 @@ _jack=auto _openal=no _libcdio=auto _mad=auto -_tremor=auto -_libvorbis=auto -_speex=auto -_theora=auto _mpg123=auto _liba52=auto _libdca=auto @@ -538,8 +526,6 @@ _winsock2_h=auto _smb=auto _libquvi=auto _joystick=no -_xvid=auto -_libnut=auto _lirc=auto _lircc=auto _apple_remote=auto @@ -568,7 +554,6 @@ _enca=auto _inet6=auto _gethostbyname2=auto _ftp=auto -_musepack=no _vstream=auto _pthreads=auto _w32threads=auto @@ -751,22 +736,12 @@ for ac_option do --disable-mad) _mad=no ;; --enable-libcdio) _libcdio=yes ;; --disable-libcdio) _libcdio=no ;; - --enable-libvorbis) _libvorbis=yes ;; - --disable-libvorbis) _libvorbis=no ;; - --enable-speex) _speex=yes ;; - --disable-speex) _speex=no ;; - --enable-tremor) _tremor=yes ;; - --disable-tremor) _tremor=no ;; - --enable-theora) _theora=yes ;; - --disable-theora) _theora=no ;; --enable-mpg123) _mpg123=yes ;; --disable-mpg123) _mpg123=no ;; --enable-liba52) _liba52=yes ;; --disable-liba52) _liba52=no ;; --enable-libdca) _libdca=yes ;; --disable-libdca) _libdca=no ;; - --enable-musepack) _musepack=yes ;; - --disable-musepack) _musepack=no ;; --enable-faad) _faad=yes ;; --disable-faad) _faad=no ;; --enable-ladspa) _ladspa=yes ;; @@ -835,10 +810,6 @@ for ac_option do --disable-libquvi) _libquvi=no ;; --enable-joystick) _joystick=yes ;; --disable-joystick) _joystick=no ;; - --enable-xvid) _xvid=yes ;; - --disable-xvid) _xvid=no ;; - --enable-libnut) _libnut=yes ;; - --disable-libnut) _libnut=no ;; --enable-libav) ffmpeg=yes ;; --ffmpeg-source-dir=*) _ffmpeg_source=$(echo $ac_option | cut -d '=' -f 2 ) ;; @@ -3396,71 +3367,6 @@ else fi echores "$_mad" -echocheck "OggVorbis support" -if test "$_libvorbis" = auto; then - _libvorbis=no - statement_check vorbis/codec.h 'vorbis_packet_blocksize(0, 0)' -lvorbis -logg $_ld_lm && _libvorbis=yes && _tremor=no -elif test "$_libvorbis" = yes ; then - _tremor=no -fi -if test "$_tremor" = auto; then - _tremor=no - statement_check tremor/ivorbiscodec.h 'vorbis_packet_blocksize(0, 0)' -logg -lvorbisidec $_ld_lm && _tremor=yes -fi -if test "$_tremor" = yes ; then - _vorbis=yes - def_vorbis='#define CONFIG_OGGVORBIS 1' - def_tremor='#define CONFIG_TREMOR 1' - codecmodules="tremor(external) $codecmodules" - res_comment="external Tremor" - extra_ldflags="$extra_ldflags -logg -lvorbisidec" -elif test "$_libvorbis" = yes ; then - _vorbis=yes - def_vorbis='#define CONFIG_OGGVORBIS 1' - codecmodules="libvorbis $codecmodules" - res_comment="libvorbis" - extra_ldflags="$extra_ldflags -lvorbis -logg" -else - _vorbis=no - nocodecmodules="libvorbis $nocodecmodules" -fi -echores "$_vorbis" - -echocheck "libspeex (version >= 1.1 required)" -if test "$_speex" = auto ; then - _speex=no - cat > $TMPC << EOF -#include <stddef.h> -#include <speex/speex.h> -int main(void) { SpeexBits bits; void *dec = NULL; speex_decode_int(dec, &bits, dec); return 0; } -EOF - cc_check -lspeex $_ld_lm && _speex=yes -fi -if test "$_speex" = yes ; then - def_speex='#define CONFIG_SPEEX 1' - extra_ldflags="$extra_ldflags -lspeex" - codecmodules="speex $codecmodules" -else - def_speex='#undef CONFIG_SPEEX' - nocodecmodules="speex $nocodecmodules" -fi -echores "$_speex" - -echocheck "OggTheora support" -if test "$_theora" = auto ; then - _theora=no - if pkg_config_add theora ; then - _theora=yes - fi -fi -if test "$_theora" = yes ; then - def_theora='#define CONFIG_OGGTHEORA 1' - codecmodules="libtheora $codecmodules" -else - def_theora='#undef CONFIG_OGGTHEORA' - nocodecmodules="libtheora $nocodecmodules" -fi -echores "$_theora" # Any version of libmpg123 that knows MPG123_RESYNC_LIMIT shall be fine. # That is, 1.2.0 onwards. Recommened is 1.14 onwards, though. @@ -3514,32 +3420,6 @@ else fi echores "$_libdca" -echocheck "libmpcdec (musepack, version >= 1.2.1 required)" -if test "$_musepack" = yes ; then - _musepack=no - cat > $TMPC << EOF -#include <stddef.h> -#include <mpcdec/mpcdec.h> -int main(void) { - mpc_streaminfo info; - mpc_decoder decoder; - mpc_decoder_set_streaminfo(&decoder, &info); - mpc_decoder_decode_frame(&decoder, NULL, 0, NULL); - return 0; -} -EOF - cc_check -lmpcdec $_ld_lm && _musepack=yes -fi -if test "$_musepack" = yes ; then - def_musepack='#define CONFIG_MUSEPACK 1' - extra_ldflags="$extra_ldflags -lmpcdec" - codecmodules="musepack $codecmodules" -else - def_musepack='#undef CONFIG_MUSEPACK' - nocodecmodules="musepack $nocodecmodules" -fi -echores "$_musepack" - echocheck "FAAD2 support" if test "$_faad" = auto ; then @@ -3819,40 +3699,6 @@ fi echores "$_libdv" -echocheck "Xvid" -if test "$_xvid" = auto ; then - _xvid=no - for _ld_tmp in "-lxvidcore $_ld_lm" "-lxvidcore $_ld_lm $_ld_pthread" ; do - statement_check xvid.h 'xvid_global(0, 0, 0, 0)' $_ld_tmp && - extra_ldflags="$extra_ldflags $_ld_tmp" && _xvid=yes && break - done -fi - -if test "$_xvid" = yes ; then - def_xvid='#define CONFIG_XVID4 1' - codecmodules="xvid $codecmodules" -else - def_xvid='#undef CONFIG_XVID4' - nocodecmodules="xvid $nocodecmodules" -fi -echores "$_xvid" - - -echocheck "libnut" -if test "$_libnut" = auto ; then - _libnut=no - statement_check libnut.h 'nut_context_tt * nut; nut_error(0)' -lnut && _libnut=yes -fi - -if test "$_libnut" = yes ; then - def_libnut='#define CONFIG_LIBNUT 1' - extra_ldflags="$extra_ldflags -lnut" -else - def_libnut='#undef CONFIG_LIBNUT' -fi -echores "$_libnut" - - echocheck "TV interface" if test "$_tv" = yes ; then def_tv='#define CONFIG_TV 1' @@ -4391,7 +4237,6 @@ LIBDVDCSS_INTERNAL = $_libdvdcss_internal LIBMAD = $_mad LIBNEMESI = $_nemesi LCMS2 = $_lcms2 -LIBNUT = $_libnut LIBPOSTPROC = $libpostproc LIBSMBCLIENT = $_smb LIBQUVI = $_libquvi @@ -4402,7 +4247,6 @@ MACOSX_FINDER = $_macosx_finder MD5SUM = $_md5sum MNG = $_mng MPG123 = $_mpg123 -MUSEPACK = $_musepack NATIVE_RTSP = $_native_rtsp NETWORKING = $networking OPENAL = $_openal @@ -4421,7 +4265,6 @@ RADIO=$_radio RADIO_CAPTURE=$_radio_capture REAL_CODECS = $_real RSOUND = $_rsound -SPEEX = $_speex STREAM_CACHE = $_stream_cache TGA = $_tga TV = $_tv @@ -4433,14 +4276,12 @@ TV_V4L2 = $_tv_v4l2 V4L2 = $_v4l2 VCD = $_vcd VDPAU = $_vdpau -VORBIS = $_vorbis VSTREAM = $_vstream WIN32DLL = $_win32dll WIN32_EMULATION = $_win32_emulation X11 = $_x11 XANIM_CODECS = $_xanim XV = $_xv -XVID4 = $_xvid YUV4MPEG = $_yuv4mpeg # FFmpeg @@ -4624,16 +4465,9 @@ $def_libdca $def_libdv $def_mad $def_mpg123 -$def_musepack -$def_speex -$def_theora -$def_tremor -$def_vorbis -$def_xvid $def_zlib $def_libpostproc -$def_libnut /* binary codecs */ diff --git a/etc/codecs.conf b/etc/codecs.conf index 5120406f12..e4618a92d0 100644 --- a/etc/codecs.conf +++ b/etc/codecs.conf @@ -445,13 +445,6 @@ videocodec ffsgi driver ffmpeg dll sgi -videocodec sgi - info "SGI image" - status working - fourcc SGI1 ; SGI1 is an internal MPlayer FOURCC - driver sgi - out BGR24 - videocodec ffsunras info "FFmpeg SUN Rasterfile" status working @@ -562,14 +555,6 @@ videocodec lzo out YV12,I420 out BGR24 flip -videocodec theora - info "Theora (free, reworked VP3)" - status working - fourcc theo,Thra - driver theora - dll libtheora - out YV12,422P,444P - ; prefer native codecs over win32? ; the win32 codecs probably are (better) optimized and support direct ; rendering, so this may be not the best idea... @@ -1099,41 +1084,6 @@ videocodec fflibdirac driver ffmpeg dll libdirac -videocodec xvid - info "Xvid (MPEG-4)" - status working - fourcc FMP4,fmp4 - fourcc DIVX,divx - fourcc xvid,XVID,XviD,XVIX - fourcc DIV1,div1 divx - fourcc MP4S,mp4s ; ISO MPEG-4 Video V1 - fourcc M4S2,m4s2 - fourcc DX50,dx50,BLZ0 DX50 - fourcc mp4v,MP4V - format 0x4 - fourcc UMP4 - fourcc RMP4 - fourcc 3IV2,3iv2 ; 3ivx Delta 4 - fourcc DXGM - fourcc SEDG ; diskless camcorder Samsung Miniket VP-M110 - fourcc SMP4,smp4 ; Samsung SMP4 video codec - fourcc VIDM ; vidm 4.01 codec - fourcc FFDS - fourcc DCOD,MVXM,EM4A,PM4V - fourcc M4T3,DMK2,DIGI,INMC - fourcc EPHV,SN40,WAWV - fourcc uldx,ULDX,VSPX - format 0x10000004 ; mpeg 4 es - fourcc SIPP ; Samsung SHR-6040 - driver xvid - out YV12 - out I420 - out YUY2 - out UYVY - out YVYU - out BGR32,BGR24,BGR16,BGR15 - dll "libxvidcore.a" - ; is divx4vfw stable enough, working everywhere and faster than divxds? videocodec divx4vfw @@ -3860,13 +3810,6 @@ audiocodec ffadpcmimadk3 driver ffmpeg dll adpcm_ima_dk3 -audiocodec dk3adpcm - info "Duck DK3 ADPCM (rogue format number)" - status working - format 0x62 ; This format number was used by Duck Corp. but not officially - ; registered with Microsoft - driver dk3adpcm - audiocodec ffroqaudio info "Id RoQ File Audio" status working @@ -4501,13 +4444,6 @@ audiocodec ffmusepack8 driver ffmpeg dll "mpc8" -audiocodec musepack - info "Musepack audio codec" - status working - fourcc "MPC " - format 0x2b4d - driver mpcdec - audiocodec ffamrnb info "AMR Narrowband" status working @@ -4630,46 +4566,6 @@ audiocodec ffvorbis driver ffmpeg dll "vorbis" -audiocodec vorbis - info "OggVorbis Audio" - status working - comment "OggVorbis driver using libvorbis" - fourcc vrbs - format 0x566F - driver libvorbis - dll "libvorbis" - -audiocodec tremor - info "OggVorbis audio" - status working - comment "fixed-point decoder useful for systems without floating-point unit" - fourcc vrbs - format 0x566F - driver tremor - dll "tremor" - -audiocodec vorbisacm - info "OggVorbis ACM" - status working - comment "OggVorbis driver using vorbis.acm" - format 0x674F ; mode1 - format 0x6750 ; mode2 -; format 0x6751 ; mode3 - format 0x676F ; mode1+ - format 0x6770 ; mode2+ |