Android 机顶盒Mobx 对接xbmc

例如Amlogci方案:

ItemS801S802S805S812
CPUQuad Cortex-A9r4Quad Cortex-A9r4Quad Cortex-A5Quad Cortex-A9r4
Max CPU Freq2.0G Hz2.0G Hz1.5G Hz2.0G Hz
GPUOcto Mali-450Octo Mali-450Quad Mali-450Octo Mali-450
SecurityTrustZone & TVPTrustZone & TVPTrustZone & TVPTrustZone & TVP
MemoryDDR3/3LDual DDR3/3LDDR3/3LDual DDR3/3L
Video decoding1080P4K2K1080P H2654K2K H265
Video Encoding1080P H2641080P H2641080P H2641080P H264
HDMI-Tx1080P4K2K1080P4K2K
Ethernet10/100M10/100M10/100/1000M10/100/1000M
AV outputCVBSCVBSCVBSCVBS
DTV supportTS inTS inTS inTS in
IP LicenseDolby,DTS,SRSDolby,DTS,SRSDolby,DTS,SRSDolby,DTS,SRS

一、Get the code From amlogic

$ cd ~/<your-android-repo-dir>/
$ repo init -u ssh://git@openlinux.amlogic.com/kitkat/platform/manifest.git -b
kk-amlogic --repo-url=ssh://git@openlinux.amlogic.com/repo.git
$ repo sync
$ repo init -m openlinux_kk-amlogic_20140823.xml
$ repo sync

Mbox:

· K200 (S801/S802), including:

K200-A: SPI + NAND + USB WIFI 8188
K200-B : SPI + EMMC + SDIOWIFI AP6330

· N200(S812)

EMMC + SDIO WIFI 6234,DDR 2GB

· M200(S805)

PMU1218,EMMC,WIFI AP6335, DDR 1GB

· M201(S805)

No PMU,NAND,WIFI AP6210, DDR 1GB

· M202(S805 dongle)

No PMU,NAND,WIFI 8723BS, DDR 512M

二、How to build code

  1. Mbox k200
(1)k200-A-1G
. build/envsetup.sh
lunch k200-user
export BOARD_REVISION=a
make otapackage
(2)k200-A-2G
. build/envsetup.sh
lunch k200-user
export BOARD_REVISION=a_2G
make otapackage
(3)K200-B-1G
. build/envsetup.sh
lunch k200-user
export BOARD_REVISION=b
make otapackage
(4)k200-B-2G
. build/envsetup.sh
lunch k200-user
export BOARD_REVISION=b_2G
make otapackage
uboot config: m8_k200_v1_config
(if need compile 2G uboot, you must change the“#define CONFIG_DDR_SIZE
1024”to “#define CONFIG_DDR_SIZE 2048” of “m8_k200_v1.h”)
  1. Mbox N200
. build/envsetup.sh
lunch n200-user
make otapackage
uboot config: m8m2_n200_v1_config
  1. Mbox M200
. build/envsetup.sh
lunch m200-user
make otapackage
uboot config: m8b_m200_1G_config
  1. Mbox M201
. build/envsetup.sh
lunch m201-user
make otapackage
uboot config:m8b_m201_1G_config
  1. Mbox M202
. build/envsetup.sh
lunch m202-user
make otapackage
uboot config: m8b_m202_512M_config

三、How to Upgrade

There are 4 ways for update.
· Upgrade with SD card

Follow instructions below ONLY IF your device is already running a version of Openlinux
based Android 4.4 reference firmware release.
4 steps:

1) Copy recovery.img, update zip file (e.g. k100-ota-20140127.zip) to SD card.
2) Copy the factory_update_param.aml to SD card;
3) Power off.
4) Press VOL- and POWER key at same time, then it will upgrade the code.

· Upgrade with USB burn tool
· Update with OTA
· Use bootcard PC tool to make a boot TF card by bin file aml_upgrade_package.img

2 steps:

1)Insert TF card then Power off
2)Press VOL- and POWER key at same time, then it will upgrade the code.

2. Key Module Integration

This section introduces the key modules that are supported by the current Openlinux release and reference document regarding how to integrate the modules. The user can get all the documents from your Sales contact window.

2.1. DRM Support

