Commit 5e2249a0 authored by crogers@google.com's avatar crogers@google.com

Bundle audio spatialization resources for use by the web audio API

BUG=none
TEST=none
(I tested locally on Mac OS X against all of my web audio API demos)

Review URL: http://codereview.chromium.org/6265009

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@72259 0039d316-1c4b-4281-b951-d872f2087c98
parent 3c02e0fd
...@@ -3798,7 +3798,9 @@ ...@@ -3798,7 +3798,9 @@
'$(SDKROOT)/System/Library/Frameworks/IOKit.framework', '$(SDKROOT)/System/Library/Frameworks/IOKit.framework',
'$(SDKROOT)/System/Library/Frameworks/OpenGL.framework', '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework',
'$(SDKROOT)/System/Library/Frameworks/QuartzCore.framework', '$(SDKROOT)/System/Library/Frameworks/QuartzCore.framework',
'$(SDKROOT)/System/Library/Frameworks/SecurityInterface.framework', '$(SDKROOT)/System/Library/Frameworks/AudioUnit.framework',
'$(SDKROOT)/System/Library/Frameworks/Accelerate.framework',
'$(SDKROOT)/System/Library/Frameworks/SecurityInterface.framework',
], ],
'mac_bundle_resources': [ 'mac_bundle_resources': [
'browser/gpu.sb', 'browser/gpu.sb',
......
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include "base/synchronization/lock.h" #include "base/synchronization/lock.h"
#include "base/time.h" #include "base/time.h"
#include "base/utf_string_conversions.h" #include "base/utf_string_conversions.h"
#include "grit/webkit_chromium_resources.h"
#include "grit/webkit_resources.h" #include "grit/webkit_resources.h"
#include "grit/webkit_strings.h" #include "grit/webkit_strings.h"
#include "third_party/WebKit/Source/WebKit/chromium/public/WebCookie.h" #include "third_party/WebKit/Source/WebKit/chromium/public/WebCookie.h"
...@@ -291,6 +292,59 @@ void WebKitClientImpl::traceEventEnd(const char* name, void* id, ...@@ -291,6 +292,59 @@ void WebKitClientImpl::traceEventEnd(const char* name, void* id,
TRACE_EVENT_END(name, id, extra); TRACE_EVENT_END(name, id, extra);
} }
namespace {
WebData loadAudioSpatializationResource(const char* name) {
#ifdef IDR_AUDIO_SPATIALIZATION_T000_P000
const size_t kExpectedSpatializationNameLength = 31;
if (strlen(name) != kExpectedSpatializationNameLength) {
return WebData();
}
// Extract the azimuth and elevation from the resource name.
int azimuth = 0;
int elevation = 0;
int values_parsed =
sscanf(name, "IRC_Composite_C_R0195_T%3d_P%3d", &azimuth, &elevation);
if (values_parsed != 2) {
return WebData();
}
// The resource index values go through the elevations first, then azimuths.
const int kAngleSpacing = 15;
// 0 <= elevation <= 90 (or 315 <= elevation <= 345)
// in increments of 15 degrees.
int elevation_index =
elevation <= 90 ? elevation / kAngleSpacing :
7 + (elevation - 315) / kAngleSpacing;
bool is_elevation_index_good = 0 <= elevation_index && elevation_index < 10;
// 0 <= azimuth < 360 in increments of 15 degrees.
int azimuth_index = azimuth / kAngleSpacing;
bool is_azimuth_index_good = 0 <= azimuth_index && azimuth_index < 24;
const int kNumberOfElevations = 10;
const int kNumberOfAudioResources = 240;
int resource_index = kNumberOfElevations * azimuth_index + elevation_index;
bool is_resource_index_good = 0 <= resource_index &&
resource_index < kNumberOfAudioResources;
if (is_azimuth_index_good && is_elevation_index_good &&
is_resource_index_good) {
const int kFirstAudioResourceIndex = IDR_AUDIO_SPATIALIZATION_T000_P000;
base::StringPiece resource =
GetDataResource(kFirstAudioResourceIndex + resource_index);
return WebData(resource.data(), resource.size());
}
#endif // IDR_AUDIO_SPATIALIZATION_T000_P000
NOTREACHED();
return WebData();
}
} // namespace
WebData WebKitClientImpl::loadResource(const char* name) { WebData WebKitClientImpl::loadResource(const char* name) {
struct { struct {
const char* name; const char* name;
...@@ -342,10 +396,16 @@ WebData WebKitClientImpl::loadResource(const char* name) { ...@@ -342,10 +396,16 @@ WebData WebKitClientImpl::loadResource(const char* name) {
{ "linuxProgressValue", IDR_PROGRESS_VALUE }, { "linuxProgressValue", IDR_PROGRESS_VALUE },
#endif #endif
}; };
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resources); ++i) {
if (!strcmp(name, resources[i].name)) { // Check the name prefix to see if it's an audio resource.
base::StringPiece resource = GetDataResource(resources[i].id); if (StartsWithASCII(name, "IRC_Composite", true)) {
return WebData(resource.data(), resource.size()); return loadAudioSpatializationResource(name);
} else {
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(resources); ++i) {
if (!strcmp(name, resources[i].name)) {
base::StringPiece resource = GetDataResource(resources[i].id);
return WebData(resource.data(), resource.size());
}
} }
} }
// TODO(jhawkins): Restore this NOTREACHED once WK stops sending in empty // TODO(jhawkins): Restore this NOTREACHED once WK stops sending in empty
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment