summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2016-05-15 22:55:56 +0100
committerCarl Hetherington <cth@carlh.net>2016-05-15 22:55:56 +0100
commitbeb6a305c07342b0e4611d94e95f9d18416beb27 (patch)
tree029703fb5a5f2b89c9947cf20ac21e79c473c61c /src
parent1296b7a8d4cdca3798036e3f069d1b76c4d5db3c (diff)
Try to fix comparison of encrypted sound assets.
Diffstat (limited to 'src')
-rw-r--r--src/sound_asset.cc20
1 files changed, 8 insertions, 12 deletions
diff --git a/src/sound_asset.cc b/src/sound_asset.cc
index b9be77c8..1ccd9a48 100644
--- a/src/sound_asset.cc
+++ b/src/sound_asset.cc
@@ -41,6 +41,7 @@ using std::ostream;
using std::vector;
using std::list;
using boost::shared_ptr;
+using boost::dynamic_pointer_cast;
using namespace dcp;
SoundAsset::SoundAsset (boost::filesystem::path file)
@@ -121,26 +122,21 @@ SoundAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, NoteHand
return false;
}
- ASDCP::PCM::FrameBuffer buffer_A (1 * Kumu::Megabyte);
- ASDCP::PCM::FrameBuffer buffer_B (1 * Kumu::Megabyte);
+ shared_ptr<const SoundAsset> other_sound = dynamic_pointer_cast<const SoundAsset> (other);
for (int i = 0; i < _intrinsic_duration; ++i) {
- if (ASDCP_FAILURE (reader_A.ReadFrame (i, buffer_A))) {
- boost::throw_exception (DCPReadError ("could not read audio frame"));
- }
- if (ASDCP_FAILURE (reader_B.ReadFrame (i, buffer_B))) {
- boost::throw_exception (DCPReadError ("could not read audio frame"));
- }
+ shared_ptr<const SoundFrame> frame_A = get_frame (i);
+ shared_ptr<const SoundFrame> frame_B = other_sound->get_frame (i);
- if (buffer_A.Size() != buffer_B.Size()) {
+ if (frame_A->size() != frame_B->size()) {
note (DCP_ERROR, String::compose ("sizes of audio data for frame %1 differ", i));
return false;
}
- if (memcmp (buffer_A.RoData(), buffer_B.RoData(), buffer_A.Size()) != 0) {
- for (uint32_t i = 0; i < buffer_A.Size(); ++i) {
- int const d = abs (buffer_A.RoData()[i] - buffer_B.RoData()[i]);
+ if (memcmp (frame_A->data(), frame_B->data(), frame_A->size()) != 0) {
+ for (int i = 0; i < frame_A->size(); ++i) {
+ int const d = abs (frame_A->data()[i] - frame_B->data()[i]);
if (d > opt.max_audio_sample_error) {
note (DCP_ERROR, String::compose ("PCM data difference of %1", d));
return false;