The current Openlinux release supports the three major DRMs: Widevine level1, Level3, PlayReady, Marlin.
Reference documents:

DocumentDescription
Amlogic WideVine Integration User Guide v0.1Widevine L1, L3 integration
Amlogic PlayReady Integration User Guide v0.2PlayReady integration
Amlogic Marlin Integration User Guide v0.1Marlin integration

2.2. Secure OS support

The secure OS boots before the normal world to set up secure perimeters. It can run from the secure partitioned internal SRAM or DDR memory and by secure register settings, only the secure OS, running in secure world has the access to its own resources, such as the memory and the EFUSE storage, or decrypted audio and video data,even the decoded video frame pixel data.
The implementation of the secure OS is based on ARM TrustZone security extensions. The service tasklet inside the secure OS can handle the crypto operations, such as the decryption of the Audio and Video data, with the final asset key exist in the secure world only and is never be exposed to the normal world.
Reference documents:

DocumentDescription
Amlogic Security Architecture Guide & TVP V0.5Introduction of Amlogic Security Architecture

2.3. CM, DNLP and NR Support

There are some Video post processing control in Amlogic chip can improve the display quality and effect include
CM, DNLP, NR:
DNLP (Dynamic Non-Linear Processing): Dynamically adjust the contrast of the screen and increase the bright and dark contrast of the screen
CM (color management): Color management module, you can adjust of hue, saturation, color and brightness according to the requirements.
NR(noise reduction): Noise reduction module to reduce noise in the picture
DNLP

Step1: Enable VDIN module before video playback:
echo 1 > /sys/module/di/parameters/mpeg2vdin_en
Step2: Enable or Disable DNLP

Enable DNLP:

echo 1 > /sys/module/am_vecm/parameters/dnlp_en

Disable DNLP:

echo 0 > /sys/module/am_vecm/parameters/dnlp_en
Amlogic Openlinux Release Notes
Amlogic Confidential 10

CM

Step 1: Enable or Disable CM
Enable CM:
echo 1 > /sys/module/am_vecm/parameters/cm_en

Disable CM:

echo 0 > /sys/module/am_vecm/parameters/cm_en
Step 2: Change the CMtable(val:1=level1;2=level2;4=enhancement)
echo val > /sys/module/am_vecm/parameters/cm_level

NR

Step 1: Enable or Disable NR

Enable NR:

echo 1 > /sys/module/di/parameters/nr2_en

Disable NR:

echo 0 > /sys/module/di/parameters/nr2_en

2.4. SDHC Controller Support

The SD Host Controller (SDHC) has the following features:

1) Support SD Spec 3.01, eMMC Spec 4.5x , support SDSC, SDHC, SDXC memory card
2) Provide UHS-I both 3.3V and 1.8V signaling, and support DS, HS, SDR12, SDR25, SDR50, SDR104 speed
mode
3) Has AHB slave and master interface , support DMA and PIOmode
4) Back compatible to SD Spec 2.0 and 1.0
5) Only support SD mode, do not support SPI mode
6) Support 1-bit, 4-bit, 8-bit bus width mode(8-bit bus width only for MMC)

Reference documents:

DocumentDescription
Amlogic SDHC controller User Guide v0 1How to configure SDHC controller

2.5. Dolby DD, DD+/DTS Support

Amlogic supports Dolby DD, DD+, DS1 and DTS DTS-HD/Digital Out/DTS Broadcast with certified SoCs.Note: The certified SoCs can only be used for Dolby/DTS licensees.

Reference documents:

DocumentDescription
Amlogic Dolby DD DD+ DTS User Guide v0.1How to integrate DD, DD+, DTS

2.6. Supported Video/Audio Formats

All the mainstream video and audio formats are supported.
Reference documents:

DocumentDescription
Multimedia CODEC Benchmark M801 S801 20131010M801/S801 Multimedia support list
Multimedia CODEC Benchmark M802 S802 20131010M802/S802 Multimedia support list
Multimedia CODEC Benchmark M805 M806 S805 20140623M805/M806/S805 Multimedia support list
Multimedia CODEC Benchmark M812 S812 20140807M812/S812 Multimedia support list

2.7. Streaming Protocols Integration

This release version supports the following streaming Protocols:
UDP:

