Item | S801 | S802 | S805 | S812 |
---|---|---|---|---|
CPU | Quad Cortex-A9r4 | Quad Cortex-A9r4 | Quad Cortex-A5 | Quad Cortex-A9r4 |
Max CPU Freq | 2.0G Hz | 2.0G Hz | 1.5G Hz | 2.0G Hz |
GPU | Octo Mali-450 | Octo Mali-450 | Quad Mali-450 | Octo Mali-450 |
Security | TrustZone & TVP | TrustZone & TVP | TrustZone & TVP | TrustZone & TVP |
Memory | DDR3/3L | Dual DDR3/3L | DDR3/3L | Dual DDR3/3L |
Video decoding | 1080P | 4K2K | 1080P H265 | 4K2K H265 |
Video Encoding | 1080P H264 | 1080P H264 | 1080P H264 | 1080P H264 |
HDMI-Tx | 1080P | 4K2K | 1080P | 4K2K |
Ethernet | 10/100M | 10/100M | 10/100/1000M | 10/100/1000M |
AV output | CVBS | CVBS | CVBS | CVBS |
DTV support | TS in | TS in | TS in | TS in |
IP License | Dolby,DTS,SRS | Dolby,DTS,SRS | Dolby,DTS,SRS | Dolby,DTS,SRS |
一、Get the code From amlogic
$ cd ~/-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)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”)
. build/envsetup.sh
lunch n200-user
make otapackage
uboot config: m8m2_n200_v1_config
. build/envsetup.sh
lunch m200-user
make otapackage
uboot config: m8b_m200_1G_config
. build/envsetup.sh
lunch m201-user
make otapackage
uboot config:m8b_m201_1G_config
. 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.
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.
The current Openlinux release supports the three major DRMs: Widevine level1, Level3, PlayReady, Marlin.
Reference documents:
Document | Description |
---|---|
Amlogic WideVine Integration User Guide v0.1 | Widevine L1, L3 integration |
Amlogic PlayReady Integration User Guide v0.2 | PlayReady integration |
Amlogic Marlin Integration User Guide v0.1 | Marlin integration |
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:
Document | Description |
---|---|
Amlogic Security Architecture Guide & TVP V0.5 | Introduction of Amlogic Security Architecture |
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
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:
Document | Description |
---|---|
Amlogic SDHC controller User Guide v0 1 | How to configure SDHC controller |
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:
Document | Description |
---|---|
Amlogic Dolby DD DD+ DTS User Guide v0.1 | How to integrate DD, DD+, DTS |
All the mainstream video and audio formats are supported.
Reference documents:
Document | Description |
---|---|
Multimedia CODEC Benchmark M801 S801 20131010 | M801/S801 Multimedia support list |
Multimedia CODEC Benchmark M802 S802 20131010 | M802/S802 Multimedia support list |
Multimedia CODEC Benchmark M805 M806 S805 20140623 | M805/M806/S805 Multimedia support list |
Multimedia CODEC Benchmark M812 S812 20140807 | M812/S812 Multimedia support list |
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
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:
Document | Description |
---|---|
Amlogic USB WiFi User Guide v0.1 | How to config USB WiFi |
晶晨半导体SDIO WIFI 用户指南v0.1 | How to config SDIO WiFi |
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
#include
#include
-
+#include
#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
#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, ///*,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, ///,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