summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Bestas <mkbestas@lineageos.org>2018-04-12 18:26:15 +0300
committerMichael Bestas <mkbestas@lineageos.org>2018-04-12 18:26:15 +0300
commit3159153cd0100ad3891316372bc321dfc60039f5 (patch)
tree97a4e84198da0844be0b45b461787021086a235c
parent91db4db97088ca2a83a49204ee0ff21df35780c7 (diff)
parent9e49c2396fa82049daa93ae3f50575684e83602b (diff)
downloadandroid_hardware_qcom_media-3159153cd0100ad3891316372bc321dfc60039f5.tar.gz
android_hardware_qcom_media-3159153cd0100ad3891316372bc321dfc60039f5.tar.bz2
android_hardware_qcom_media-3159153cd0100ad3891316372bc321dfc60039f5.zip
Merge tag 'LA.UM.6.4.r1-07600-8x98.0' of https://source.codeaurora.org/quic/la/platform/hardware/qcom/media into HEAD
"LA.UM.6.4.r1-07600-8x98.0"
-rw-r--r--mm-core/Android.mk9
-rw-r--r--mm-core/src/8909/registry_table.c4
-rw-r--r--mm-core/src/8909/registry_table_android.c30
-rw-r--r--[-rwxr-xr-x]mm-core/src/8937/registry_table.c6
-rw-r--r--[-rwxr-xr-x]mm-core/src/8937/registry_table_android.c32
-rw-r--r--[-rwxr-xr-x]mm-core/src/msm8953/registry_table.c10
-rw-r--r--mm-core/src/msm8953/registry_table_android.c36
-rw-r--r--mm-core/src/msm8996/registry_table.c10
-rw-r--r--mm-core/src/msm8996/registry_table_android.c10
-rw-r--r--mm-core/src/msm8998/registry_table.c10
-rw-r--r--mm-core/src/msm8998/registry_table_android.c10
-rw-r--r--mm-core/src/sdm660/registry_table.c10
-rw-r--r--mm-core/src/sdm660/registry_table_android.c10
-rw-r--r--mm-video-v4l2/vidc/vdec/Android.mk4
-rw-r--r--mm-video-v4l2/vidc/vdec/inc/omx_vdec.h3
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp22
-rw-r--r--mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp61
-rw-r--r--mm-video-v4l2/vidc/venc/inc/omx_video_base.h2
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_base.cpp28
-rw-r--r--mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp2
20 files changed, 236 insertions, 73 deletions
diff --git a/mm-core/Android.mk b/mm-core/Android.mk
index faaa6494..6e35c2da 100644
--- a/mm-core/Android.mk
+++ b/mm-core/Android.mk
@@ -58,6 +58,15 @@ else
MM_CORE_TARGET = default
endif
+
+ifeq ($(call is-platform-sdk-version-at-least,27),true) # O-MR1
+OMXCORE_CFLAGS += -D_ANDROID_O_MR1_DIVX_CHANGES
+endif
+
+ifeq ($(call is-platform-sdk-version-at-least,27),true) # O-MR1
+OMXCORE_CFLAGS += -D_ANDROID_O_MR1_DIVX_CHANGES
+endif
+
#===============================================================================
# Deploy the headers that can be exposed
#===============================================================================
diff --git a/mm-core/src/8909/registry_table.c b/mm-core/src/8909/registry_table.c
index 1b26a778..54e11fb0 100644
--- a/mm-core/src/8909/registry_table.c
+++ b/mm-core/src/8909/registry_table.c
@@ -154,7 +154,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxSwVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/8909/registry_table_android.c b/mm-core/src/8909/registry_table_android.c
index c2dacf79..e575ba38 100644
--- a/mm-core/src/8909/registry_table_android.c
+++ b/mm-core/src/8909/registry_table_android.c
@@ -141,7 +141,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxSwVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -236,19 +240,6 @@ omx_core_cb_type core[] =
}
},
{
- "AIV.play",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libAivPlay.so",
- {
- "AIV.play.101"
- }
- },
- {
"OMX.qcom.audio.decoder.multiaac",
NULL, // Create instance function
// Unique instance handle
@@ -291,6 +282,19 @@ omx_core_cb_type core[] =
}
},
{
+ "AIV.play",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libAivPlay.so",
+ {
+ "AIV.play.101"
+ }
+ },
+ {
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
// Unique instance handle
diff --git a/mm-core/src/8937/registry_table.c b/mm-core/src/8937/registry_table.c
index 3722631a..ff2e3e36 100755..100644
--- a/mm-core/src/8937/registry_table.c
+++ b/mm-core/src/8937/registry_table.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014-16, The Linux Foundation. All rights reserved.
+Copyright (c) 2014-18, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -206,7 +206,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxSwVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/8937/registry_table_android.c b/mm-core/src/8937/registry_table_android.c
index c445db3d..946cc4a1 100755..100644
--- a/mm-core/src/8937/registry_table_android.c
+++ b/mm-core/src/8937/registry_table_android.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -54,19 +54,6 @@ omx_core_cb_type core[] =
}
},
{
- "OMX.qcom.video.decoder.avc.secure",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVdec.so",
- {
- "video_decoder.avc"
- }
- },
- {
"OMX.qcom.video.decoder.hevc",
NULL, // Create instance function
// Unique instance handle
@@ -106,19 +93,6 @@ omx_core_cb_type core[] =
}
},
{
- "OMX.qcom.video.encoder.avc.secure",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVenc.so",
- {
- "video_encoder.avc"
- }
- },
- {
"OMX.qti.video.decoder.mpeg4sw",
NULL, // Create instance function
// Unique instance handle
@@ -167,7 +141,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxSwVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/msm8953/registry_table.c b/mm-core/src/msm8953/registry_table.c
index a2fa23ca..563e14f2 100755..100644
--- a/mm-core/src/msm8953/registry_table.c
+++ b/mm-core/src/msm8953/registry_table.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2015-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -193,7 +193,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -219,7 +223,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/msm8953/registry_table_android.c b/mm-core/src/msm8953/registry_table_android.c
index fe8a6a29..5c563772 100644
--- a/mm-core/src/msm8953/registry_table_android.c
+++ b/mm-core/src/msm8953/registry_table_android.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -76,7 +76,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -102,7 +106,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -327,6 +335,19 @@ omx_core_cb_type core[] =
}
},
{
+ "OMX.qcom.video.encoder.avc.secure",
+ NULL, // Create instance function
+ // Unique instance handle
+ {
+ NULL
+ },
+ NULL, // Shared object library handle
+ "libOmxVenc.so",
+ {
+ "video_encoder.avc"
+ }
+ },
+ {
"OMX.qcom.video.encoder.vp8",
NULL, // Create instance function
// Unique instance handle
@@ -696,19 +717,6 @@ omx_core_cb_type core[] =
}
},
{
- "OMX.qcom.video.encoder.avc.secure",
- NULL, // Create instance function
- // Unique instance handle
- {
- NULL
- },
- NULL, // Shared object library handle
- "libOmxVenc.so",
- {
- "video_encoder.avc"
- }
- },
- {
"OMX.qcom.audio.decoder.aac",
NULL, // Create instance function
// Unique instance handle
diff --git a/mm-core/src/msm8996/registry_table.c b/mm-core/src/msm8996/registry_table.c
index 914ea3c7..a5721875 100644
--- a/mm-core/src/msm8996/registry_table.c
+++ b/mm-core/src/msm8996/registry_table.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -149,7 +149,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -181,7 +185,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/msm8996/registry_table_android.c b/mm-core/src/msm8996/registry_table_android.c
index 9ee77327..1c720601 100644
--- a/mm-core/src/msm8996/registry_table_android.c
+++ b/mm-core/src/msm8996/registry_table_android.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2014-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -84,7 +84,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -116,7 +120,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/msm8998/registry_table.c b/mm-core/src/msm8998/registry_table.c
index ab06c607..be1e2260 100644
--- a/mm-core/src/msm8998/registry_table.c
+++ b/mm-core/src/msm8998/registry_table.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -149,7 +149,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -181,7 +185,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/msm8998/registry_table_android.c b/mm-core/src/msm8998/registry_table_android.c
index e7af7958..341b252a 100644
--- a/mm-core/src/msm8998/registry_table_android.c
+++ b/mm-core/src/msm8998/registry_table_android.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -85,7 +85,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -117,7 +121,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/sdm660/registry_table.c b/mm-core/src/sdm660/registry_table.c
index c35ac9b7..5e002681 100644
--- a/mm-core/src/sdm660/registry_table.c
+++ b/mm-core/src/sdm660/registry_table.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2016, The Linux Foundation. All rights reserved.
+Copyright (c) 2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -149,7 +149,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -181,7 +185,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-core/src/sdm660/registry_table_android.c b/mm-core/src/sdm660/registry_table_android.c
index 12e762cf..e6c8d24e 100644
--- a/mm-core/src/sdm660/registry_table_android.c
+++ b/mm-core/src/sdm660/registry_table_android.c
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
@@ -85,7 +85,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx4"
+#else
"video_decoder.divx"
+#endif
}
},
{
@@ -117,7 +121,11 @@ omx_core_cb_type core[] =
NULL, // Shared object library handle
"libOmxVdec.so",
{
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ "video_decoder.divx311"
+#else
"video_decoder.divx"
+#endif
}
},
{
diff --git a/mm-video-v4l2/vidc/vdec/Android.mk b/mm-video-v4l2/vidc/vdec/Android.mk
index 27b8142c..4abb8368 100644
--- a/mm-video-v4l2/vidc/vdec/Android.mk
+++ b/mm-video-v4l2/vidc/vdec/Android.mk
@@ -63,6 +63,10 @@ ifeq ($(call is-board-platform-in-list, $(MASTER_SIDE_CP_TARGET_LIST)),true)
libmm-vdec-def += -DMASTER_SIDE_CP
endif
+ifeq ($(call is-platform-sdk-version-at-least,27),true) # O-MR1
+libmm-vdec-def += -D_ANDROID_O_MR1_DIVX_CHANGES
+endif
+
include $(CLEAR_VARS)
# Common Includes
diff --git a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
index 3965b4f0..e32d79a8 100644
--- a/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
+++ b/mm-video-v4l2/vidc/vdec/inc/omx_vdec.h
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2010 - 2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2010 - 2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
@@ -1288,6 +1288,7 @@ class omx_vdec: public qc_omx_component
}
};
client_extradata_info m_client_out_extradata_info;
+ bool m_buffer_error;
OMX_ERRORTYPE get_vendor_extension_config(
OMX_CONFIG_ANDROID_VENDOR_EXTENSIONTYPE *ext);
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp b/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
index f7d90589..8f3e456d 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_swvdec.cpp
@@ -1,7 +1,7 @@
/**
* @copyright
*
- * Copyright (c) 2015-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
@@ -191,6 +191,25 @@ OMX_ERRORTYPE omx_swvdec::component_init(OMX_STRING cmp_name)
m_swvdec_codec = SWVDEC_CODEC_H263;
m_omx_video_codingtype = OMX_VIDEO_CodingH263;
}
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ else if (!strncmp(cmp_name,"OMX.qti.video.decoder.divxsw",OMX_MAX_STRINGNAME_SIZE)){
+ OMX_SWVDEC_LOG_LOW("video_decoder.divx");
+
+ strlcpy(m_cmp_name, cmp_name, OMX_MAX_STRINGNAME_SIZE);
+ strlcpy(m_role_name, "video_decoder.divx", OMX_MAX_STRINGNAME_SIZE);
+
+ m_swvdec_codec = SWVDEC_CODEC_MPEG4;
+ m_omx_video_codingtype = ((OMX_VIDEO_CODINGTYPE) QOMX_VIDEO_CodingDivx);
+ }else if (!strncmp(cmp_name,"OMX.qti.video.decoder.divx4sw",OMX_MAX_STRINGNAME_SIZE)){
+ OMX_SWVDEC_LOG_LOW("video_decoder.divx4");
+
+ strlcpy(m_cmp_name, cmp_name, OMX_MAX_STRINGNAME_SIZE);
+ strlcpy(m_role_name, "video_decoder.divx4", OMX_MAX_STRINGNAME_SIZE);
+
+ m_swvdec_codec = SWVDEC_CODEC_MPEG4;
+ m_omx_video_codingtype = ((OMX_VIDEO_CODINGTYPE) QOMX_VIDEO_CodingDivx);
+ }
+#else
else if (((!strncmp(cmp_name,
"OMX.qti.video.decoder.divxsw",
OMX_MAX_STRINGNAME_SIZE))) ||
@@ -206,6 +225,7 @@ OMX_ERRORTYPE omx_swvdec::component_init(OMX_STRING cmp_name)
m_swvdec_codec = SWVDEC_CODEC_MPEG4;
m_omx_video_codingtype = ((OMX_VIDEO_CODINGTYPE) QOMX_VIDEO_CodingDivx);
}
+#endif
else
{
OMX_SWVDEC_LOG_ERROR("'%s': invalid component name", cmp_name);
diff --git a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
index 5fd3879d..2ac3144b 100644
--- a/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
+++ b/mm-video-v4l2/vidc/vdec/src/omx_vdec_v4l2.cpp
@@ -1,5 +1,5 @@
/*--------------------------------------------------------------------------
-Copyright (c) 2010 - 2017, The Linux Foundation. All rights reserved.
+Copyright (c) 2010 - 2018, The Linux Foundation. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
@@ -676,7 +676,8 @@ omx_vdec::omx_vdec(): m_error_propogated(false),
current_perf_level(V4L2_CID_MPEG_VIDC_PERF_LEVEL_NOMINAL),
secure_scaling_to_non_secure_opb(false),
m_force_compressed_for_dpb(true),
- m_is_display_session(false)
+ m_is_display_session(false),
+ m_buffer_error(false)
{
m_pipe_in = -1;
m_pipe_out = -1;
@@ -2401,7 +2402,11 @@ OMX_ERRORTYPE omx_vdec::component_init(OMX_STRING role)
m_frame_parser.init_start_codes(codec_type_parse);
} else if (!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx311",\
OMX_MAX_STRINGNAME_SIZE)) {
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ strlcpy((char *)m_cRole, "video_decoder.divx311",OMX_MAX_STRINGNAME_SIZE);
+#else
strlcpy((char *)m_cRole, "video_decoder.divx",OMX_MAX_STRINGNAME_SIZE);
+#endif
DEBUG_PRINT_LOW ("DIVX 311 Decoder selected");
drv_ctx.decoder_format = VDEC_CODECTYPE_DIVX_3;
output_capability = V4L2_PIX_FMT_DIVX_311;
@@ -2411,7 +2416,11 @@ OMX_ERRORTYPE omx_vdec::component_init(OMX_STRING role)
} else if (!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx4",\
OMX_MAX_STRINGNAME_SIZE)) {
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ strlcpy((char *)m_cRole, "video_decoder.divx4",OMX_MAX_STRINGNAME_SIZE);
+#else
strlcpy((char *)m_cRole, "video_decoder.divx",OMX_MAX_STRINGNAME_SIZE);
+#endif
DEBUG_PRINT_ERROR ("DIVX 4 Decoder selected");
drv_ctx.decoder_format = VDEC_CODECTYPE_DIVX_4;
output_capability = V4L2_PIX_FMT_DIVX;
@@ -4727,12 +4736,25 @@ OMX_ERRORTYPE omx_vdec::set_parameter(OMX_IN OMX_HANDLETYPE hComp,
(!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx311", OMX_MAX_STRINGNAME_SIZE)) ||
(!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx4", OMX_MAX_STRINGNAME_SIZE))
) {
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ if (!strncmp((const char*)comp_role->cRole, "video_decoder.divx4", OMX_MAX_STRINGNAME_SIZE)) {
+ strlcpy((char*)m_cRole, "video_decoder.divx4", OMX_MAX_STRINGNAME_SIZE);
+ } else if (!strncmp((const char*)comp_role->cRole, "video_decoder.divx311", OMX_MAX_STRINGNAME_SIZE)) {
+ strlcpy((char*)m_cRole, "video_decoder.divx311", OMX_MAX_STRINGNAME_SIZE);
+ } else if (!strncmp((const char*)comp_role->cRole, "video_decoder.divx", OMX_MAX_STRINGNAME_SIZE)) {
+ strlcpy((char*)m_cRole, "video_decoder.divx", OMX_MAX_STRINGNAME_SIZE);
+ } else {
+ DEBUG_PRINT_ERROR("Setparameter: unknown Index %s", comp_role->cRole);
+ eRet =OMX_ErrorUnsupportedSetting;
+ }
+#else
if (!strncmp((const char*)comp_role->cRole, "video_decoder.divx", OMX_MAX_STRINGNAME_SIZE)) {
strlcpy((char*)m_cRole, "video_decoder.divx", OMX_MAX_STRINGNAME_SIZE);
} else {
DEBUG_PRINT_ERROR("Setparameter: unknown Index %s", comp_role->cRole);
eRet =OMX_ErrorUnsupportedSetting;
}
+#endif
} else if ( (!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.vc1", OMX_MAX_STRINGNAME_SIZE)) ||
(!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.wmv", OMX_MAX_STRINGNAME_SIZE))
) {
@@ -6018,6 +6040,7 @@ OMX_ERRORTYPE omx_vdec::use_output_buffer(
eRet = allocate_output_headers();
if (eRet == OMX_ErrorNone)
eRet = allocate_extradata();
+ output_use_buffer = true;
}
if (eRet == OMX_ErrorNone) {
@@ -6527,7 +6550,6 @@ OMX_ERRORTYPE omx_vdec::free_input_buffer(OMX_BUFFERHEADERTYPE *bufferHdr)
index = bufferHdr - m_inp_mem_ptr;
DEBUG_PRINT_LOW("Free Input Buffer index = %d",index);
- auto_lock l(buf_lock);
bufferHdr->pInputPortPrivate = NULL;
if (index < drv_ctx.ip_buf.actualcount && drv_ctx.ptr_inputbuffer) {
@@ -6770,6 +6792,7 @@ OMX_ERRORTYPE omx_vdec::allocate_input_buffer(
unsigned i = 0;
unsigned char *buf_addr = NULL;
int pmem_fd = -1;
+ unsigned int align_size = 0;
(void) hComp;
(void) port;
@@ -6829,8 +6852,10 @@ OMX_ERRORTYPE omx_vdec::allocate_input_buffer(
int rc;
DEBUG_PRINT_LOW("Allocate input Buffer");
#ifdef USE_ION
+ align_size = drv_ctx.ip_buf.buffer_size + 512;
+ align_size = (align_size + drv_ctx.ip_buf.alignment - 1)&(~(drv_ctx.ip_buf.alignment - 1));
drv_ctx.ip_buf_ion_info[i].ion_device_fd = alloc_map_ion_memory(
- drv_ctx.ip_buf.buffer_size,drv_ctx.op_buf.alignment,
+ align_size, drv_ctx.op_buf.alignment,
&drv_ctx.ip_buf_ion_info[i].ion_alloc_data,
&drv_ctx.ip_buf_ion_info[i].fd_ion_data, secure_mode ?
SECURE_FLAGS_INPUT_BUFFER : ION_FLAG_CACHED);
@@ -7387,6 +7412,10 @@ OMX_ERRORTYPE omx_vdec::allocate_buffer(OMX_IN OMX_HANDLETYPE hC
eRet = allocate_input_buffer(hComp,bufferHdr,port,appData,bytes);
}
} else if (port == OMX_CORE_OUTPUT_PORT_INDEX) {
+ if (output_use_buffer) {
+ DEBUG_PRINT_ERROR("Allocate output buffer not allowed after use buffer");
+ return OMX_ErrorBadParameter;
+ }
eRet = client_buffers.allocate_buffers_color_convert(hComp,bufferHdr,port,
appData,bytes);
} else {
@@ -7447,6 +7476,7 @@ OMX_ERRORTYPE omx_vdec::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
(void) hComp;
DEBUG_PRINT_LOW("In for decoder free_buffer");
+ auto_lock l(buf_lock);
if (m_state == OMX_StateIdle &&
(BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) {
DEBUG_PRINT_LOW(" free buffer while Component in Loading pending");
@@ -7463,7 +7493,7 @@ OMX_ERRORTYPE omx_vdec::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
post_event(OMX_EventError,
OMX_ErrorPortUnpopulated,
OMX_COMPONENT_GENERATE_EVENT);
-
+ m_buffer_error = true;
return OMX_ErrorIncorrectStateOperation;
} else if (m_state != OMX_StateInvalid) {
DEBUG_PRINT_ERROR("Invalid state to free buffer,port lost Buffers");
@@ -7584,6 +7614,7 @@ OMX_ERRORTYPE omx_vdec::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
BITMASK_CLEAR((&m_flags),OMX_COMPONENT_LOADING_PENDING);
post_event(OMX_CommandStateSet, OMX_StateLoaded,
OMX_COMPONENT_GENERATE_EVENT);
+ m_buffer_error = false;
}
}
return eRet;
@@ -7755,6 +7786,11 @@ OMX_ERRORTYPE omx_vdec::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp,
if (!temp_buffer || (temp_buffer - drv_ctx.ptr_inputbuffer) > (int)drv_ctx.ip_buf.actualcount) {
return OMX_ErrorBadParameter;
}
+
+ if (BITMASK_ABSENT(&m_inp_bm_count, nPortIndex) || m_buffer_error) {
+ DEBUG_PRINT_ERROR("ETBProxy: ERROR: invalid buffer, nPortIndex %u", nPortIndex);
+ return OMX_ErrorBadParameter;
+ }
/* If its first frame, H264 codec and reject is true, then parse the nal
and get the profile. Based on this, reject the clip playback */
if (first_frame == 0 && codec_type_parse == CODEC_TYPE_H264 &&
@@ -8056,6 +8092,7 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer_proxy(
struct vdec_bufferpayload *ptr_outputbuffer = NULL;
struct vdec_output_frameinfo *ptr_respbuffer = NULL;
+ auto_lock l(buf_lock);
nPortIndex = buffer-((OMX_BUFFERHEADERTYPE *)client_buffers.get_il_buf_hdr());
if (bufferAdd == NULL || nPortIndex >= drv_ctx.op_buf.actualcount) {
@@ -8064,6 +8101,10 @@ OMX_ERRORTYPE omx_vdec::fill_this_buffer_proxy(
return OMX_ErrorBadParameter;
}
+ if (BITMASK_ABSENT(&m_out_bm_count, nPortIndex) || m_buffer_error) {
+ DEBUG_PRINT_ERROR("FTBProxy: ERROR: invalid buffer, nPortIndex %u", nPortIndex);
+ return OMX_ErrorBadParameter;
+ }
DEBUG_PRINT_LOW("FTBProxy: bufhdr = %p, bufhdr->pBuffer = %p",
bufferAdd, bufferAdd->pBuffer);
/*Return back the output buffer to client*/
@@ -8438,7 +8479,15 @@ OMX_ERRORTYPE omx_vdec::component_role_enum(OMX_IN OMX_HANDLETYPE hComp,
else if ((!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx",OMX_MAX_STRINGNAME_SIZE)) ||
(!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx311",OMX_MAX_STRINGNAME_SIZE))) {
if ((0 == index) && role) {
+#ifdef _ANDROID_O_MR1_DIVX_CHANGES
+ if (!strncmp(drv_ctx.kind, "OMX.qcom.video.decoder.divx311",OMX_MAX_STRINGNAME_SIZE)) {
+ strlcpy((char *)role, "video_decoder.divx311",OMX_MAX_STRINGNAME_SIZE);
+ } else {
+ strlcpy((char *)role, "video_decoder.divx",OMX_MAX_STRINGNAME_SIZE);
+ }
+#else
strlcpy((char *)role, "video_decoder.divx",OMX_MAX_STRINGNAME_SIZE);
+#endif
DEBUG_PRINT_LOW("component_role_enum: role %s",role);
} else {
DEBUG_PRINT_LOW("No more roles");
@@ -9456,7 +9505,7 @@ int omx_vdec::async_message_process (void *context, void* message)
if (omxhdr && omxhdr->nFilledLen && !omx->m_need_turbo) {
omx->request_perf_level(VIDC_NOMINAL);
}
- if (omx->output_use_buffer && omxhdr->pBuffer &&
+ if (!omx->m_enable_android_native_buffers && omx->output_use_buffer && omxhdr->pBuffer &&
vdec_msg->msgdata.output_frame.bufferaddr)
memcpy ( omxhdr->pBuffer, (void *)
((unsigned long)vdec_msg->msgdata.output_frame.bufferaddr +
diff --git a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
index f325678e..bb3cffe0 100644
--- a/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
+++ b/mm-video-v4l2/vidc/venc/inc/omx_video_base.h
@@ -707,6 +707,7 @@ class omx_video: public qc_omx_component
uint64_t m_out_bm_count;
uint64_t m_client_out_bm_count;
+ uint64_t m_client_in_bm_count;
uint64_t m_inp_bm_count;
uint64_t m_flags;
uint64_t m_etb_count;
@@ -719,6 +720,7 @@ class omx_video: public qc_omx_component
bool hw_overload;
size_t m_graphicbuffer_size;
char m_platform[OMX_MAX_STRINGNAME_SIZE];
+ bool m_buffer_freed;
};
#endif // __OMX_VIDEO_BASE_H__
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
index c0c697a1..df0178a9 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_video_base.cpp
@@ -290,13 +290,15 @@ omx_video::omx_video():
allocate_native_handle(false),
m_out_bm_count(0),
m_client_out_bm_count(0),
+ m_client_in_bm_count(0),
m_inp_bm_count(0),
m_flags(0),
m_etb_count(0),
m_fbd_count(0),
m_event_port_settings_sent(false),
hw_overload(false),
- m_graphicbuffer_size(0)
+ m_graphicbuffer_size(0),
+ m_buffer_freed(0)
{
DEBUG_PRINT_HIGH("omx_video(): Inside Constructor()");
memset(&m_cmp,0,sizeof(m_cmp));
@@ -439,6 +441,9 @@ void omx_video::process_event_cb(void *ctxt, unsigned char id)
case OMX_CommandStateSet:
pThis->m_state = (OMX_STATETYPE) p2;
DEBUG_PRINT_LOW("Process -> state set to %d", pThis->m_state);
+ if (pThis->m_state == OMX_StateLoaded) {
+ m_buffer_freed = false;
+ }
pThis->m_pCallbacks.EventHandler(&pThis->m_cmp, pThis->m_app_data,
OMX_EventCmdComplete, p1, p2, NULL);
break;
@@ -2645,6 +2650,7 @@ OMX_ERRORTYPE omx_video::use_input_buffer(
*bufferHdr = (m_inp_mem_ptr + i);
BITMASK_SET(&m_inp_bm_count,i);
+ BITMASK_SET(&m_client_in_bm_count,i);
(*bufferHdr)->pBuffer = (OMX_U8 *)buffer;
(*bufferHdr)->nSize = sizeof(OMX_BUFFERHEADERTYPE);
@@ -3661,6 +3667,10 @@ OMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
nPortIndex = buffer - (OMX_BUFFERHEADERTYPE*)m_out_mem_ptr;
if(BITMASK_PRESENT(&m_client_out_bm_count, nPortIndex))
BITMASK_CLEAR(&m_client_out_bm_count,nPortIndex);
+ } else if (port == PORT_INDEX_IN) {
+ nPortIndex = buffer - (meta_mode_enable?meta_buffer_hdr:m_inp_mem_ptr);
+ if(BITMASK_PRESENT(&m_client_in_bm_count, nPortIndex))
+ BITMASK_CLEAR(&m_client_in_bm_count,nPortIndex);
}
if (m_state == OMX_StateIdle &&
(BITMASK_PRESENT(&m_flags ,OMX_COMPONENT_LOADING_PENDING))) {
@@ -3670,12 +3680,14 @@ OMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
DEBUG_PRINT_LOW("Free Buffer while port %u disabled", (unsigned int)port);
} else if (m_state == OMX_StateExecuting || m_state == OMX_StatePause) {
DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,ports need to be disabled");
+ m_buffer_freed = true;
post_event(OMX_EventError,
OMX_ErrorPortUnpopulated,
OMX_COMPONENT_GENERATE_EVENT);
return eRet;
} else {
DEBUG_PRINT_ERROR("ERROR: Invalid state to free buffer,port lost Buffers");
+ m_buffer_freed = true;
post_event(OMX_EventError,
OMX_ErrorPortUnpopulated,
OMX_COMPONENT_GENERATE_EVENT);
@@ -3797,6 +3809,9 @@ OMX_ERRORTYPE omx_video::free_buffer(OMX_IN OMX_HANDLETYPE hComp,
m_out_bm_count, m_inp_bm_count);
}
}
+ if (eRet != OMX_ErrorNone) {
+ m_buffer_freed = true;
+ }
return eRet;
}
@@ -4032,7 +4047,7 @@ OMX_ERRORTYPE omx_video::empty_this_buffer_proxy(OMX_IN OMX_HANDLETYPE hComp,
auto_lock l(m_buf_lock);
pmem_data_buf = (OMX_U8 *)m_pInput_pmem[nBufIndex].buffer;
- if (pmem_data_buf && BITMASK_PRESENT(&m_inp_bm_count, nBufIndex)) {
+ if (pmem_data_buf && BITMASK_PRESENT(&m_client_in_bm_count, nBufIndex)) {
memcpy (pmem_data_buf, (buffer->pBuffer + buffer->nOffset),
buffer->nFilledLen);
}
@@ -4149,8 +4164,15 @@ OMX_ERRORTYPE omx_video::fill_this_buffer_proxy(
(void)hComp;
OMX_U8 *pmem_data_buf = NULL;
OMX_ERRORTYPE nRet = OMX_ErrorNone;
+ auto_lock l(m_buf_lock);
+ if (m_buffer_freed == true) {
+ DEBUG_PRINT_ERROR("ERROR: FTBProxy: Invalid call. Called after freebuffer");
+ return OMX_ErrorBadParameter;
+ }
- DEBUG_PRINT_LOW("FTBProxy: bufferAdd->pBuffer[%p]", bufferAdd->pBuffer);
+ if (bufferAdd != NULL) {
+ DEBUG_PRINT_LOW("FTBProxy: bufferAdd->pBuffer[%p]", bufferAdd->pBuffer);
+ }
if (bufferAdd == NULL || ((bufferAdd - m_out_mem_ptr) >= (int)m_sOutPortDef.nBufferCountActual) ) {
DEBUG_PRINT_ERROR("ERROR: FTBProxy: Invalid i/p params");
diff --git a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
index ac5bfff8..8841fc1f 100644
--- a/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
+++ b/mm-video-v4l2/vidc/venc/src/omx_video_encoder.cpp
@@ -2431,6 +2431,8 @@ OMX_ERRORTYPE omx_venc::component_deinit(OMX_IN OMX_HANDLETYPE hComp)
for (i=0; i<m_sInPortDef.nBufferCountActual; i++ ) {
if (BITMASK_PRESENT(&m_inp_bm_count, i)) {
BITMASK_CLEAR(&m_inp_bm_count, i);
+ if (BITMASK_PRESENT(&m_client_in_bm_count, i))
+ BITMASK_CLEAR(&m_client_in_bm_count, i);
free_input_buffer (&m_inp_mem_ptr[i]);
}