Support Unicast&Multicast(IGMP);
Support IPV6 Muticast; need set this prop : media.libplayer.ipv4only =0
Support streammuxed by ts;
Support all a/v codec muxted to mpegts

;
RTP:

Over udp or udp-muticast;
Support ts(all codec muxed by ts);
Support es(h264/mpeg4/mpeg2/aac/mp3/ac3)

rtsp:

The Real Time Streaming Protocol (RTSP) is a network control protocol designed for use in entertainment and
communications systems to control streaming media servers. The protocol is used for establishing and
controlling media sessions between end points. Clients of media servers issue VCR-style commands, such as
play and pause, to facilitate real-time control of playback of media files fromthe server.
Support data steam over UDP&TCP;
Support data format same as RTP:

mms:

Microsoft Media Server (MMS), a Microsoft proprietary network-streaming protocol, serves to transfer unicast data in Windows Media Services (previously called NetShow Services). MMS can be transported via UDP or TCP. The MMS default port is UDP/TCP 1755 Support mms media over http,or named mmsh;

RTMP:

Real Time Messaging Protocol, a multimedia streaming and remote procedurecall protocol primarily used in
Adobe Flash

http:

Media steam over http;
Support feature:https,gzip,keep-alive;

mpeg-dash:

Dynamic Adaptive Streaming over HTTP (DASH), also known as MPEG-DASH, is an adaptive bitrate streaming
technique that enables high quality streaming of media content over the Internet delivered from conventional
HTTP web servers.

hls:

HTTP Live Streaming (also known as HLS/M3U8) is an HTTP-based media streaming communications protocol
implemented by Apple Inc.
Supported feature:
http, https, AES, auto adaption, VOD, Livemode;
seek in segment,
ts,mp4,flv

2.8. WIFI/BT Integration

Amlogic platform supports the complete WIFI/BT solutions including 802.11ac/a/b/g/n, BT 2.1/4.0, NFC and GPS. The specific qualified parts can be found in Amlogic Tablet/MBOX QPL documents.

Reference documents:

DocumentDescription
Amlogic USB WiFi User Guide v0.1How to config USB WiFi
晶晨半导体SDIO WIFI 用户指南v0.1How to config SDIO WiFi

2.9. Ethernet/PPPOE integration

Amlogic S8 series SoC has built-in Ethernet RMII MAC interface to reduce BOM cost and S805/S812 can also support RGMII interface. Several Ethernet PHY including both RMII and RGMII has been verified. By checking with ATKKPing and IPERF test tools, the reference design can meet with IEEE802.3 standard and the electrical specifications.

The Point-to-Point Protocol over Ethernet (PPPoE) is a network protocol for encapsulating PPP frames inside Ethernet frames.

PPPoE relies on two widely accepted standards: PPP and Ethernet. PPPoE is a specification for connecting the
users on an Ethernet to the Internet through a common broadband medium, such as a single DSL line, wireless
device or cable modem. All the users over the Ethernet share a common connection, so the Ethernet principles
supporting multiple users in a LAN combine with the principles of PPP, which apply to serial connections.

PPP can provide connection authentication, transmission encryption, and compression.
Steps to connect

1) Get Username and password fromyour Internet service provider (ISP):
2) Make sure that the DSL or cable modem is on and connected to the Internet and that the Ethernet cable is connected to the Box.
3) Type your username and password in PPPoE Settings.
4) Click Apply Now.
5) Open a web browser or other Internet (TCP/IP) application to verify your connection.
diff --git a/tools/depends/target/libamplayer/Makefile b/tools/depends/target/libamplayer/Makefile
old mode 100644
new mode 100755
index 10cac01..c0b7db0
--- a/tools/depends/target/libamplayer/Makefile
+++ b/tools/depends/target/libamplayer/Makefile
@@ -6,8 +6,6 @@ all: .installed-$(PLATFORM)
 .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)
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/aformat.h b/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/aformat.h
old mode 100644
new mode 100755
index 25cb852..69dfc89
--- a/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/aformat.h
+++ b/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/aformat.h
@@ -57,6 +57,10 @@ typedef enum {
     AFORMAT_VORBIS    = 18,
     AFORMAT_AAC_LATM   = 19,
     AFORMAT_APE   = 20,
+    AFORMAT_EAC3   = 21,
+    AFORMAT_PCM_WIFIDISPLAY = 22,
+    AFORMAT_DRA    = 23,
+    AFORMAT_SIPR   =24,
     AFORMAT_UNSUPPORT ,
     AFORMAT_MAX    
 
@@ -75,15 +79,27 @@ 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) \
+								 ||(afmt == AFORMAT_COOK) \
++								 ||(afmt == AFORMAT_RAAC))
 
 
 #define IS_AUDIO_NOT_SUPPORT_EXCEED_2CH(afmt) ((afmt == AFORMAT_RAAC) \
 										||(afmt == AFORMAT_COOK) \
