Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(354)

Side by Side Diff: audio_low_latency_output_win.cc

Issue 11408002: Make channel mixing checks explicit. (Closed) Base URL: svn://chrome-svn/chrome/branches/1271/src/media/audio/win/
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/audio/win/audio_low_latency_output_win.h" 5 #include "media/audio/win/audio_low_latency_output_win.h"
6 6
7 #include <Functiondiscoverykeys_devpkey.h> 7 #include <Functiondiscoverykeys_devpkey.h>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
368 368
369 return ((out_channels / static_cast<double> (in_channels)) * 369 return ((out_channels / static_cast<double> (in_channels)) *
370 number_of_input_bytes); 370 number_of_input_bytes);
371 } 371 }
372 372
373 LOG(ERROR) << "Down-mixing " << out_channels << "->" 373 LOG(ERROR) << "Down-mixing " << out_channels << "->"
374 << in_channels << " is not supported."; 374 << in_channels << " is not supported.";
375 return 0; 375 return 0;
376 } 376 }
377 377
378 static bool ChannelMixingSupported(int bytes_per_sample, int in_channels,
379 int out_channels) {
380 return bytes_per_sample == 2 &&
381 ((in_channels == 1 && out_channels == 2) ||
382 (in_channels == 1 && out_channels == 8) ||
383 (in_channels == 2 && out_channels == 6) ||
384 (in_channels == 2 && out_channels == 8) ||
385 (in_channels == 2 && out_channels == 1));
386 }
387
378 // static 388 // static
379 AUDCLNT_SHAREMODE WASAPIAudioOutputStream::GetShareMode() { 389 AUDCLNT_SHAREMODE WASAPIAudioOutputStream::GetShareMode() {
380 const CommandLine* cmd_line = CommandLine::ForCurrentProcess(); 390 const CommandLine* cmd_line = CommandLine::ForCurrentProcess();
381 if (cmd_line->HasSwitch(switches::kEnableExclusiveAudio)) 391 if (cmd_line->HasSwitch(switches::kEnableExclusiveAudio))
382 return AUDCLNT_SHAREMODE_EXCLUSIVE; 392 return AUDCLNT_SHAREMODE_EXCLUSIVE;
383 return AUDCLNT_SHAREMODE_SHARED; 393 return AUDCLNT_SHAREMODE_SHARED;
384 } 394 }
385 395
386 WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager, 396 WASAPIAudioOutputStream::WASAPIAudioOutputStream(AudioManagerWin* manager,
387 const AudioParameters& params, 397 const AudioParameters& params,
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 DCHECK(stream_switch_event_.IsValid()); 496 DCHECK(stream_switch_event_.IsValid());
487 } 497 }
488 498
489 WASAPIAudioOutputStream::~WASAPIAudioOutputStream() {} 499 WASAPIAudioOutputStream::~WASAPIAudioOutputStream() {}
490 500
491 bool WASAPIAudioOutputStream::Open() { 501 bool WASAPIAudioOutputStream::Open() {
492 DCHECK_EQ(GetCurrentThreadId(), creating_thread_id_); 502 DCHECK_EQ(GetCurrentThreadId(), creating_thread_id_);
493 if (opened_) 503 if (opened_)
494 return true; 504 return true;
495 505
496 // Down-mixing is currently not supported. The number of channels provided 506 if (format_.Format.nChannels != client_channel_count_ &&
henrika (OOO until Aug 14) 2012/11/08 08:27:42 We could perhaps keep some comments. You removed t
DaleCurtis 2012/11/08 18:39:30 The old ones are out of date and the LOG(ERROR) ex
497 // by the audio source must be less than or equal to the number of native 507 !ChannelMixingSupported(
498 // channels (given by endpoint_channel_count()) which is the channel count 508 format_.Format.wBitsPerSample / 8, client_channel_count_,
499 // used when opening the default endpoint device. 509 format_.Format.nChannels)) {
500 if (channel_factor() < 1 && channel_factor() != 0.5f) { 510 LOG(ERROR) << "Channel mixing is not supported.";
501 LOG(ERROR) << "Channel down-mixing is not supported";
502 RecordFallbackStats();
503 return false;
504 }
505
506 // Only 16-bit audio is supported in combination with channel up-mixing.
507 if (channel_factor() > 1 && (format_.Format.wBitsPerSample != 16)) {
508 LOG(ERROR) << "16-bit audio is required when channel up-mixing is active.";
509 RecordFallbackStats(); 511 RecordFallbackStats();
510 return false; 512 return false;
511 } 513 }
512 514
513 // Create an IMMDeviceEnumerator interface and obtain a reference to 515 // Create an IMMDeviceEnumerator interface and obtain a reference to
514 // the IMMDevice interface of the default rendering device with the 516 // the IMMDevice interface of the default rendering device with the
515 // specified role. 517 // specified role.
516 HRESULT hr = SetRenderDevice(); 518 HRESULT hr = SetRenderDevice();
517 if (FAILED(hr)) { 519 if (FAILED(hr)) {
518 RecordFallbackStats(); 520 RecordFallbackStats();
(...skipping 894 matching lines...) Expand 10 before | Expand all | Expand 10 after
1413 // are now re-initiated and it is now possible to re-start audio rendering. 1415 // are now re-initiated and it is now possible to re-start audio rendering.
1414 1416
1415 // Start rendering again using the new default audio endpoint. 1417 // Start rendering again using the new default audio endpoint.
1416 hr = audio_client_->Start(); 1418 hr = audio_client_->Start();
1417 1419
1418 restart_rendering_mode_ = false; 1420 restart_rendering_mode_ = false;
1419 return SUCCEEDED(hr); 1421 return SUCCEEDED(hr);
1420 } 1422 }
1421 1423
1422 } // namespace media 1424 } // namespace media
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698