Shaka Packager SDK
box_definitions_comparison.h
1 // Copyright 2014 Google Inc. All rights reserved.
2 //
3 // Use of this source code is governed by a BSD-style
4 // license that can be found in the LICENSE file or at
5 // https://developers.google.com/open-source/licenses/bsd
6 //
7 // Overloads operator== for mp4 boxes, mainly used for testing.
8 
9 #ifndef PACKAGER_MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
10 #define PACKAGER_MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
11 
12 #include "packager/media/formats/mp4/box_definitions.h"
13 
14 namespace shaka {
15 namespace media {
16 
17 inline bool operator==(const SubsampleEntry& lhs, const SubsampleEntry& rhs) {
18  return lhs.clear_bytes == rhs.clear_bytes &&
19  lhs.cipher_bytes == rhs.cipher_bytes;
20 }
21 
22 namespace mp4 {
23 
24 inline bool operator==(const FileType& lhs, const FileType& rhs) {
25  return lhs.major_brand == rhs.major_brand &&
26  lhs.minor_version == rhs.minor_version &&
27  lhs.compatible_brands == rhs.compatible_brands;
28 }
29 
30 inline bool operator==(const ProtectionSystemSpecificHeader& lhs,
31  const ProtectionSystemSpecificHeader& rhs) {
32  return lhs.raw_box == rhs.raw_box;
33 }
34 
35 inline bool operator==(const SampleAuxiliaryInformationOffset& lhs,
36  const SampleAuxiliaryInformationOffset& rhs) {
37  return lhs.offsets == rhs.offsets;
38 }
39 
40 inline bool operator==(const SampleAuxiliaryInformationSize& lhs,
41  const SampleAuxiliaryInformationSize& rhs) {
42  return lhs.default_sample_info_size == rhs.default_sample_info_size &&
43  lhs.sample_count == rhs.sample_count &&
44  lhs.sample_info_sizes == rhs.sample_info_sizes;
45 }
46 
47 inline bool operator==(const SampleEncryptionEntry& lhs,
48  const SampleEncryptionEntry& rhs) {
49  return lhs.initialization_vector == rhs.initialization_vector &&
50  lhs.subsamples == rhs.subsamples;
51 }
52 
53 inline bool operator==(const SampleEncryption& lhs,
54  const SampleEncryption& rhs) {
55  return lhs.iv_size == rhs.iv_size &&
56  lhs.sample_encryption_entries == rhs.sample_encryption_entries;
57 }
58 
59 inline bool operator==(const OriginalFormat& lhs, const OriginalFormat& rhs) {
60  return lhs.format == rhs.format;
61 }
62 
63 inline bool operator==(const SchemeType& lhs, const SchemeType& rhs) {
64  return lhs.type == rhs.type && lhs.version == rhs.version;
65 }
66 
67 inline bool operator==(const TrackEncryption& lhs, const TrackEncryption& rhs) {
68  return lhs.default_is_protected == rhs.default_is_protected &&
69  lhs.default_per_sample_iv_size == rhs.default_per_sample_iv_size &&
70  lhs.default_kid == rhs.default_kid &&
71  lhs.default_crypt_byte_block == rhs.default_crypt_byte_block &&
72  lhs.default_skip_byte_block == rhs.default_skip_byte_block &&
73  lhs.default_constant_iv == rhs.default_constant_iv;
74 }
75 
76 inline bool operator==(const SchemeInfo& lhs, const SchemeInfo& rhs) {
77  return lhs.track_encryption == rhs.track_encryption;
78 }
79 
80 inline bool operator==(const ProtectionSchemeInfo& lhs,
81  const ProtectionSchemeInfo& rhs) {
82  return lhs.format == rhs.format && lhs.type == rhs.type &&
83  lhs.info == rhs.info;
84 }
85 
86 inline bool operator==(const MovieHeader& lhs, const MovieHeader& rhs) {
87  return lhs.creation_time == rhs.creation_time &&
88  lhs.modification_time == rhs.modification_time &&
89  lhs.timescale == rhs.timescale && lhs.duration == rhs.duration &&
90  lhs.rate == rhs.rate && lhs.volume == rhs.volume &&
91  lhs.next_track_id == rhs.next_track_id;
92 }
93 
94 inline bool operator==(const TrackHeader& lhs, const TrackHeader& rhs) {
95  return lhs.creation_time == rhs.creation_time &&
96  lhs.modification_time == rhs.modification_time &&
97  lhs.track_id == rhs.track_id && lhs.duration == rhs.duration &&
98  lhs.layer == rhs.layer && lhs.alternate_group == rhs.alternate_group &&
99  lhs.volume == rhs.volume && lhs.width == rhs.width &&
100  lhs.height == rhs.height;
101 }
102 
103 inline bool operator==(const SampleDescription& lhs,
104  const SampleDescription& rhs) {
105  return lhs.type == rhs.type && lhs.video_entries == rhs.video_entries &&
106  lhs.audio_entries == rhs.audio_entries;
107 }
108 
109 inline bool operator==(const DecodingTime& lhs, const DecodingTime& rhs) {
110  return lhs.sample_count == rhs.sample_count &&
111  lhs.sample_delta == rhs.sample_delta;
112 }
113 
114 inline bool operator==(const DecodingTimeToSample& lhs,
115  const DecodingTimeToSample& rhs) {
116  return lhs.decoding_time == rhs.decoding_time;
117 }
118 
119 inline bool operator==(const CompositionOffset& lhs,
120  const CompositionOffset& rhs) {
121  return lhs.sample_count == rhs.sample_count &&
122  lhs.sample_offset == rhs.sample_offset;
123 }
124 
125 inline bool operator==(const CompositionTimeToSample& lhs,
126  const CompositionTimeToSample& rhs) {
127  return lhs.composition_offset == rhs.composition_offset;
128 }
129 
130 inline bool operator==(const ChunkInfo& lhs, const ChunkInfo& rhs) {
131  return lhs.first_chunk == rhs.first_chunk &&
132  lhs.samples_per_chunk == rhs.samples_per_chunk &&
133  lhs.sample_description_index == rhs.sample_description_index;
134 }
135 
136 inline bool operator==(const SampleToChunk& lhs, const SampleToChunk& rhs) {
137  return lhs.chunk_info == rhs.chunk_info;
138 }
139 
140 inline bool operator==(const SampleSize& lhs, const SampleSize& rhs) {
141  return lhs.sample_size == rhs.sample_size &&
142  lhs.sample_count == rhs.sample_count && lhs.sizes == rhs.sizes;
143 }
144 
145 inline bool operator==(const CompactSampleSize& lhs,
146  const CompactSampleSize& rhs) {
147  return lhs.field_size == rhs.field_size && lhs.sizes == rhs.sizes;
148 }
149 
150 inline bool operator==(const ChunkLargeOffset& lhs,
151  const ChunkLargeOffset& rhs) {
152  return lhs.offsets == rhs.offsets;
153 }
154 
155 inline bool operator==(const SyncSample& lhs, const SyncSample& rhs) {
156  return lhs.sample_number == rhs.sample_number;
157 }
158 
159 inline bool operator==(const CencSampleEncryptionInfoEntry& lhs,
160  const CencSampleEncryptionInfoEntry& rhs) {
161  return lhs.is_protected == rhs.is_protected &&
162  lhs.per_sample_iv_size == rhs.per_sample_iv_size &&
163  lhs.key_id == rhs.key_id &&
164  lhs.crypt_byte_block == rhs.crypt_byte_block &&
165  lhs.skip_byte_block == rhs.skip_byte_block &&
166  lhs.constant_iv == rhs.constant_iv;
167 }
168 
169 inline bool operator==(const AudioRollRecoveryEntry& lhs,
170  const AudioRollRecoveryEntry& rhs) {
171  return lhs.roll_distance == rhs.roll_distance;
172 }
173 
174 inline bool operator==(const SampleGroupDescription& lhs,
175  const SampleGroupDescription& rhs) {
176  return lhs.grouping_type == rhs.grouping_type &&
177  lhs.cenc_sample_encryption_info_entries ==
178  rhs.cenc_sample_encryption_info_entries &&
179  lhs.audio_roll_recovery_entries == rhs.audio_roll_recovery_entries;
180 }
181 
182 inline bool operator==(const SampleToGroupEntry& lhs,
183  const SampleToGroupEntry& rhs) {
184  return lhs.sample_count == rhs.sample_count &&
185  lhs.group_description_index == rhs.group_description_index;
186 }
187 
188 inline bool operator==(const SampleToGroup& lhs,
189  const SampleToGroup& rhs) {
190  return lhs.grouping_type == rhs.grouping_type &&
191  lhs.grouping_type_parameter == rhs.grouping_type_parameter &&
192  lhs.entries == rhs.entries;
193 }
194 
195 inline bool operator==(const SampleTable& lhs, const SampleTable& rhs) {
196  return lhs.description == rhs.description &&
197  lhs.decoding_time_to_sample == rhs.decoding_time_to_sample &&
198  lhs.composition_time_to_sample == rhs.composition_time_to_sample &&
199  lhs.sample_to_chunk == rhs.sample_to_chunk &&
200  lhs.sample_size == rhs.sample_size &&
201  lhs.chunk_large_offset == rhs.chunk_large_offset &&
202  lhs.sync_sample == rhs.sync_sample &&
203  lhs.sample_group_descriptions == rhs.sample_group_descriptions &&
204  lhs.sample_to_groups == rhs.sample_to_groups;
205 }
206 
207 inline bool operator==(const EditListEntry& lhs, const EditListEntry& rhs) {
208  return lhs.segment_duration == rhs.segment_duration &&
209  lhs.media_time == rhs.media_time &&
210  lhs.media_rate_integer == rhs.media_rate_integer &&
211  lhs.media_rate_fraction == rhs.media_rate_fraction;
212 }
213 
214 inline bool operator==(const EditList& lhs, const EditList& rhs) {
215  return lhs.edits == rhs.edits;
216 }
217 
218 inline bool operator==(const Edit& lhs, const Edit& rhs) {
219  return lhs.list == rhs.list;
220 }
221 
222 inline bool operator==(const HandlerReference& lhs,
223  const HandlerReference& rhs) {
224  return lhs.handler_type == rhs.handler_type;
225 }
226 
227 inline bool operator==(const Language& lhs,
228  const Language& rhs) {
229  return lhs.code == rhs.code;
230 }
231 
232 inline bool operator==(const ID3v2& lhs, const ID3v2& rhs) {
233  return lhs.language == rhs.language && lhs.id3v2_data == rhs.id3v2_data;
234 }
235 
236 inline bool operator==(const Metadata& lhs, const Metadata& rhs) {
237  return lhs.handler == rhs.handler && lhs.id3v2 == rhs.id3v2;
238 }
239 
240 inline bool operator==(const CodecConfiguration& lhs,
241  const CodecConfiguration& rhs) {
242  return lhs.box_type == rhs.box_type && lhs.data == rhs.data;
243 }
244 
245 inline bool operator==(const PixelAspectRatio& lhs,
246  const PixelAspectRatio& rhs) {
247  return lhs.h_spacing == rhs.h_spacing && lhs.v_spacing == rhs.v_spacing;
248 }
249 
250 inline bool operator==(const VideoSampleEntry& lhs,
251  const VideoSampleEntry& rhs) {
252  return lhs.format == rhs.format &&
253  lhs.data_reference_index == rhs.data_reference_index &&
254  lhs.width == rhs.width && lhs.height == rhs.height &&
255  lhs.pixel_aspect == rhs.pixel_aspect && lhs.sinf == rhs.sinf &&
256  lhs.codec_configuration == rhs.codec_configuration;
257 }
258 
259 inline bool operator==(const DecoderSpecificInfoDescriptor& lhs,
260  const DecoderSpecificInfoDescriptor& rhs) {
261  return lhs.data() == rhs.data();
262 }
263 
264 inline bool operator==(const DecoderConfigDescriptor& lhs,
265  const DecoderConfigDescriptor& rhs) {
266  return lhs.buffer_size_db() == rhs.buffer_size_db() &&
267  lhs.max_bitrate() == rhs.max_bitrate() &&
268  lhs.avg_bitrate() == rhs.avg_bitrate() &&
269  lhs.object_type() == rhs.object_type() &&
270  lhs.decoder_specific_info_descriptor() ==
271  rhs.decoder_specific_info_descriptor();
272 }
273 
274 inline bool operator==(const ESDescriptor& lhs, const ESDescriptor& rhs) {
275  return lhs.esid() == rhs.esid() &&
276  lhs.decoder_config_descriptor() == rhs.decoder_config_descriptor();
277 }
278 
279 inline bool operator==(const ElementaryStreamDescriptor& lhs,
280  const ElementaryStreamDescriptor& rhs) {
281  return lhs.es_descriptor == rhs.es_descriptor;
282 }
283 
284 inline bool operator==(const DTSSpecific& lhs, const DTSSpecific& rhs) {
285  return lhs.sampling_frequency == rhs.sampling_frequency &&
286  lhs.max_bitrate == rhs.max_bitrate &&
287  lhs.avg_bitrate == rhs.avg_bitrate &&
288  lhs.pcm_sample_depth == rhs.pcm_sample_depth &&
289  lhs.extra_data == rhs.extra_data;
290 }
291 
292 inline bool operator==(const AC3Specific& lhs, const AC3Specific& rhs) {
293  return lhs.data == rhs.data;
294 }
295 
296 inline bool operator==(const EC3Specific& lhs, const EC3Specific& rhs) {
297  return lhs.data == rhs.data;
298 }
299 
300 inline bool operator==(const OpusSpecific& lhs, const OpusSpecific& rhs) {
301  return lhs.opus_identification_header == rhs.opus_identification_header &&
302  lhs.preskip == rhs.preskip;
303 }
304 
305 inline bool operator==(const AudioSampleEntry& lhs,
306  const AudioSampleEntry& rhs) {
307  return lhs.format == rhs.format &&
308  lhs.data_reference_index == rhs.data_reference_index &&
309  lhs.channelcount == rhs.channelcount &&
310  lhs.samplesize == rhs.samplesize && lhs.samplerate == rhs.samplerate &&
311  lhs.sinf == rhs.sinf && lhs.esds == rhs.esds && lhs.ddts == rhs.ddts &&
312  lhs.dac3 == rhs.dac3 && lhs.dec3 == rhs.dec3 && lhs.dops == rhs.dops;
313 }
314 
315 inline bool operator==(const WebVTTConfigurationBox& lhs,
316  const WebVTTConfigurationBox& rhs) {
317  return lhs.config == rhs.config;
318 }
319 
320 inline bool operator==(const WebVTTSourceLabelBox& lhs,
321  const WebVTTSourceLabelBox& rhs) {
322  return lhs.source_label == rhs.source_label;
323 }
324 
325 inline bool operator==(const TextSampleEntry& lhs, const TextSampleEntry& rhs) {
326  return lhs.config == rhs.config && lhs.label == rhs.label;
327 }
328 
329 inline bool operator==(const MediaHeader& lhs, const MediaHeader& rhs) {
330  return lhs.creation_time == rhs.creation_time &&
331  lhs.modification_time == rhs.modification_time &&
332  lhs.timescale == rhs.timescale && lhs.duration == rhs.duration &&
333  lhs.language == rhs.language;
334 }
335 
336 inline bool operator==(const VideoMediaHeader& lhs,
337  const VideoMediaHeader& rhs) {
338  return lhs.graphicsmode == rhs.graphicsmode &&
339  lhs.opcolor_red == rhs.opcolor_red &&
340  lhs.opcolor_green == rhs.opcolor_green &&
341  lhs.opcolor_blue == rhs.opcolor_blue;
342 }
343 
344 inline bool operator==(const SoundMediaHeader& lhs,
345  const SoundMediaHeader& rhs) {
346  return lhs.balance == rhs.balance;
347 }
348 
349 inline bool operator==(const SubtitleMediaHeader& lhs,
350  const SubtitleMediaHeader& rhs) {
351  return true;
352 }
353 
354 inline bool operator==(const DataEntryUrl& lhs, const DataEntryUrl& rhs) {
355  return lhs.flags == rhs.flags && lhs.location == rhs.location;
356 }
357 
358 inline bool operator==(const DataReference& lhs, const DataReference& rhs) {
359  return lhs.data_entry == rhs.data_entry;
360 }
361 
362 inline bool operator==(const DataInformation& lhs, const DataInformation& rhs) {
363  return lhs.dref == rhs.dref;
364 }
365 
366 inline bool operator==(const MediaInformation& lhs,
367  const MediaInformation& rhs) {
368  return lhs.dinf == rhs.dinf && lhs.sample_table == rhs.sample_table &&
369  lhs.vmhd == rhs.vmhd && lhs.smhd == rhs.smhd;
370 }
371 
372 inline bool operator==(const Media& lhs, const Media& rhs) {
373  return lhs.header == rhs.header && lhs.handler == rhs.handler &&
374  lhs.information == rhs.information;
375 }
376 
377 inline bool operator==(const Track& lhs, const Track& rhs) {
378  return lhs.header == rhs.header && lhs.media == rhs.media &&
379  lhs.edit == rhs.edit && lhs.sample_encryption == rhs.sample_encryption;
380 }
381 
382 inline bool operator==(const MovieExtendsHeader& lhs,
383  const MovieExtendsHeader& rhs) {
384  return lhs.fragment_duration == rhs.fragment_duration;
385 }
386 
387 inline bool operator==(const TrackExtends& lhs, const TrackExtends& rhs) {
388  return lhs.track_id == rhs.track_id &&
389  lhs.default_sample_description_index ==
390  rhs.default_sample_description_index &&
391  lhs.default_sample_duration == rhs.default_sample_duration &&
392  lhs.default_sample_size == rhs.default_sample_size &&
393  lhs.default_sample_flags == rhs.default_sample_flags;
394 }
395 
396 inline bool operator==(const MovieExtends& lhs, const MovieExtends& rhs) {
397  return lhs.header == rhs.header && lhs.tracks == rhs.tracks;
398 }
399 
400 inline bool operator==(const Movie& lhs, const Movie& rhs) {
401  return lhs.header == rhs.header && lhs.extends == rhs.extends &&
402  lhs.tracks == rhs.tracks && lhs.pssh == rhs.pssh;
403 }
404 
405 inline bool operator==(const TrackFragmentDecodeTime& lhs,
406  const TrackFragmentDecodeTime& rhs) {
407  return lhs.decode_time == rhs.decode_time;
408 }
409 
410 inline bool operator==(const MovieFragmentHeader& lhs,
411  const MovieFragmentHeader& rhs) {
412  return lhs.sequence_number == rhs.sequence_number;
413 }
414 
415 inline bool operator==(const TrackFragmentHeader& lhs,
416  const TrackFragmentHeader& rhs) {
417  return lhs.flags == rhs.flags && lhs.track_id == rhs.track_id &&
418  lhs.sample_description_index == rhs.sample_description_index &&
419  lhs.default_sample_duration == rhs.default_sample_duration &&
420  lhs.default_sample_size == rhs.default_sample_size &&
421  lhs.default_sample_flags == rhs.default_sample_flags;
422 }
423 
424 inline bool operator==(const TrackFragmentRun& lhs,
425  const TrackFragmentRun& rhs) {
426  return lhs.flags == rhs.flags && lhs.sample_count == rhs.sample_count &&
427  lhs.data_offset == rhs.data_offset &&
428  lhs.sample_flags == rhs.sample_flags &&
429  lhs.sample_sizes == rhs.sample_sizes &&
430  lhs.sample_durations == rhs.sample_durations &&
431  lhs.sample_composition_time_offsets ==
432  rhs.sample_composition_time_offsets;
433 }
434 
435 inline bool operator==(const TrackFragment& lhs, const TrackFragment& rhs) {
436  return lhs.header == rhs.header && lhs.runs == rhs.runs &&
437  lhs.decode_time == rhs.decode_time &&
438  lhs.auxiliary_offset == rhs.auxiliary_offset &&
439  lhs.auxiliary_size == rhs.auxiliary_size &&
440  lhs.sample_encryption == rhs.sample_encryption;
441 }
442 
443 inline bool operator==(const MovieFragment& lhs, const MovieFragment& rhs) {
444  return lhs.header == rhs.header && lhs.tracks == rhs.tracks &&
445  lhs.pssh == rhs.pssh;
446 }
447 
448 inline bool operator==(const SegmentReference& lhs,
449  const SegmentReference& rhs) {
450  return lhs.reference_type == rhs.reference_type &&
451  lhs.referenced_size == rhs.referenced_size &&
452  lhs.subsegment_duration == rhs.subsegment_duration &&
453  lhs.starts_with_sap == rhs.starts_with_sap &&
454  lhs.sap_type == rhs.sap_type &&
455  lhs.sap_delta_time == rhs.sap_delta_time;
456 }
457 
458 inline bool operator==(const SegmentIndex& lhs, const SegmentIndex& rhs) {
459  return lhs.reference_id == rhs.reference_id &&
460  lhs.timescale == rhs.timescale &&
461  lhs.earliest_presentation_time == rhs.earliest_presentation_time &&
462  lhs.first_offset == rhs.first_offset &&
463  lhs.references == rhs.references;
464 }
465 
466 inline bool operator==(const CueSourceIDBox& lhs,
467  const CueSourceIDBox& rhs) {
468  return lhs.source_id == rhs.source_id;
469 }
470 
471 inline bool operator==(const CueTimeBox& lhs,
472  const CueTimeBox& rhs) {
473  return lhs.cue_current_time == rhs.cue_current_time;
474 }
475 
476 inline bool operator==(const CueIDBox& lhs,
477  const CueIDBox& rhs) {
478  return lhs.cue_id == rhs.cue_id;
479 }
480 
481 inline bool operator==(const CueSettingsBox& lhs,
482  const CueSettingsBox& rhs) {
483  return lhs.settings == rhs.settings;
484 }
485 
486 inline bool operator==(const CuePayloadBox& lhs,
487  const CuePayloadBox& rhs) {
488  return lhs.cue_text == rhs.cue_text;
489 }
490 
491 inline bool operator==(const VTTEmptyCueBox& lhs, const VTTEmptyCueBox& rhs) {
492  return true;
493 }
494 
495 inline bool operator==(const VTTAdditionalTextBox& lhs,
496  const VTTAdditionalTextBox& rhs) {
497  return lhs.cue_additional_text == rhs.cue_additional_text;
498 }
499 
500 inline bool operator==(const VTTCueBox& lhs,
501  const VTTCueBox& rhs) {
502  return lhs.cue_source_id == rhs.cue_source_id && lhs.cue_id == rhs.cue_id &&
503  lhs.cue_time == rhs.cue_time && lhs.cue_settings == rhs.cue_settings &&
504  lhs.cue_payload == rhs.cue_payload;
505 }
506 
507 } // namespace mp4
508 } // namespace media
509 } // namespace shaka
510 
511 #endif // PACKAGER_MEDIA_FORMATS_MP4_BOX_DEFINITIONS_COMPARISON_H_
All the methods that are virtual are virtual for mocking.