-										||(afmt == AFORMAT_FLAC))
+										/*||(afmt == AFORMAT_FLAC)*/)
+
+#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*/)
+
+#define IS_SUB_NEED_PREFEED_HEADER(sfmt) ((sfmt == CODEC_ID_DVD_SUBTITLE) )
 
 #endif /* AFORMAT_H */
 
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/amstream.h b/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/amstream.h
old mode 100644
new mode 100755
index 09f6a4a..be31995
--- a/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/amstream.h
+++ b/tools/depends/target/libamplayer/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,43 @@
 #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 AMSTREAM_IOC_SET_APTS                  _IOW(AMSTREAM_IOC_MAGIC, 0xa8, unsigned long)
+
+#define AMSTREAM_IOC_GET_LAST_CHECKIN_APTS   _IOR(AMSTREAM_IOC_MAGIC, 0xa9, unsigned long)
+#define AMSTREAM_IOC_GET_LAST_CHECKIN_VPTS   _IOR(AMSTREAM_IOC_MAGIC, 0xaa, unsigned long)
+#define AMSTREAM_IOC_GET_LAST_CHECKOUT_APTS  _IOR(AMSTREAM_IOC_MAGIC, 0xab, unsigned long)
+#define AMSTREAM_IOC_GET_LAST_CHECKOUT_VPTS  _IOR(AMSTREAM_IOC_MAGIC, 0xac, 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)
+#define AMAUDIO_IOC_SET_RESAMPLE_DELTA      _IOW(AMAUDIO_IOC_MAGIC, 0x1d, unsigned long)
+#define AMSTREAM_IOC_SET_DRMMODE _IOW(AMSTREAM_IOC_MAGIC, 0x91, unsigned long)
 
 struct buf_status {
     int size;
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/vformat.h b/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/vformat.h
old mode 100644
new mode 100755
index ed00219..294ef07
--- a/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/vformat.h
+++ b/tools/depends/target/libamplayer/libamplayer/include/amcodec/amports/vformat.h
@@ -49,6 +49,7 @@ typedef enum {
     VIDEO_DEC_FORMAT_WVC1,
     VIDEO_DEC_FORMAT_SW,
     VIDEO_DEC_FORMAT_AVS,
+    VIDEO_DEC_FORMAT_H264_4K2K,
     VIDEO_DEC_FORMAT_MAX
 } vdec_type_t;
 
@@ -64,6 +65,7 @@ typedef enum {
     VFORMAT_AVS,
     VFORMAT_SW,
     VFORMAT_H264MVC,
+    VFORMAT_H264_4K2K,
     VFORMAT_UNSUPPORT,
     VFORMAT_MAX
 } vformat_t;
@@ -85,8 +87,11 @@ 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_3IV2      (0x32564933)
+#define CODEC_TAG_3iv2      (0x32766933)
 #define CODEC_TAG_DX50      (0x30355844)
 #define CODEC_TAG_DIV6      (0x36564944)
 #define CODEC_TAG_RMP4      (0x34504d52)
@@ -108,5 +113,7 @@ typedef enum {
 #define CODEC_TAG_WVC1      (0x31435657)
 #define CODEC_TAG_WMVA      (0x41564d57)
 #define CODEC_TAG_FMP4      (0x34504d46)
+#define CODEC_TAG_FVFW      (0x57465646)
+#define CODEC_TAG_VC_1      (0x312d4356)
 
 #endif /* VFORMAT_H */
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec.h b/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec.h
old mode 100644
new mode 100755
index 187d4d5..35c5a53
--- a/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec.h
+++ b/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec.h
@@ -87,7 +87,37 @@ 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);
+
+int codec_get_last_checkout_apts(codec_para_t* pcodec, unsigned long *apts);
+int codec_get_last_checkin_apts(codec_para_t* pcodec, unsigned long *apts);
+
 #endif
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec_type.h b/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec_type.h
old mode 100644
new mode 100755
index 5d61ca8..2fa89f7
--- a/tools/depends/target/libamplayer/libamplayer/include/amcodec/codec_type.h
+++ b/tools/depends/target/libamplayer/libamplayer/include/amcodec/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;
 
@@ -52,9 +53,22 @@ typedef struct {
 } audio_info_t;
 
 typedef struct {
+    int valid;               ///< audio extradata valid(1) or invalid(0), set by dsp
+    int sample_rate;         ///< audio stream sample rate
+    int channels;            ///< audio stream channels
+    int bitrate;             ///< audio stream bit rate
+    int codec_id;            ///< codec format id
+    int block_align;         ///< audio block align from ffmpeg
+    int extradata_size;      ///< extra data size
+    char extradata[512];;   ///< extra data information for decoder
+} Asf_audio_info_t;
+
+
+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)
     unsigned int has_audio:1;   ///< stream has audio(1) or not(0)
