summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-05-07 09:01:35 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-05-07 09:01:35 +0000
commit6f1c353747fa438b22b59e951782b42f6a0912e1 (patch)
treeb7a956054b5c93766940461ebb2160fb5e3e7c6c
parentea028d706e8c1761055632f29e8a40643bce1275 (diff)
parent1836946c9620d667cb262e8c6aa1521eb0b12179 (diff)
downloadandroid_system_media-6f1c353747fa438b22b59e951782b42f6a0912e1.tar.gz
android_system_media-6f1c353747fa438b22b59e951782b42f6a0912e1.tar.bz2
android_system_media-6f1c353747fa438b22b59e951782b42f6a0912e1.zip
release-request-7fec6a93-555f-41fe-a89d-484fc3bd7083-for-git_oc-dr1-release-3983577 snap-temp-L94700000061410674
Change-Id: Ia0cfb4c42fe88cb19e8289a26b5042a0c26ffef9
-rw-r--r--alsa_utils/alsa_device_proxy.c28
-rw-r--r--alsa_utils/include/alsa_device_proxy.h2
-rw-r--r--audio_effects/Android.bp2
-rwxr-xr-xcamera/docs/metadata-generate4
-rw-r--r--camera/src/camera_metadata.c7
-rw-r--r--camera/tests/camera_metadata_tests.cpp34
6 files changed, 67 insertions, 10 deletions
diff --git a/alsa_utils/alsa_device_proxy.c b/alsa_utils/alsa_device_proxy.c
index 9236a9b4..9b06d16f 100644
--- a/alsa_utils/alsa_device_proxy.c
+++ b/alsa_utils/alsa_device_proxy.c
@@ -39,9 +39,11 @@ static const unsigned format_byte_size_map[] = {
3, /* PCM_FORMAT_S24_3LE */
};
-void proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile* profile,
+int proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile* profile,
struct pcm_config * config)
{
+ int ret = 0;
+
ALOGV("proxy_prepare(c:%d, d:%d)", profile->card, profile->device);
proxy->profile = profile;
@@ -53,17 +55,25 @@ void proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile* profile,
if (config->format != PCM_FORMAT_INVALID && profile_is_format_valid(profile, config->format)) {
proxy->alsa_config.format = config->format;
} else {
+ proxy->alsa_config.format = profile->default_config.format;
ALOGW("Invalid format %d - using default %d.",
config->format, profile->default_config.format);
- proxy->alsa_config.format = profile->default_config.format;
+ // Indicate override when default format was not requested
+ if (config->format != PCM_FORMAT_INVALID) {
+ ret = -EINVAL;
+ }
}
if (config->rate != 0 && profile_is_sample_rate_valid(profile, config->rate)) {
proxy->alsa_config.rate = config->rate;
} else {
+ proxy->alsa_config.rate = profile->default_config.rate;
ALOGW("Invalid sample rate %u - using default %u.",
config->rate, profile->default_config.rate);
- proxy->alsa_config.rate = profile->default_config.rate;
+ // Indicate override when default rate was not requested
+ if (config->rate != 0) {
+ ret = -EINVAL;
+ }
}
if (config->channels != 0 && profile_is_channel_count_valid(profile, config->channels)) {
@@ -72,6 +82,10 @@ void proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile* profile,
proxy->alsa_config.channels = profile_get_closest_channel_count(profile, config->channels);
ALOGW("Invalid channel count %u - using closest %u.",
config->channels, proxy->alsa_config.channels);
+ // Indicate override when default channel count was not requested
+ if (config->channels != 0) {
+ ret = -EINVAL;
+ }
}
proxy->alsa_config.period_count = profile->default_config.period_count;
@@ -98,8 +112,14 @@ void proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile* profile,
// us the highest working rate
int max_rate_index = proxy_scan_rates(proxy, profile->sample_rates);
if (max_rate_index >= 0) {
- proxy->alsa_config.rate = profile->sample_rates[max_rate_index];
+ if (proxy->alsa_config.rate > profile->sample_rates[max_rate_index]) {
+ ALOGW("Limiting samplnig rate from %u to %u.",
+ proxy->alsa_config.rate, profile->sample_rates[max_rate_index]);
+ proxy->alsa_config.rate = profile->sample_rates[max_rate_index];
+ ret = -EINVAL;
+ }
}
+ return ret;
}
int proxy_open(alsa_device_proxy * proxy)
diff --git a/alsa_utils/include/alsa_device_proxy.h b/alsa_utils/include/alsa_device_proxy.h
index 212ae4fa..677bb5ea 100644
--- a/alsa_utils/include/alsa_device_proxy.h
+++ b/alsa_utils/include/alsa_device_proxy.h
@@ -34,7 +34,7 @@ typedef struct {
/* State */
-void proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile * profile,
+int proxy_prepare(alsa_device_proxy * proxy, alsa_device_profile * profile,
struct pcm_config * config);
int proxy_open(alsa_device_proxy * proxy);
void proxy_close(alsa_device_proxy * proxy);
diff --git a/audio_effects/Android.bp b/audio_effects/Android.bp
index 9e88723c..e4e44b77 100644
--- a/audio_effects/Android.bp
+++ b/audio_effects/Android.bp
@@ -1,4 +1,6 @@
cc_library_headers {
name: "libaudioeffects",
+ header_libs: ["libhardware_headers"],
+ export_header_lib_headers: ["libhardware_headers"],
export_include_dirs: ["include"],
}
diff --git a/camera/docs/metadata-generate b/camera/docs/metadata-generate
index 0e4dfc29..49124218 100755
--- a/camera/docs/metadata-generate
+++ b/camera/docs/metadata-generate
@@ -21,7 +21,7 @@
# docs.html
# ../src/camera_metadata_tag_info.c
# ../src/camera_metadata_tags.h
-# ../../../../frameworks/av/include/camera/ndk/NdkCameraMetadataTags.h
+# ../../../../frameworks/av/camera/ndk/include/camera/NdkCameraMetadataTags.h
# ../../../../frameworks/av/camera/ndk/impl/ACameraMetadata.cpp
# ../../../../cts/tests/camera/src/android/hardware/camera2/cts/CaptureResultTest.java
# ../../../../frameworks/base/core/java/android/hardware/camera2/CameraCharacteristics.java
@@ -38,7 +38,7 @@ fwkdir="$ANDROID_BUILD_TOP/frameworks/base/core/java/android/hardware/camera2/"
fwkdir_html="$ANDROID_BUILD_TOP/frameworks/base/docs/html"
ctsdir="$ANDROID_BUILD_TOP/cts/tests/camera/src/android/hardware/camera2/cts"
outdir="$ANDROID_PRODUCT_OUT/obj/ETC/system-media-camera-docs_intermediates"
-ndk_header_dir="$ANDROID_BUILD_TOP/frameworks/av/include/camera/ndk"
+ndk_header_dir="$ANDROID_BUILD_TOP/frameworks/av/camera/ndk/include/camera"
ndk_impl_dir="$ANDROID_BUILD_TOP/frameworks/av/camera/ndk/impl"
device_info_dir="$ANDROID_BUILD_TOP/cts/tools/cts-device-info/"`
`"src/com/android/cts/deviceinfo"
diff --git a/camera/src/camera_metadata.c b/camera/src/camera_metadata.c
index c79f61c0..dc800860 100644
--- a/camera/src/camera_metadata.c
+++ b/camera/src/camera_metadata.c
@@ -420,13 +420,14 @@ int validate_camera_metadata_structure(const camera_metadata_t *metadata,
};
for (size_t i = 0; i < sizeof(alignments)/sizeof(alignments[0]); ++i) {
- uintptr_t aligned_ptr = ALIGN_TO(metadata, alignments[i].alignment);
+ uintptr_t aligned_ptr = ALIGN_TO((uintptr_t) metadata + alignmentOffset,
+ alignments[i].alignment);
if ((uintptr_t)metadata + alignmentOffset != aligned_ptr) {
ALOGE("%s: Metadata pointer is not aligned (actual %p, "
- "expected %p) to type %s",
+ "expected %p, offset %" PRIuPTR ") to type %s",
__FUNCTION__, metadata,
- (void*)aligned_ptr, alignments[i].name);
+ (void*)aligned_ptr, alignmentOffset, alignments[i].name);
return CAMERA_METADATA_VALIDATION_ERROR;
}
}
diff --git a/camera/tests/camera_metadata_tests.cpp b/camera/tests/camera_metadata_tests.cpp
index 121ce19a..bcebf2e1 100644
--- a/camera/tests/camera_metadata_tests.cpp
+++ b/camera/tests/camera_metadata_tests.cpp
@@ -1870,3 +1870,37 @@ TEST(camera_metadata, data_alignment) {
}
}
}
+
+TEST(camera_metadata, buffer_alignment) {
+ // Verify that misaligned metadata buffers only fail VALIDATION_SHIFTED, nothing else
+ const size_t entry_capacity = 50;
+ const size_t data_capacity = 450;
+ const size_t offsetRange = 16;
+ const uint32_t validAlignment = 8;
+
+ camera_metadata_t *m = NULL;
+ m = allocate_camera_metadata(entry_capacity, data_capacity);
+
+ add_test_metadata(m, 15);
+
+ size_t m_size = get_camera_metadata_size(m);
+ size_t dst_size = m_size + offsetRange;
+ uint8_t *dst = new uint8_t[dst_size];
+
+ for (size_t i = 0; i < offsetRange; i++) {
+ memset(dst, 0, dst_size);
+ memcpy(dst + i, m, m_size);
+ camera_metadata_t *m_shifted = (camera_metadata_t*)(dst + i);
+
+ int err = validate_camera_metadata_structure(m_shifted, &m_size);
+ if (i % validAlignment == 0) {
+ ASSERT_EQ(OK, err) << "For alignment shift " << i << ", expected OK" ;
+ } else {
+ ASSERT_EQ(CAMERA_METADATA_VALIDATION_SHIFTED, err) <<
+ "For alignment shift " << i << ", expected VALIDATION_SHIFTED" ;
+ }
+ }
+
+ delete[] dst;
+ FINISH_USING_CAMERA_METADATA(m);
+}