X-Git-Url: https://git.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Fsound_asset.cc;h=e3adff45d86dca0a432ef40555d8942111877995;hb=943af65e7833ef96bcfcfa957f1703d3a425c9ff;hp=ffafe46c316945bd5ffbca88b62f9ed9641b6627;hpb=a68b877d96a9e9f366f27752e071bc0e895e9dc7;p=libdcp.git diff --git a/src/sound_asset.cc b/src/sound_asset.cc index ffafe46c..e3adff45 100644 --- a/src/sound_asset.cc +++ b/src/sound_asset.cc @@ -16,6 +16,19 @@ You should have received a copy of the GNU General Public License along with libdcp. If not, see . + In addition, as a special exception, the copyright holders give + permission to link the code of portions of this program with the + OpenSSL library under certain conditions as described in each + individual source file, and distribute linked combinations + including the two. + + You must obey the GNU General Public License in all respects + for all of the code used other than OpenSSL. If you modify + file(s) with this exception, you may extend this exception to your + version of the file(s), but you are not obligated to do so. If you + do not wish to do so, delete this exception statement from your + version. If you delete this exception statement from all source + files in the program, then also delete it here. */ /** @file src/sound_mxf.cc @@ -29,17 +42,14 @@ #include "sound_asset_writer.h" #include "sound_asset_reader.h" #include "compose.hpp" -#include "KM_fileio.h" -#include "AS_DCP.h" #include "dcp_assert.h" +#include +#include #include #include -#include #include using std::string; -using std::stringstream; -using std::ostream; using std::vector; using std::list; using boost::shared_ptr; @@ -107,21 +117,48 @@ SoundAsset::equals (shared_ptr other, EqualityOptions opt, NoteHand boost::throw_exception (DCPReadError ("could not read audio MXF information")); } - if ( - desc_A.EditRate != desc_B.EditRate || - desc_A.AudioSamplingRate != desc_B.AudioSamplingRate || - desc_A.Locked != desc_B.Locked || - desc_A.ChannelCount != desc_B.ChannelCount || - desc_A.QuantizationBits != desc_B.QuantizationBits || - desc_A.BlockAlign != desc_B.BlockAlign || - desc_A.AvgBps != desc_B.AvgBps || - desc_A.LinkedTrackID != desc_B.LinkedTrackID || - desc_A.ContainerDuration != desc_B.ContainerDuration -// desc_A.ChannelFormat != desc_B.ChannelFormat || - ) { - - note (DCP_ERROR, "audio MXF picture descriptors differ"); + if (desc_A.EditRate != desc_B.EditRate) { + note ( + DCP_ERROR, + String::compose ( + "audio edit rates differ: %1/%2 cf %3/%4", + desc_A.EditRate.Numerator, desc_A.EditRate.Denominator, desc_B.EditRate.Numerator, desc_B.EditRate.Denominator + ) + ); return false; + } else if (desc_A.AudioSamplingRate != desc_B.AudioSamplingRate) { + note ( + DCP_ERROR, + String::compose ( + "audio sampling rates differ: %1 cf %2", + desc_A.AudioSamplingRate.Numerator, desc_A.AudioSamplingRate.Denominator, + desc_B.AudioSamplingRate.Numerator, desc_B.AudioSamplingRate.Numerator + ) + ); + return false; + } else if (desc_A.Locked != desc_B.Locked) { + note (DCP_ERROR, String::compose ("audio locked flags differ: %1 cf %2", desc_A.Locked, desc_B.Locked)); + return false; + } else if (desc_A.ChannelCount != desc_B.ChannelCount) { + note (DCP_ERROR, String::compose ("audio channel counts differ: %1 cf %2", desc_A.ChannelCount, desc_B.ChannelCount)); + return false; + } else if (desc_A.QuantizationBits != desc_B.QuantizationBits) { + note (DCP_ERROR, String::compose ("audio bits per sample differ: %1 cf %2", desc_A.QuantizationBits, desc_B.QuantizationBits)); + return false; + } else if (desc_A.BlockAlign != desc_B.BlockAlign) { + note (DCP_ERROR, String::compose ("audio bytes per sample differ: %1 cf %2", desc_A.BlockAlign, desc_B.BlockAlign)); + return false; + } else if (desc_A.AvgBps != desc_B.AvgBps) { + note (DCP_ERROR, String::compose ("audio average bps differ: %1 cf %2", desc_A.AvgBps, desc_B.AvgBps)); + return false; + } else if (desc_A.LinkedTrackID != desc_B.LinkedTrackID) { + note (DCP_ERROR, String::compose ("audio linked track IDs differ: %1 cf %2", desc_A.LinkedTrackID, desc_B.LinkedTrackID)); + return false; + } else if (desc_A.ContainerDuration != desc_B.ContainerDuration) { + note (DCP_ERROR, String::compose ("audio container durations differ: %1 cf %2", desc_A.ContainerDuration, desc_B.ContainerDuration)); + return false; + } else if (desc_A.ChannelFormat != desc_B.ChannelFormat) { + /* XXX */ } shared_ptr other_sound = dynamic_pointer_cast (other);