@@ -75,6 +89,9 @@ typedef struct {
     int packet_size;            ///< data size per packet
     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
@@ -96,13 +113,20 @@ typedef struct {
     int sample_rate;         ///< audio stream sample rate
     int channels;            ///< audio stream channels
     int format;              ///< codec format id
+    int bitrate;
+    int block_align;
+    int codec_id;         //original codecid corespingding to ffmepg
     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
 #define AUDIO_ARC_DECODER 0
 #define AUDIO_ARM_DECODER 1
 #define AUDIO_FFMPEG_DECODER 2
+#define AUDIO_ARMWFD_DECODER  3
 #endif
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amplayer/message.h b/tools/depends/target/libamplayer/libamplayer/include/amplayer/message.h
old mode 100644
new mode 100755
index 0ddedf1..e3984fd
--- a/tools/depends/target/libamplayer/libamplayer/include/amplayer/message.h
+++ b/tools/depends/target/libamplayer/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;
 
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player.h b/tools/depends/target/libamplayer/libamplayer/include/amplayer/player.h
old mode 100644
new mode 100755
index b3eedc9..d18eb08
--- a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player.h
+++ b/tools/depends/target/libamplayer/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
@@ -71,6 +72,11 @@ int   enable_2XYscale();
 int   enable_freescale_MBX();
 int   disable_2X_2XYscale();
 int   GL_2X_scale(int mSwitch);
+int   wait_play_end();
+int   wait_video_unreg();
+int   clear_video_buf();
+int64_t player_get_lpbufbuffedsize(int pid);
+int64_t player_get_streambufbuffedsize(int pid);
 
 #ifdef  __cplusplus
 }
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_set_sys.h b/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_set_sys.h
old mode 100644
new mode 100755
index c47dfd2..1f34afb
--- a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_set_sys.h
+++ b/tools/depends/target/libamplayer/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,7 @@ 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
 }
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_thumbnail.h b/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_thumbnail.h
old mode 100644
new mode 100755
index d1387e2..7054651
--- a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_thumbnail.h
+++ b/tools/depends/target/libamplayer/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
 }
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_type.h b/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_type.h
old mode 100644
new mode 100755
index 37ad847..b542096
--- a/tools/depends/target/libamplayer/libamplayer/include/amplayer/player_type.h
+++ b/tools/depends/target/libamplayer/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
@@ -73,6 +66,28 @@ typedef enum
     PLAYER_DIVX_RENTAL_VIEW =   0x40003,
 }player_status;
 
