diff options
Diffstat (limited to 'chromium/media/filters/audio_file_reader.cc')
-rw-r--r-- | chromium/media/filters/audio_file_reader.cc | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/chromium/media/filters/audio_file_reader.cc b/chromium/media/filters/audio_file_reader.cc index cb81d920def..df95bac9730 100644 --- a/chromium/media/filters/audio_file_reader.cc +++ b/chromium/media/filters/audio_file_reader.cc @@ -276,9 +276,25 @@ bool AudioFileReader::OnNewFrame( sizeof(float) * frames_read); } } else { - audio_bus->FromInterleaved( - frame->data[0], frames_read, - av_get_bytes_per_sample(codec_context_->sample_fmt)); + int bytes_per_sample = av_get_bytes_per_sample(codec_context_->sample_fmt); + switch (bytes_per_sample) { + case 1: + audio_bus->FromInterleaved<UnsignedInt8SampleTypeTraits>( + reinterpret_cast<const uint8_t*>(frame->data[0]), frames_read); + break; + case 2: + audio_bus->FromInterleaved<SignedInt16SampleTypeTraits>( + reinterpret_cast<const int16_t*>(frame->data[0]), frames_read); + break; + case 4: + audio_bus->FromInterleaved<SignedInt32SampleTypeTraits>( + reinterpret_cast<const int32_t*>(frame->data[0]), frames_read); + break; + default: + NOTREACHED() << "Unsupported bytes per sample encountered: " + << bytes_per_sample; + audio_bus->ZeroFrames(frames_read); + } } (*total_frames) += frames_read; |