diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-05-07 09:01:35 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-05-07 09:01:35 +0000 |
commit | 6f1c353747fa438b22b59e951782b42f6a0912e1 (patch) | |
tree | b7a956054b5c93766940461ebb2160fb5e3e7c6c | |
parent | ea028d706e8c1761055632f29e8a40643bce1275 (diff) | |
parent | 1836946c9620d667cb262e8c6aa1521eb0b12179 (diff) | |
download | android_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.c | 28 | ||||
-rw-r--r-- | alsa_utils/include/alsa_device_proxy.h | 2 | ||||
-rw-r--r-- | audio_effects/Android.bp | 2 | ||||
-rwxr-xr-x | camera/docs/metadata-generate | 4 | ||||
-rw-r--r-- | camera/src/camera_metadata.c | 7 | ||||
-rw-r--r-- | camera/tests/camera_metadata_tests.cpp | 34 |
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); +} |