+typedef enum {
+    DRM_LEVEL1     = 1,
+    DRM_LEVEL2     = 2,
+    DRM_LEVEL3     = 3,
+    DRM_NONE       = 4, 
+} drm_level_t;
+
+typedef struct drm_info {
+    drm_level_t drm_level;
+	int drm_flag;
+	int drm_hasesdata;
+	int drm_priv;
+    unsigned int drm_pktsize;
+	unsigned int drm_pktpts;
+	unsigned int drm_phy;
+	unsigned int drm_vir;
+	unsigned int drm_remap;
+	int data_offset;
+	int extpad[8];
+} drminfo_t;
+
+
 
 typedef struct
 {   
@@ -120,9 +135,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 +169,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 +204,8 @@ typedef struct player_info
 	int64_t	bufed_pos;
 	int	bufed_time;/* Second*/
     unsigned int drm_rental;
+    int64_t download_speed; //download speed
+    unsigned int last_pts;
 }player_info_t;
 
 typedef struct pid_info
@@ -231,7 +227,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);
@@ -244,6 +240,9 @@ 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_VIDEO_SIZE_CHANGED,           ///<ext1 refers to video width,ext2 refers to video height
+	PLAYER_EVENTS_SUBTITLE_DATA,            // sub data ext1 refers to subtitledata struct
 }player_events;
 
 typedef struct
@@ -294,6 +293,9 @@ typedef struct
 		int mode;							//no use
 	};  
 	callback_t callback_fn;					//callback function
+	callback_t subdata_fn;                  // subtitle data notify function
+	void *subhd;                            // sub handle
+	int subdatasource;                      // sub data source
 	int byteiobufsize;						//byteio buffer size used in ffmpeg
 	int loopbufsize;						//loop buffer size used in ffmpeg
 	int enable_rw_on_pause;					//no use
@@ -310,6 +312,8 @@ 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 is_ts_soft_demux;
 	int reserved [56];					//reserved  for furthur used,some one add more ,can del reserved num
 	int SessionID;
  }play_control_t; 
diff --git a/tools/depends/target/libamplayer/libamplayer/include/amplayer/stream_format.h b/tools/depends/target/libamplayer/libamplayer/include/amplayer/stream_format.h
old mode 100644
new mode 100755
index 5444f52..75292a8
--- a/tools/depends/target/libamplayer/libamplayer/include/amplayer/stream_format.h
+++ b/tools/depends/target/libamplayer/libamplayer/include/amplayer/stream_format.h
@@ -36,8 +36,12 @@ typedef enum
     P2P_FILE        = 16,
     ASF_FILE        = 17,
     STREAM_FILE     = 18,
-    APE_FILE		= 19,        
-    FILE_MAX		= 20,        
+    APE_FILE		= 19,  
+    AMR_FILE        = 20,
+    AVS_FILE		= 21, 
+    PMP_FILE		= 22, 
+    OGM_FILE            = 23,
+    FILE_MAX		= 24,        
 }pfile_type;
 
 #endif
diff --git a/xbmc/android/activity/AndroidExtra.h b/xbmc/android/activity/AndroidExtra.h
old mode 100644
new mode 100755
index 7b1c9ff..e641349
--- a/xbmc/android/activity/AndroidExtra.h
+++ b/xbmc/android/activity/AndroidExtra.h
@@ -20,7 +20,7 @@
  */
  
  /*** Extra's not found in the Android NDK ***/
-
+/*
 // missing in early NDKs, is present in r9b+
 extern float AMotionEvent_getAxisValue(const AInputEvent* motion_event, int32_t axis, size_t pointer_index);
 extern typeof(AMotionEvent_getAxisValue) *p_AMotionEvent_getAxisValue;
@@ -71,3 +71,4 @@ extern typeof(AMotionEvent_getButtonState) *p_AMotionEvent_getButtonState;
 #define AMOTION_EVENT_AXIS_RTRIGGER 18
 // mouse vertical wheel
 #define AMOTION_EVENT_AXIS_VSCROLL 0x09
+*/
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp
old mode 100644
new mode 100755
index 14ad038..82a99c0
--- a/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/DVDFactoryCodec.cpp
@@ -204,7 +204,15 @@ CDVDVideoCodec* CDVDFactoryCodec::CreateVideoCodec(CDVDStreamInfo &hint, unsigne
   // amcodec can handle dvd playback.
   if (!hint.software && CSettings::Get().GetBool("videoplayer.useamcodec"))
   {
-     if ( (pCodec = OpenCodec(new CDVDVideoCodecAmlogic(), hint, options)) ) return pCodec;
+    if(hint.codec != AV_CODEC_ID_RV10 && 
+        hint.codec != AV_CODEC_ID_RV20 &&
+        hint.codec != AV_CODEC_ID_RV30 &&
+        hint.codec != AV_CODEC_ID_RV40 ){/*not support es real stream.*/
+            CLog::Log(LOGINFO, "Amlogic Video Decoder...");
+            if ( (pCodec = OpenCodec(new CDVDVideoCodecAmlogic(), hint, options)) )
+                return pCodec;
+        }
+     
   }
 #endif
 
diff --git a/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp b/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
old mode 100644
new mode 100755
index b63904e..ec41cbe
--- a/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
+++ b/xbmc/cores/dvdplayer/DVDCodecs/Video/AMLCodec.cpp
@@ -1404,6 +1404,170 @@ int set_header_info(am_private_t *para)
   return PLAYER_SUCCESS;
 }
 
