aboutsummaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authordavilla <davilla@4pi.com>2013-08-23 13:03:16 -0400
committerdavilla <davilla@4pi.com>2013-08-23 23:57:52 -0400
commit309e01553d42845b412c5036139459c206f8ea4c (patch)
treec9ce25ded75a46cc84bc2bb8844c31f06d52b2d9 /tools
parenta43466346b01e87e08bcc77f6769b6b8ec9295ec (diff)
changed libamplayer includes to support AMLogic Android 4.1/4.2
Diffstat (limited to 'tools')
-rw-r--r--tools/depends/.gitignore1
-rw-r--r--tools/depends/target/libamplayer/Makefile15
-rw-r--r--tools/depends/target/libamplayer/android-4.0-to-4.1.patch524
-rw-r--r--tools/depends/target/libamplayer/android-4.1-to-4.2.patch38
4 files changed, 575 insertions, 3 deletions
diff --git a/tools/depends/.gitignore b/tools/depends/.gitignore
index 3932ef0590..309978019d 100644
--- a/tools/depends/.gitignore
+++ b/tools/depends/.gitignore
@@ -3,6 +3,7 @@
/autom4te.cache/
/**/.gitignore
/**/.installed-*
+/target/*/.patched-*
/target/*/.installed-*
/native/*/.installed-*
/target/*/x86/*
diff --git a/tools/depends/target/libamplayer/Makefile b/tools/depends/target/libamplayer/Makefile
index 7315cd09a0..10cac01ef6 100644
--- a/tools/depends/target/libamplayer/Makefile
+++ b/tools/depends/target/libamplayer/Makefile
@@ -3,14 +3,23 @@ DEPS= ../../Makefile.include Makefile
all: .installed-$(PLATFORM)
-.installed-$(PLATFORM): $(DEPS)
+.patched-$(PLATFORM): $(DEPS)
+ rm -rf $(PLATFORM); mkdir -p $(PLATFORM)
+ cp -rf libamplayer $(PLATFORM)/
+ cd $(PLATFORM); patch -p1 < ../android-4.0-to-4.1.patch
+ cd $(PLATFORM); patch -p1 < ../android-4.1-to-4.2.patch
+ touch $@
+
+.installed-$(PLATFORM): .patched-$(PLATFORM)
mkdir -p $(PREFIX)/include/amcodec
- cp -rf libamplayer/include/amcodec/* $(PREFIX)/include/amcodec/
+ cp -rf $(PLATFORM)/libamplayer/include/amcodec/* $(PREFIX)/include/amcodec/
mkdir -p $(PREFIX)/include/amplayer
- cp -rf libamplayer/include/amplayer/* $(PREFIX)/include/amplayer/
+ cp -rf $(PLATFORM)/libamplayer/include/amplayer/* $(PREFIX)/include/amplayer/
touch $@
clean:
rm -f .installed-$(PLATFORM)
+ rm -f .patched-$(PLATFORM)
distclean:: clean
+ rm -rf $(PLATFORM)
diff --git a/tools/depends/target/libamplayer/android-4.0-to-4.1.patch b/tools/depends/target/libamplayer/android-4.0-to-4.1.patch
new file mode 100644
index 0000000000..2e23f33cf9
--- /dev/null
+++ b/tools/depends/target/libamplayer/android-4.0-to-4.1.patch
@@ -0,0 +1,524 @@
+--- a/libamplayer/include/amcodec/amports/aformat.h
++++ b/libamplayer/include/amcodec/amports/aformat.h
+@@ -7,7 +7,7 @@
+ */
+ /* Copyright (C) 2007-2011, Amlogic Inc.
+ * All right reserved
+-*
++*
+ */
+
+ /*
+@@ -57,14 +57,16 @@ typedef enum {
+ AFORMAT_VORBIS = 18,
+ AFORMAT_AAC_LATM = 19,
+ AFORMAT_APE = 20,
++ AFORMAT_EAC3 = 21,
++ AFORMAT_PCM_WIFIDISPLAY = 22,
+ AFORMAT_UNSUPPORT ,
+- AFORMAT_MAX
++ AFORMAT_MAX
+
+ } aformat_t;
+
+ #define AUDIO_EXTRA_DATA_SIZE (4096)
+ #define IS_AFMT_VALID(afmt) ((afmt > AFORMAT_UNKNOWN) && (afmt < AFORMAT_MAX))
+-
++
+ #define IS_AUIDO_NEED_EXT_INFO(afmt) ((afmt == AFORMAT_ADPCM) \
+ ||(afmt == AFORMAT_WMA) \
+ ||(afmt == AFORMAT_WMAPRO) \
+@@ -75,15 +77,23 @@ typedef enum {
+ ||(afmt == AFORMAT_AMR)\
+ ||(afmt == AFORMAT_ALAC)\
+ ||(afmt == AFORMAT_AC3) \
++ ||(afmt == AFORMAT_EAC3) \
+ ||(afmt == AFORMAT_APE) \
+- ||(afmt == AFORMAT_FLAC) )
++ ||(afmt == AFORMAT_FLAC)\
++ ||(afmt == AFORMAT_PCM_WIFIDISPLAY))
+
+
+ #define IS_AUDIO_NOT_SUPPORT_EXCEED_2CH(afmt) ((afmt == AFORMAT_RAAC) \
+ ||(afmt == AFORMAT_COOK) \
+- ||(afmt == AFORMAT_FLAC))
++ /*||(afmt == AFORMAT_FLAC)*/)
+
+-#define IS_AUIDO_NEED_PREFEED_HEADER(afmt) ((afmt == AFORMAT_VORBIS) )
++#define IS_AUDIO_NOT_SUPPORT_EXCEED_6CH(afmt) ((afmt == AFORMAT_WMAPRO))
++#define IS_AUDIO_NOT_SUPPORT_EXCEED_FS48k(afmt) ((afmt == AFORMAT_WMAPRO))
+
++
++#define IS_AUIDO_NEED_PREFEED_HEADER(afmt) ((afmt == AFORMAT_VORBIS) )
++#define IS_AUDIO_NOT_SUPPORTED_BY_AUDIODSP(afmt,codec) \
++ ((afmt == AFORMAT_AAC_LATM || afmt == AFORMAT_AAC) \
++ &&codec->profile == 0/* FF_PROFILE_AAC_MAIN*/)
+ #endif /* AFORMAT_H */
+
+--- a/libamplayer/include/amcodec/amports/amstream.h
++++ b/libamplayer/include/amcodec/amports/amstream.h
+@@ -83,6 +83,7 @@
+ #define AMSTREAM_IOC_SET_DEC_RESET _IOW(AMSTREAM_IOC_MAGIC, 0x1c, int)
+ #define AMSTREAM_IOC_TS_SKIPBYTE _IOW(AMSTREAM_IOC_MAGIC, 0x1d, int)
+ #define AMSTREAM_IOC_SUB_TYPE _IOW(AMSTREAM_IOC_MAGIC, 0x1e, int)
++#define AMSTREAM_IOC_CLEAR_VIDEO _IOW(AMSTREAM_IOC_MAGIC, 0x1f, int)
+ #define AMSTREAM_IOC_APTS _IOR(AMSTREAM_IOC_MAGIC, 0x40, unsigned long)
+ #define AMSTREAM_IOC_VPTS _IOR(AMSTREAM_IOC_MAGIC, 0x41, unsigned long)
+ #define AMSTREAM_IOC_PCRSCR _IOR(AMSTREAM_IOC_MAGIC, 0x42, unsigned long)
+@@ -96,10 +97,35 @@
+ #define AMSTREAM_IOC_SET_PCRSCR _IOW(AMSTREAM_IOC_MAGIC, 0x4a, unsigned long)
+ #define AMSTREAM_IOC_GET_VIDEO_AXIS _IOR(AMSTREAM_IOC_MAGIC, 0x4b, unsigned long)
+ #define AMSTREAM_IOC_SET_VIDEO_AXIS _IOW(AMSTREAM_IOC_MAGIC, 0x4c, unsigned long)
++#define AMSTREAM_IOC_GET_VIDEO_CROP _IOR(AMSTREAM_IOC_MAGIC, 0x4d, unsigned long)
++#define AMSTREAM_IOC_SET_VIDEO_CROP _IOW(AMSTREAM_IOC_MAGIC, 0x4e, unsigned long)
+ #define AMSTREAM_IOC_SUB_NUM _IOR(AMSTREAM_IOC_MAGIC, 0x50, unsigned long)
+ #define AMSTREAM_IOC_SUB_INFO _IOR(AMSTREAM_IOC_MAGIC, 0x51, unsigned long)
+-
++#define AMSTREAM_IOC_GET_SCREEN_MODE _IOR(AMSTREAM_IOC_MAGIC, 0x58, int)
++#define AMSTREAM_IOC_SET_SCREEN_MODE _IOW(AMSTREAM_IOC_MAGIC, 0x59, int)
+ #define AMSTREAM_IOC_SET_DEMUX _IOW(AMSTREAM_IOC_MAGIC, 0x90, unsigned long)
++#define AMSTREAM_IOC_GET_SYNC_ADISCON_DIFF _IOR(AMSTREAM_IOC_MAGIC, 0x83, unsigned long)
++#define AMSTREAM_IOC_GET_SYNC_VDISCON_DIFF _IOR(AMSTREAM_IOC_MAGIC, 0x84, unsigned long)
++#define AMSTREAM_IOC_SET_SYNC_ADISCON_DIFF _IOW(AMSTREAM_IOC_MAGIC, 0x85, unsigned long)
++#define AMSTREAM_IOC_SET_SYNC_VDISCON_DIFF _IOW(AMSTREAM_IOC_MAGIC, 0x86, unsigned long)
++#define AMSTREAM_IOC_GET_FREERUN_MODE _IOR(AMSTREAM_IOC_MAGIC, 0x87, unsigned long)
++#define AMSTREAM_IOC_SET_FREERUN_MODE _IOW(AMSTREAM_IOC_MAGIC, 0x88, unsigned long)
++#define AMSTREAM_IOC_SET_VSYNC_UPINT _IOW(AMSTREAM_IOC_MAGIC, 0x89, unsigned long)
++
++#define AMSTREAM_IOC_SET_VIDEO_DELAY_LIMIT_MS _IOW(AMSTREAM_IOC_MAGIC, 0xa0, unsigned long)
++#define AMSTREAM_IOC_GET_VIDEO_DELAY_LIMIT_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa1, unsigned long)
++#define AMSTREAM_IOC_SET_AUDIO_DELAY_LIMIT_MS _IOW(AMSTREAM_IOC_MAGIC, 0xa2, unsigned long)
++#define AMSTREAM_IOC_GET_AUDIO_DELAY_LIMIT_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa3, unsigned long)
++#define AMSTREAM_IOC_GET_AUDIO_CUR_DELAY_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa4, unsigned long)
++#define AMSTREAM_IOC_GET_VIDEO_CUR_DELAY_MS _IOR(AMSTREAM_IOC_MAGIC, 0xa5, unsigned long)
++#define AMSTREAM_IOC_GET_AUDIO_AVG_BITRATE_BPS _IOR(AMSTREAM_IOC_MAGIC, 0xa6, unsigned long)
++#define AMSTREAM_IOC_GET_VIDEO_AVG_BITRATE_BPS _IOR(AMSTREAM_IOC_MAGIC, 0xa7, unsigned long)
++
++#define AMAUDIO_IOC_MAGIC 'A'
++#define AMAUDIO_IOC_SET_RESAMPLE_ENA _IOW(AMAUDIO_IOC_MAGIC, 0x19, unsigned long)
++#define AMAUDIO_IOC_GET_RESAMPLE_ENA _IOR(AMAUDIO_IOC_MAGIC, 0x1a, unsigned long)
++#define AMAUDIO_IOC_SET_RESAMPLE_TYPE _IOW(AMAUDIO_IOC_MAGIC, 0x1b, unsigned long)
++#define AMAUDIO_IOC_GET_RESAMPLE_TYPE _IOR(AMAUDIO_IOC_MAGIC, 0x1c, unsigned long)
+
+ struct buf_status {
+ int size;
+--- a/libamplayer/include/amcodec/amports/vformat.h
++++ b/libamplayer/include/amcodec/amports/vformat.h
+@@ -85,6 +85,7 @@ typedef enum {
+ #define CODEC_TAG_MP43 (0x3334504d)
+ #define CODEC_TAG_M4S2 (0x3253344d)
+ #define CODEC_TAG_DIV4 (0x34564944)
++#define CODEC_TAG_divx (0x78766964)
+ #define CODEC_TAG_DIVX (0x58564944)
+ #define CODEC_TAG_DIV5 (0x35564944)
+ #define CODEC_TAG_DX50 (0x30355844)
+@@ -108,5 +109,6 @@ typedef enum {
+ #define CODEC_TAG_WVC1 (0x31435657)
+ #define CODEC_TAG_WMVA (0x41564d57)
+ #define CODEC_TAG_FMP4 (0x34504d46)
++#define CODEC_TAG_FVFW (0x57465646)
+
+ #endif /* VFORMAT_H */
+--- a/libamplayer/include/amcodec/codec.h
++++ b/libamplayer/include/amcodec/codec.h
+@@ -86,8 +86,32 @@ int codec_set_sync_audio_discont(codec_para_t *pcodec, int discontinue);
+ int codec_get_sync_audio_discont(codec_para_t *pcodec);
+ int codec_set_sync_video_discont(codec_para_t *pcodec, int discontinue);
+ int codec_get_sync_video_discont(codec_para_t *pcodec);
+-
++unsigned long codec_get_sync_audio_discont_diff(codec_para_t *pcodec);
++unsigned long codec_get_sync_video_discont_diff(codec_para_t *pcodec);
++int codec_set_sync_audio_discont_diff(codec_para_t *pcodec, unsigned long discontinue_diff);
++int codec_set_sync_video_discont_diff(codec_para_t *pcodec, unsigned long discontinue_diff);
+ int codec_get_sub_num(codec_para_t *pcodec);
+ int codec_get_sub_info(codec_para_t *pcodec, subtitle_info_t *sub_info);
+
++int codec_set_av_threshold(codec_para_t *pcodec, int threshold);
++
++int codec_get_freerun_mode(codec_para_t *pcodec);
++int codec_set_freerun_mode(codec_para_t *pcodec, unsigned int mode);
++
++int codec_init_audio_utils(codec_para_t *pcodec);
++int codec_release_audio_utils(codec_para_t *pcodec);
++int codec_set_audio_resample_ena(codec_para_t *pcodec, unsigned long mode);
++int codec_get_audio_resample_ena(codec_para_t *pcodec);
++int codec_set_audio_resample_type(codec_para_t *pcodec, unsigned long type);
++
++int codec_set_video_delay_limited_ms(codec_para_t *pcodec,int delay_ms);
++int codec_get_video_delay_limited_ms(codec_para_t *pcodec,int *delay_ms);
++int codec_set_audio_delay_limited_ms(codec_para_t *pcodec,int delay_ms);
++int codec_get_audio_delay_limited_ms(codec_para_t *pcodec,int *delay_ms);
++int codec_get_audio_cur_delay_ms(codec_para_t *pcodec,int *delay_ms);
++int codec_get_video_cur_delay_ms(codec_para_t *pcodec,int *delay_ms);
++int codec_get_video_cur_bitrate(codec_para_t *pcodec,int *bitrate);
++int codec_get_audio_cur_bitrate(codec_para_t *pcodec,int *bitrate);
++
++int codec_set_vsync_upint(codec_para_t *pcodec, unsigned int mode);
+ #endif
+--- a/libamplayer/include/amcodec/codec_type.h
++++ b/libamplayer/include/amcodec/codec_type.h
+@@ -7,7 +7,7 @@
+ */
+ /* Copyright (C) 2007-2011, Amlogic Inc.
+ * All right reserved
+-*
++*
+ */
+ #ifndef CODEC_TYPE_H_
+ #define CODEC_TYPE_H_
+@@ -15,6 +15,7 @@
+ #include "amports/amstream.h"
+ #include "amports/vformat.h"
+ #include "amports/aformat.h"
++#include "ppmgr/ppmgr.h"
+
+ typedef int CODEC_HANDLE;
+
+@@ -37,7 +38,7 @@ typedef struct {
+ unsigned int status; ///< status of video stream
+ unsigned int ratio; ///< aspect ratio of video source
+ void * param; ///< other parameters for video decoder
+- unsigned long long ratio64; ///< aspect ratio of video source
++ unsigned long long ratio64; ///< aspect ratio of video source
+ } dec_sysinfo_t;
+
+ typedef struct {
+@@ -48,7 +49,7 @@ typedef struct {
+ int codec_id; ///< codec format id
+ int block_align; ///< audio block align from ffmpeg
+ int extradata_size; ///< extra data size
+- char extradata[AUDIO_EXTRA_DATA_SIZE]; ///< extra data information for decoder
++ char extradata[AUDIO_EXTRA_DATA_SIZE];; ///< extra data information for decoder
+ } audio_info_t;
+
+ typedef struct {
+@@ -56,10 +57,14 @@ typedef struct {
+ CODEC_HANDLE cntl_handle; ///< video control device handler
+ CODEC_HANDLE sub_handle; ///< subtile device handler
+ stream_type_t stream_type; ///< stream type(es, ps, rm, ts)
+- unsigned int has_video:1; ///< stream has video(1) or not(0)
+- unsigned int has_audio:1; ///< stream has audio(1) or not(0)
+- unsigned int has_sub:1; ///< stream has subtitle(1) or not(0)
+- unsigned int noblock:1; ///< codec device is NONBLOCK(1) or not(0)
++unsigned int has_video:
++ 1; ///< stream has video(1) or not(0)
++unsigned int has_audio:
++ 1; ///< stream has audio(1) or not(0)
++unsigned int has_sub:
++ 1; ///< stream has subtitle(1) or not(0)
++unsigned int noblock:
++ 1; ///< codec device is NONBLOCK(1) or not(0)
+ int video_type; ///< stream video type(H264, VC1...)
+ int audio_type; ///< stream audio type(PCM, WMA...)
+ int sub_type; ///< stream subtitle type(TXT, SSA...)
+@@ -73,17 +78,20 @@ typedef struct {
+ dec_sysinfo_t am_sysinfo; ///< system information for video
+ audio_info_t audio_info; ///< audio information pass to audiodsp
+ int packet_size; ///< data size per packet
+- int avsync_threshold; ///<for adec in ms>
+- void * adec_priv; ///<for adec>
++ int avsync_threshold; ///<for adec in ms>
++ void * adec_priv; ///<for adec>
++ int SessionID;
++ int dspdec_not_supported;//check some profile that audiodsp decoder can not support,we switch to arm decoder
++ int switch_audio_flag; //<switch audio flag switching(1) else(0)
+ } codec_para_t;
+
+-typedef struct
++typedef struct
+ {
+- signed char id;
++ signed char id;
+ unsigned char width;
+ unsigned char height;
+- unsigned char type;
+-} subtitle_info_t;
++ unsigned char type;
++}subtitle_info_t;
+ #define MAX_SUB_NUM (32)
+
+ #define IS_VALID_PID(t) (t>=0 && t<=0x1fff)
+@@ -95,10 +103,13 @@ typedef struct
+ typedef struct {
+ int sample_rate; ///< audio stream sample rate
+ int channels; ///< audio stream channels
+- int format; ///< codec format id
+- int handle; ///< codec device handler
++ int format; ///< codec format id
++ int handle; ///< codec device handler
+ int extradata_size; ///< extra data size
+ char extradata[AUDIO_EXTRA_DATA_SIZE];
++ int SessionID;
++ int dspdec_not_supported;//check some profile that audiodsp decoder can not support,we switch to arm decoder
++ int droppcm_flag; // drop pcm flag, if switch audio (1)
+ } arm_audio_info;
+
+ //audio decoder type, default arc
+new file mode 100644
+--- /dev/null
++++ b/libamplayer/include/amcodec/ppmgr/ppmgr.h
+@@ -0,0 +1,24 @@
++/**
++* @file ppmgr.h
++* @brief Porting from ppmgr driver for codec ioctl commands
++* @author Tim Yao <timyao@amlogic.com>
++* @version 1.0.0
++* @date 2011-02-24
++*/
++/* Copyright (C) 2007-2011, Amlogic Inc.
++* All right reserved
++*
++*/
++
++#ifndef PPMGR_H
++#define PPMGR_H
++
++#define PPMGR_IOC_MAGIC 'P'
++//#define PPMGR_IOC_2OSD0 _IOW(PPMGR_IOC_MAGIC, 0x00, unsigned int)
++//#define PPMGR_IOC_ENABLE_PP _IOW(PPMGR_IOC_MAGIC,0X01,unsigned int)
++//#define PPMGR_IOC_CONFIG_FRAME _IOW(PPMGR_IOC_MAGIC,0X02,unsigned int)
++#define PPMGR_IOC_GET_ANGLE _IOR(PPMGR_IOC_MAGIC,0X03,unsigned long)
++#define PPMGR_IOC_SET_ANGLE _IOW(PPMGR_IOC_MAGIC,0X04,unsigned long)
++
++#endif /* PPMGR_H */
++
+--- a/libamplayer/include/amplayer/message.h
++++ b/libamplayer/include/amplayer/message.h
+@@ -1,7 +1,7 @@
+ #ifndef PLAYER_MESSAGE_H
+ #define PLAYER_MESSAGE_H
+
+-#define MESSAGE_MAX 4
++#define MESSAGE_MAX 8
+
+ #define CTRL_CMD_RESPONSE (0xffff)
+
+@@ -41,6 +41,7 @@ typedef enum {
+ CMD_SET_STEREO = (1 << 14),
+ CMD_EN_AUTOBUF = (1 << 15),
+ CMD_SET_AUTOBUF_LEV = (1 << 16),
++ CMD_SET_FREERUN_MODE = (1 << 17),
+ CMD_MODE_MAX = (1 << 31),
+ } ctrl_mode_t;
+
+@@ -85,6 +86,5 @@ typedef struct {
+ int message_free(player_cmd_t * cmd);
+ player_cmd_t * message_alloc(void);
+ int cmd2str(player_cmd_t *cmd, char *buf);
+-
+ #endif
+
+--- a/libamplayer/include/amplayer/player.h
++++ b/libamplayer/include/amplayer/player.h
+@@ -6,7 +6,7 @@
+ #include <player_type.h>
+ #include <player_error.h>
+ #include <message.h>
+-
++#include <player_dump.h>
+
+ #ifdef __cplusplus
+ extern "C" {
+@@ -52,7 +52,8 @@ int audio_right_mono(int pid);
+ int audio_stereo(int pid);
+ int audio_set_spectrum_switch(int pid,int isStart,int interval);
+ int player_register_update_callback(callback_t *cb,update_state_fun_t up_fn,int interval_s);
+-char *player_status2str(player_status status);
++char *player_status2str(player_status status);
++char *player_value2str(char *key, int value);
+ int player_cache_system_init(int enable,const char*dir,int max_size,int block_size);
+
+ //control interface
+new file mode 100644
+--- /dev/null
++++ b/libamplayer/include/amplayer/player_ctrl.h
+@@ -0,0 +1,4 @@
++/*
++Just for old code compatible,no this header file may get compare error.
++we can add more player controls to here later.
++*/
+new file mode 100644
+--- /dev/null
++++ b/libamplayer/include/amplayer/player_dump.h
+@@ -0,0 +1,14 @@
++#ifndef _PLAYER_DUMP_H_
++#define _PLAYER_DUMP_H_
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++int player_dump_playinfo(int pid, int fd);
++int player_dump_bufferinfo(int pid, int fd);
++int player_dump_tsyncinfo(int pid, int fd);
++#ifdef __cplusplus
++}
++#endif
++#endif
++
+--- a/libamplayer/include/amplayer/player_set_sys.h
++++ b/libamplayer/include/amplayer/player_set_sys.h
+@@ -40,6 +40,7 @@ int set_black_policy(int blackout);
+ int get_black_policy();
+ int get_karaok_flag();
+ int set_tsync_enable(int enable);
++int get_tsync_enable(void);
+ int set_tsync_discontinue(int enable);
+ int get_pts_discontinue();
+ int set_fb0_blank(int blank);
+@@ -61,8 +62,6 @@ int set_fb1_scale_height(int height);
+ int check_audiodsp_fatal_err(void);
+ int set_stb_source_hiu(void);
+ int set_stb_demux_source_hiu(void);
+-int get_stb_demux_source(char *strval, int size);
+-int get_stb_source(char *strval, int size);
+
+ int set_subtitle_enable(int num);
+ int set_subtitle_curr(int num);
+@@ -72,6 +71,8 @@ int check_file_same(char *filename2);
+ int set_amutils_enable(int isOn);
+ int set_amutils_cmd(const char* cmd);
+ int get_amutils_cmd(char* cmd);
++int check_audio_output();
++
+
+ #ifdef __cplusplus
+ }
+--- a/libamplayer/include/amplayer/player_thumbnail.h
++++ b/libamplayer/include/amplayer/player_thumbnail.h
+@@ -19,6 +19,7 @@ int thumbnail_get_key_data(void* handle, char* key, const void** data, int* data
+ void thumbnail_get_video_rotation(void *handle, int* rotation);
+ int thumbnail_decoder_close(void *handle);
+ void thumbnail_res_free(void* handle);
++int thumbnail_get_tracks_info(void *handle, int *vtracks,int *atracks,int *stracks);
+
+ #ifdef __cplusplus
+ }
+--- a/libamplayer/include/amplayer/player_type.h
++++ b/libamplayer/include/amplayer/player_type.h
+@@ -5,14 +5,7 @@
+ #include <stream_format.h>
+
+ #define MSG_SIZE 64
+-#if defined(HAS_AMLPLAYER_CHAPTERS)
+-#define MAX_CHAPTERS 64
+-#endif
+-#if defined(HAS_AMLPLAYER_VIDEO_STREAMS10)
+ #define MAX_VIDEO_STREAMS 10
+-#else
+-#define MAX_VIDEO_STREAMS 8
+-#endif
+ #define MAX_AUDIO_STREAMS 8
+ #define MAX_SUB_INTERNAL 8
+ #define MAX_SUB_EXTERNAL 24
+@@ -33,7 +26,7 @@ typedef enum
+ PLAYER_INITING = 0x10001,
+ PLAYER_TYPE_REDY = 0x10002,
+ PLAYER_INITOK = 0x10003,
+-
++
+ /******************************
+ * 0x2000x:
+ * playback status
+@@ -51,7 +44,7 @@ typedef enum
+
+ PLAYER_PLAY_NEXT = 0x20009,
+ PLAYER_BUFFER_OK = 0x2000a,
+- PLAYER_FOUND_SUB = 0x2000b,
++ PLAYER_FOUND_SUB = 0x2000b,
+
+ /******************************
+ * 0x3000x:
+@@ -120,9 +113,6 @@ typedef struct
+ aformat_t aformat;
+ int duration;
+ audio_tag_info *audio_tag;
+-#if defined(HAS_AMLPLAYER_AUDIO_LANG)
+- char audio_language[4];
+-#endif
+ }maudio_info_t;
+
+ typedef struct
+@@ -157,33 +147,15 @@ typedef struct
+ int cur_sub_index;
+ int seekable;
+ int drm_check;
+-#if defined(HAS_AMLPLAYER_VIDEO_STREAMS10)
+- int t1;
+- int t2;
+-#endif
+-#if defined(HAS_AMLPLAYER_CHAPTERS)
+- int has_chapter;
+- int total_chapter_num;
+-#endif
++ int adif_file_flag;
+ }mstream_info_t;
+
+-#if defined(HAS_AMLPLAYER_CHAPTERS)
+-typedef struct
+-{
+- char *name;
+- int64_t seekto_ms;
+-} mchapter_info_t;
+-#endif
+-
+ typedef struct
+ {
+ mstream_info_t stream_info;
+ mvideo_info_t *video_info[MAX_VIDEO_STREAMS];
+ maudio_info_t *audio_info[MAX_AUDIO_STREAMS];
+ msub_info_t *sub_info[MAX_SUB_STREAMS];
+-#if defined(HAS_AMLPLAYER_CHAPTERS)
+- mchapter_info_t *chapter_info[MAX_CHAPTERS];
+-#endif
+ }media_info_t;
+
+ typedef struct player_info
+@@ -210,6 +182,7 @@ typedef struct player_info
+ int64_t bufed_pos;
+ int bufed_time;/* Second*/
+ unsigned int drm_rental;
++ int64_t download_speed; //download speed
+ }player_info_t;
+
+ typedef struct pid_info
+@@ -252,13 +225,14 @@ typedef struct
+ int vbufsize;
+ int vdatasize;
+ int abufused;
+- int abufsize;
+- int adatasize;
++ int abufsize;
++ int adatasize;
+ int sbufused;
+- int sbufsize;
+- int sdatasize;
++ int sbufsize;
++ int sdatasize;
+ }hwbufstats_t;
+
++
+ typedef struct
+ {
+ update_state_fun_t update_statue_callback;
+@@ -275,7 +249,7 @@ typedef struct
+ int video_index; //video track, no assigned, please set to -1
+ int audio_index; //audio track, no assigned, please set to -1
+ int sub_index; //subtitle track, no assigned, please set to -1
+- float t_pos; //start postion, use second as unit
++ float t_pos; //start postion, use second as unit
+ int read_max_cnt; //read retry maxium counts, if exceed it, return error
+ int avsync_threshold; //for adec av sync threshold in ms
+ union
+--- a/libamplayer/include/amplayer/stream_format.h
++++ b/libamplayer/include/amplayer/stream_format.h
+@@ -37,7 +37,9 @@ typedef enum
+ ASF_FILE = 17,
+ STREAM_FILE = 18,
+ APE_FILE = 19,
+- FILE_MAX = 20,
++ AMR_FILE = 20,
++ AVS_FILE = 21,
++ FILE_MAX = 22,
+ }pfile_type;
+
+ #endif
diff --git a/tools/depends/target/libamplayer/android-4.1-to-4.2.patch b/tools/depends/target/libamplayer/android-4.1-to-4.2.patch
new file mode 100644
index 0000000000..b79a310e03
--- /dev/null
+++ b/tools/depends/target/libamplayer/android-4.1-to-4.2.patch
@@ -0,0 +1,38 @@
+--- a/libamplayer/include/amcodec/codec_type.h
++++ b/libamplayer/include/amcodec/codec_type.h
+@@ -56,6 +56,7 @@ typedef struct {
+ CODEC_HANDLE handle; ///< codec device handler
+ CODEC_HANDLE cntl_handle; ///< video control device handler
+ CODEC_HANDLE sub_handle; ///< subtile device handler
++ CODEC_HANDLE audio_utils_handle; ///< audio utils handler
+ stream_type_t stream_type; ///< stream type(es, ps, rm, ts)
+ unsigned int has_video:
+ 1; ///< stream has video(1) or not(0)
+--- a/libamplayer/include/amplayer/player_type.h
++++ b/libamplayer/include/amplayer/player_type.h
+@@ -204,7 +204,7 @@ typedef struct player_file_type
+ #define STATE_PRE(sta) (sta>>16)
+ #define PLAYER_THREAD_IS_INITING(sta) (STATE_PRE(sta)==0x1)
+ #define PLAYER_THREAD_IS_RUNNING(sta) (STATE_PRE(sta)==0x2)
+-#define PLAYER_THREAD_IS_STOPPED(sta) (STATE_PRE(sta)==0x3)
++#define PLAYER_THREAD_IS_STOPPED(sta) (sta==PLAYER_EXIT)
+
+ typedef int (*update_state_fun_t)(int pid,player_info_t *) ;
+ typedef int (*notify_callback)(int pid,int msg,unsigned long ext1,unsigned long ext2);
+@@ -217,6 +217,7 @@ typedef enum
+ PLAYER_EVENTS_FILE_TYPE, ///<ext1=player_file_type_t*,ext2=0
+ PLAYER_EVENTS_HTTP_WV, ///<(need use DRMExtractor),ext1=0, ext2=0
+ PLAYER_EVENTS_HWBUF_DATA_SIZE_CHANGED, ///<(need use DRMExtractor),ext1=0, ext2=0
++ PLAYER_EVENTS_NOT_SUPPORT_SEEKABLE, //not support seek;
+ }player_events;
+
+ typedef struct
+@@ -284,6 +285,7 @@ typedef struct
+ int buffing_starttime_s; //for rest buffing_middle,buffering seconds data to start.
+ int buffing_force_delay_s;
+ int lowbuffermode_flag;
++ int lowbuffermode_limited_ms;
+ int reserved [56]; //reserved for furthur used,some one add more ,can del reserved num
+ int SessionID;
+ }play_control_t;
+