From 47bef69347450c96e9c1230ddbd1a70d958169fc Mon Sep 17 00:00:00 2001 From: zhenghanchao Date: Wed, 24 Aug 2016 16:03:31 +0800 Subject: [PATCH] android/ijkMediaFormat: report codec profile Signed-off-by: Xinzheng Zhang --- .../ijk/media/player/IjkMediaMeta.java | 18 +++++++ .../ijk/media/player/misc/IjkMediaFormat.java | 48 +++++++++++++++++-- 2 files changed, 63 insertions(+), 3 deletions(-) mode change 100644 => 100755 android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java mode change 100644 => 100755 android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java diff --git a/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java b/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java old mode 100644 new mode 100755 index ef814f14..71a0937e --- a/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java +++ b/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/IjkMediaMeta.java @@ -28,6 +28,7 @@ public class IjkMediaMeta { public static final String IJKM_KEY_CODEC_LEVEL = "codec_level"; public static final String IJKM_KEY_CODEC_LONG_NAME = "codec_long_name"; public static final String IJKM_KEY_CODEC_PIXEL_FORMAT = "codec_pixel_format"; + public static final String IJKM_KEY_CODEC_PROFILE_ID = "codec_profile_index"; // stream: video public static final String IJKM_KEY_WIDTH = "width"; @@ -109,6 +110,23 @@ public class IjkMediaMeta { | AV_CH_BACK_LEFT | AV_CH_BACK_CENTER | AV_CH_BACK_RIGHT); public static final long AV_CH_LAYOUT_STEREO_DOWNMIX = (AV_CH_STEREO_LEFT | AV_CH_STEREO_RIGHT); + public static final int FF_PROFILE_H264_CONSTRAINED = (1<<9); // 8+1; constraint_set1_flag + public static final int FF_PROFILE_H264_INTRA = (1<<11); // 8+3; constraint_set3_flag + + public static final int FF_PROFILE_H264_BASELINE = 66; + public static final int FF_PROFILE_H264_CONSTRAINED_BASELINE = (66|FF_PROFILE_H264_CONSTRAINED); + public static final int FF_PROFILE_H264_MAIN = 77; + public static final int FF_PROFILE_H264_EXTENDED = 88; + public static final int FF_PROFILE_H264_HIGH = 100; + public static final int FF_PROFILE_H264_HIGH_10 = 110; + public static final int FF_PROFILE_H264_HIGH_10_INTRA = (110|FF_PROFILE_H264_INTRA); + public static final int FF_PROFILE_H264_HIGH_422 = 122; + public static final int FF_PROFILE_H264_HIGH_422_INTRA = (122|FF_PROFILE_H264_INTRA); + public static final int FF_PROFILE_H264_HIGH_444 = 144; + public static final int FF_PROFILE_H264_HIGH_444_PREDICTIVE = 244; + public static final int FF_PROFILE_H264_HIGH_444_INTRA = (244|FF_PROFILE_H264_INTRA); + public static final int FF_PROFILE_H264_CAVLC_444 = 44; + public Bundle mMediaMeta; public String mFormat; diff --git a/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java b/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java old mode 100644 new mode 100755 index f6ca5058..f01790ba --- a/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java +++ b/android/ijkplayer/ijkplayer-java/src/main/java/tv/danmaku/ijk/media/player/misc/IjkMediaFormat.java @@ -117,9 +117,51 @@ public class IjkMediaFormat implements IMediaFormat { sFormatterMap.put(KEY_IJK_CODEC_PROFILE_LEVEL_UI, new Formatter() { @Override protected String doFormat(IjkMediaFormat mediaFormat) { - String profile = mediaFormat.getString(IjkMediaMeta.IJKM_KEY_CODEC_PROFILE); - if (TextUtils.isEmpty(profile)) - return null; + int profileIndex = mediaFormat.getInteger(IjkMediaMeta.IJKM_KEY_CODEC_PROFILE_ID); + String profile; + switch (profileIndex) { + case IjkMediaMeta.FF_PROFILE_H264_BASELINE: + profile = "Baseline"; + break; + case IjkMediaMeta.FF_PROFILE_H264_CONSTRAINED_BASELINE: + profile = "Constrained Baseline"; + break; + case IjkMediaMeta.FF_PROFILE_H264_MAIN: + profile = "Main"; + break; + case IjkMediaMeta.FF_PROFILE_H264_EXTENDED: + profile = "Extended"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH: + profile = "High"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_10: + profile = "High 10"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_10_INTRA: + profile = "High 10 Intra"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_422: + profile = "High 4:2:2"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_422_INTRA: + profile = "High 4:2:2 Intra"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_444: + profile = "High 4:4:4"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_444_PREDICTIVE: + profile = "High 4:4:4 Predictive"; + break; + case IjkMediaMeta.FF_PROFILE_H264_HIGH_444_INTRA: + profile = "High 4:4:4 Intra"; + break; + case IjkMediaMeta.FF_PROFILE_H264_CAVLC_444: + profile = "CAVLC 4:4:4"; + break; + default: + return null; + } StringBuilder sb = new StringBuilder(); sb.append(profile); -- GitLab