+typedef struct{
+    const char *mode;
+    int (*process)(CRect &rect);
+}RectMode;
+
+#define DEFAULT_AXIS_WIDTH  1920
+#define DEFAULT_AXIS_HEIGHT 1080
+
+static int rect_mode_480(CRect &rect)
+{
+    float w = rect.Width();
+    float h = rect.Height();
+    float xscale = (float)720 / (float)DEFAULT_AXIS_WIDTH;
+    float yscale = (float)480 / (float)DEFAULT_AXIS_HEIGHT;
+
+    rect.x1 *= xscale;
+    rect.x2 *= xscale;
+    rect.y1 *= yscale;
+    rect.y2 *= yscale;
+
+    return 0;
+}
+
+static int rect_mode_576(CRect &rect)
+{
+    float w = rect.Width();
+    float h = rect.Height();
+    float xscale = (float)720 / (float)DEFAULT_AXIS_WIDTH;
+    float yscale = (float)576 / (float)DEFAULT_AXIS_HEIGHT;
+
+    rect.x1 *= xscale;
+    rect.x2 *= xscale;
+    rect.y1 *= yscale;
+    rect.y2 *= yscale;
+
+    return 0;
+}
+
+static int rect_mode_720(CRect &rect)
+{
+    float w = rect.Width();
+    float h = rect.Height();
+    float xscale = (float)1280 / (float)DEFAULT_AXIS_WIDTH;
+    float yscale = (float)720 / (float)DEFAULT_AXIS_HEIGHT;
+
+    rect.x1 *= xscale;
+    rect.x2 *= xscale;
+    rect.y1 *= yscale;
+    rect.y2 *= yscale;
+
+    return 0;
+}
+
+static int rect_mode_1080(CRect &rect)
+{
+    return 0;
+}
+
+static int rect_mode_4K2K(CRect &rect)
+{
+    float w = rect.Width();
+    float h = rect.Height();
+    float xscale = (float)4000 / (float)DEFAULT_AXIS_WIDTH;
+    float yscale = (float)2000 / (float)DEFAULT_AXIS_HEIGHT;
+
+    rect.x1 *= xscale;
+    rect.x2 *= xscale;
+    rect.y1 *= yscale;
+    rect.y2 *= yscale;
+    return 0;
+}
+
+static int parse_resolution(char* in, int in_size, int *w, int *h)
+{
+    char *ptr = in;
+    char resolution[2][16] = {0};
+    int i = 0, j = 0;
+    if(in == NULL || in_size <= 0){
+        return -1;
+    }
+
+    while(ptr && i < 2 && j < 15){
+        if(*ptr  >= '0' && *ptr <= '9'){
+            resolution[i][j] = *ptr;
+            j++;
+        }
+        else if(*ptr == 'x'){
+            i++;
+            j = 0;
+        }
+        else{
+            break;
+        }
+        ptr++;
+    }
+    *w = atoi(&resolution[0][0]);
+    *h = atoi(&resolution[1][0]);
+    return 0;
+}
+
+
+static int rect_mode_panel(CRect &rect)
+{
+    float x1 = rect.x1,x2 = rect.x2,y1 = rect.y1,y2 = rect.y2;
+    int angle = 0;
+    
+    rect.x1 = y1;
+    rect.x2 = y2;
+    rect.y1 = x1;
+    rect.y2 = x2;
+
+    char resolution[32] = {0};
+    int w = 0, h = 0;
+    if(aml_get_sysfs_str("/sys/class/video/device_resolution", resolution, sizeof(resolution))){
+        CLog::Log(LOGERROR, "rect_mode_panel get mode failed");
+        return -1;
+    }
+    if(parse_resolution(resolution, sizeof(resolution), &w, &h)){
+        CLog::Log(LOGERROR, "rect_mode_panel parse resolution failed");
+        return -1;
+    }
+    std::string r = StringUtils::Format("%i,%i",
+            (int)w, (int)h);
+        CLog::Log(LOGDEBUG, "CAMLCodec::rect_mode_panel resolution<%s>", r.c_str()); 
+    if(w < h){
+        angle = 1;
+    }
+    
+    aml_set_sysfs_int("/sys/class/ppmgr/angle", angle);
+    CLog::Log(LOGDEBUG, "CAMLCodec::rect_mode_panel ");
+    return 0;
+}
+
+
+static const RectMode rect_mode[] = {
+    {"480", rect_mode_480},
+    {"576", rect_mode_576},
+    {"720", rect_mode_720},
+    {"1080", rect_mode_1080},
+    {"4k2k", rect_mode_4K2K},    
+    {"panel", rect_mode_panel},
+    {NULL, NULL}
+};
+
+static int rect_process(CRect &rect)
+{
+    char mode[64] = {0};
+    RectMode *p = (RectMode*)rect_mode;
+    if(aml_get_sysfs_str("/sys/class/display/mode", mode, sizeof(mode))){
+        CLog::Log(LOGERROR, "rect_process failed");
+        return -1;
+    }
+    CLog::Log(LOGDEBUG, "rect_process mode<%s>", mode);
+    while(p->mode){
+        if(strstr(mode, p->mode) != NULL){
+            if(p->process){
+                return p->process(rect);
+            }
+        }
+        p++;
+    }
+    return -1;
+    
+}
 /*************************************************************************/
 CAMLCodec::CAMLCodec() : CThread("CAMLCodec")
 {
@@ -1512,6 +1676,11 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
     am_private->video_rotation_degree = 3;
   // handle extradata
   am_private->video_format      = codecid_to_vformat(hints.codec);
+  if(am_private->video_format == VFORMAT_H264){
+        if(hints.width > 1920 || hints.height > 1088){
+            am_private->video_format = VFORMAT_H264_4K2K;
+        }
+  }
   switch (am_private->video_format)
   {
     default:
@@ -1576,10 +1745,10 @@ bool CAMLCodec::OpenDecoder(CDVDStreamInfo &hints)
       break;
     case VFORMAT_REAL:
       am_private->stream_type = AM_STREAM_RM;
-      am_private->vcodec.noblock = 1;
-      am_private->vcodec.stream_type = STREAM_TYPE_RM;
-      am_private->vcodec.am_sysinfo.ratio = 0x100;
-      am_private->vcodec.am_sysinfo.ratio64 = 0;
+      am_private->gcodec.noblock = 1;
+      am_private->gcodec.stream_type = STREAM_TYPE_RM;
+      am_private->gcodec.ratio = 0x100;
+      am_private->gcodec.ratio64 = 0;
       {
         static unsigned short tbl[9] = {0};
         if (VIDEO_DEC_FORMAT_REAL_8 == am_private->video_codec_type)
@@ -2183,7 +2352,7 @@ void CAMLCodec::SetVideoRect(const CRect &SrcRect, const CRect &DestRect)
   CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_stereo_mode(%d)", m_stereo_mode);
   CLog::Log(LOGDEBUG, "CAMLCodec::SetVideoRect:m_stereo_view(%d)", m_stereo_view);
 #endif
-
+  rect_process(dst_rect);
   if (m_stereo_mode == RENDER_STEREO_MODE_MONO)
   {
     std::string mode = GetStereoMode();

节点权限也要打开

chmod 666 /dev/amstream_*
chmod 666 /dev/amvideo
chmod 666 /sys/class/video/axis
chmod 666 /sys/class/video/screen_mode
chmod 666 /sys/class/video/disable_video
chmod 666 /sys/class/tsync/pts_pcrscr

xmbc下载地址:

git clone git://github.com/xbmc/xbmc.git 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值