Commit Graph

547 Commits

Author SHA1 Message Date
Rintaro Kuroiwa 6a7b32641a Get MpdWriter working again
- ContentProtection elements were missing when using MpdWriter,
  therefore mpd_generator also did not generate ContentProtection.
- MpdWriter uses MpdNotifier now, instead of directly using MpdBuiler.
- Add mock_mpd_notifier.{h,cc} to be shared by several tests.

Change-Id: Id0f6213aa0c80e50294cd4193962054b0b5c2492
2015-09-22 15:00:03 -07:00
Kongqun Yang 3a5fdd2d9c Fix incorrect width/height in VisualSampleEntry for mp2t stream with cropping
Cropping is necessary if width/height are not exactly disivible by 16 due
to 16x16 macroblock size.

The width and height fields in VisualSampleEntry must correctly document
the cropped frame dimentions (visual presentation size) of the AVC stream
that is described by that entry.

Also fixes width/height in input mp4 and wvm streams if the values in
VisualSampleEntry / metadata do not match with the values in
AVCDecoderConfigurationRecord (SPS).

Issue: 39

Change-Id: Id55c5acf245bee3f4e66302b2042eb7d9c488c19
2015-09-18 17:42:52 +00:00
Rintaro Kuroiwa c75d319985 Live profile MPD did not have ContentProtection
- Because MpdBuilder no longer sets ContentProtection, live was broken.
- For key-rotation, <cenc:pssh> element is updated.

Change-Id: I45bb80a12faff39ccf5deb82439c0732ed9cea59
2015-09-16 15:50:00 -07:00
Rintaro Kuroiwa fa4a172b04 Add MpdNofitier::Flush() for explicit flushing
- Without the Flush() method the implementation had to do writes in
  almost all methods. Usually the user of the notifier knows when to
  write out the MPD.

Change-Id: Ic165d4594f01357a8ac7e8501eefa0f85c08d32f
2015-09-10 16:24:19 -07:00
Rintaro Kuroiwa d6fea8a8e6 Explicitly specify that availabilityStartTime is UTC
- Adding a 'Z' at the end means it is in UTC time.

Change-Id: I2e876c81449adcf3878e6d0d2b3c74f34edc8963
2015-09-10 11:55:12 -07:00
Rintaro Kuroiwa 0687b544b1 Fix SimpleMpdNotifier logic
- SimpleMpdNotifier didn't register the container ID to its map for VOD.
- AddContentProtection() was not implemented.

Change-Id: I5f1412c785ee5ad3d00910755ff283c404dd895c
2015-09-08 14:31:59 -07:00
Kongqun Yang 6e4460a245 Fix par_num / par_den not initialized problem in previous CL
Change-Id: I843d4e5ed60b05f9f68c298e11af1bdf3361ddf0
2015-08-28 21:28:36 +00:00
Kongqun Yang d71a37656a Find @par with smallest error with par_y in [1, 19]
Quotient reduction to minimal form does not work well in practice due to
rounding of the inputs.

Bug: 23432995

Change-Id: If333ab48accb7f6a3fac6ba4eb48ca7b9cee9826
2015-08-26 00:34:58 +00:00
Kongqun Yang 6cc81137a8 Add filters dependency to mp4 target
This fixes the build.

Change-Id: Iae0f6599d66ddcba82a3a826c22baf075e2bb560
2015-08-25 17:47:27 +00:00
Kongqun Yang 2a95367dd4 Move SAR extraction out of video_stream_info.cc
This fixes a circular dependency of media_base depends on filter and
filter depends on media_base.

Also added code to extract sar in WvmMediaParser if it is not yet
extracted when setting extra_data.

Change-Id: I1b5aef2444e4134c9b6663911ac5e5c4c220404a
2015-08-24 23:16:49 +00:00
Rintaro Kuroiwa 5a38dc9c12 Put Role element before Representation
- Follwing the MPD schema.

Change-Id: I2aadf43be224c7fb565592b1814e4bec74ac4800
2015-08-24 12:44:37 -07:00
Kongqun Yang 0614caed83 Fix a memory leak in mpd compare code
This only affects unittests.

Change-Id: I5deba5ce08c08970ec8b2de9ff5f6f7a7a5a436a
2015-08-20 19:24:52 +00:00
Kongqun Yang 368e94941b Add mailing list to README
Change-Id: I4d7b299391be5aa156a29b20932ee7fbd4e0c38d
2015-08-19 23:57:02 +00:00
Rintaro Kuroiwa 869d7f4620 Add generate_dash_if_iop_compliant_mpd flag for the driver
Change-Id: I0ad320848ad6eb36dfe358fe858a3d5f1f42dbcf
2015-08-18 13:13:41 -07:00
Rintaro Kuroiwa bb8cf87617 Add logic to correctly set subSegmentAlignment for VOD
- subSegmentAlignment logic assumed that all Representations were
  added before calling Representations::AddNewSegment() on any
  Representation in an AdaptationSet. It is not a valid assumption
  for VOD and is removed.

Change-Id: Ifb7e34ee103ee30027e45a804427baf281f3137c
2015-08-18 13:09:38 -07:00
Kongqun Yang e5b6096857 Generate tkhd and pasp boxes properly with non-square pixels
- Width/Height in tkhd box should be display resolution instead of
  coded resolution.
- pasp was not generated earlier.
- Assuming SAR as 1:1 if it failed to be extracted successfully.
- Also update test files for mp4_media_parser_unittest.

This fixes Issue #35.

Change-Id: Iedbe6a44465aac6723b6ea2de30aed180821eccd
2015-08-07 21:46:08 +00:00
Rintaro Kuroiwa 4f60bfc6c3 Call AddRole in DashIopCompliantMpdNotifier for video AdaptationSets
- All video AdaptationSets gets Role=main.

Change-Id: I476af6fd4b75491daf260640db88bfcc33dadb9c
2015-08-07 11:55:27 -07:00
Kongqun Yang 0ac14327c2 Handle large composition offset greater than (1<<31) properly
This fixes Issue #34: Sample composition offset greater than (1<<31)
is not supported.

Change-Id: I76b7bf7ceeaa9d9a7555f61842d4972a80ee48ca
2015-08-07 18:51:49 +00:00
Rintaro Kuroiwa 3d4872ec77 Add test that adds Role and ContentProtection elements
- ContentProtection elements must appear before Role elements.

Change-Id: If517a91c977487c1bd42cfe0b973aa0cfb8223f7
2015-08-06 16:46:13 -07:00
Rintaro Kuroiwa 48ff2fbe6a Call MpdNotifier::NotifyNewSegment for VOD
- Call NotifyNewSegment() in MpdNotifyMuxerListener::OnMediaEnd() to
  notify subsegments.
- This is necessary for MpdBuilder to calculate subsegmentAlignment.

Change-Id: I9359c408da4f616e543a6d9e568b010a90c90185
2015-08-05 11:49:15 -07:00
Rintaro Kuroiwa ab8f64ea2c Wire up Representation::SetSampleDuration() to update AdaptationSet frame rate
- Representation::SetSampleDuration() calls
  AdaptatoinSet::OnSetFrameRateForRepresentation() via
  RepresentationStateChangeListener.

Change-Id: I4a76c57798c9b6dc1e84ba47336ed1c78fbabfd6
2015-08-04 22:08:58 +00:00
Kongqun Yang 336435fcca Address one sample fragment issue #33
The segment duration was not reset after segment was finalized. It
was reset after adding one sample. This new sample was added to the
new fragment but was not recorded in the new segment, which resulted
in off-by-one error in the segment generation.

Change-Id: I1f9e00591be6b897773bf6caf94409b4bcd2277f
2015-08-04 14:19:00 -07:00
Rintaro Kuroiwa fca2bb1e44 Handle MpdNotifyMuxerListener::OnSampleDurationReady() for VOD
- Saves sample_duration in the media_info protobuf.
- When MpdNotifyMuxerListener::OnMediaEnd() is called, media_info passed
  to MpdNotifier::NotifyNewContainer() should contain the sample
  duration.
- Add tests for MpdNotifyMuxerListener.
- Moved common code from vod_media_info_dump_muxer_listener_unittest.cc
  and mpd_notify_muxer_listener_unittest.cc to
  muxer_listener_test_helper.cc.

Change-Id: Ibf2340076d45828d26f1af54a1ed8e95e5884c23
2015-08-03 13:07:18 -07:00
Leandro Moreira 44b2b07781 introduces docker for testing or development 2015-07-28 22:07:09 -03:00
Rintaro Kuroiwa c48a94d60f Add MpdNotifier that tries to generate IOP compliant MPD
- Add DashIopMpdNotifier for generating DASH-IF IOP v3 compliant MPD.

Change-Id: I201b4cdafde6bb963f74d4bbaee3fecc432cb9d7
2015-07-27 17:35:52 -07:00
Rintaro Kuroiwa aa6f60f9fc Add 'class' for friend classing
- Build fix

Change-Id: I2a73095feaf61174356b7af13ce5d3d83409a46f
2015-07-23 12:53:23 -07:00
Rintaro Kuroiwa 817b2a3a19 Add tests for SimpleMpdNotifier
- Add Mock{MpdBuilder, AdaptationSet, Representation}.

Change-Id: I7444e0fa955abedded83809fbb8b20ea6357e78a
2015-07-23 10:42:17 -07:00
Rintaro Kuroiwa fe851f692b Calculate (sub)SegmentAlignment for AdaptationSets
- AdaptationSet::OnNewSegmentForRepresentation() calculates whether the
  Representations are aligned by looking at the start time and duration.
  (Except that duration is not used in this implementation).
- Add RepresentationStateChangeListener to callback
  AdaptationSet::OnNewSegmentForRepresentation() from Representation.

Change-Id: I3c30bd6652880dabb9d5c619d8a733ffc789eec9
2015-07-22 21:16:15 -07:00
Rintaro Kuroiwa 8d84ebfed7 Change LocalFileTest to use CreateTemporaryFile
- The tests couldn't run in parallel using gtest-parallel
  (https://github.com/google/gtest-parallel) because all the tests
  used the same file.

Change-Id: I9a3d2c20c290fbf4bee2a1d79c4ce9bf802aefcf
2015-07-22 00:28:57 -07:00
Rintaro Kuroiwa 60c54975d7 MpdBuilder should not automatically add ContentProtection elements
- ContentProtection elements should be added explicitly by the
  AddContentProtection() methods.
- This is because some MPDs should have ContentProtection at
  AdaptationSet level instead of Representation.
- Change SimpleMpdNotifier, which uses MpdBuilder, to add
  ContentProtectionElements. The logic is moved from MuxerListener.
- Add Element class for specifying subelements for
  ContentProtectionElement.

Change-Id: I9bedfb3e5a5ac0b3d5c702f1e6e4a8608c978d1d
2015-07-20 10:37:20 -07:00
Rintaro Kuroiwa f492cccc1d Add a method to add roles to AdaptationSets
Change-Id: Ib0de3b2817870c58fda9bcabf4686c27d60a72c5
2015-07-14 10:32:30 -07:00
Rintaro Kuroiwa 4e2b70c939 Add method to set AdaptationSet@group
Change-Id: Iba147806417aa2a87525318b00a4980b68c38c39
2015-07-13 22:58:49 -07:00
Rintaro Kuroiwa 5c8efd332e Pass content protection information to MuxerListener
- The UUID and DRM name can be fetched from KeySource.
- Add ProtectedContent message to MediaInfo. The message contains basic
  information for the protected content, such as the default key ID for
  the content.
- The message is required to separate Representations with different
  content protection information into different AdaptationSets.

Change-Id: Ib9dc834ae0abf93b7ca0acdf52a865b1394a4816
2015-07-13 19:03:44 -07:00
Rintaro Kuroiwa 21e43966db Use pixel_{height,width} to set AdaptationSet@par
- Pass pixel_height and pixel_width from VideoStreamInfo to MediaInfo.
- par can only be set if all the Representations have the same
  picture aspect ratio. That is the ratio of sar_x*width:sar_y*height
  should all be the same.
- If there is a Representation that does not have the sar attribute set,
  par is also not set.

Change-Id: Id34c95e4a99da9ce028a9f35737cfe5bca9e5697
2015-07-01 11:53:09 -07:00
Rintaro Kuroiwa ec21b04fab Add edash_packager.ycm_extra_conf.py
- Adding YCM configuration file for edash packager.
- For now the developer has to do a Debug build before YCM starts
  working.
- Also PATH must be set to where 'clang' is so that the system headers
  are included (e.g. for classes in std namespace).

Change-Id: I934f69fa6d70b930bde3fd684fa5d6a8204c5631
2015-06-29 14:56:22 -07:00
Rintaro Kuroiwa 5f7a55b1db Set AdaptationSet contentType
- "video" and "audio" content type are set. No "text" support yet.

Change-Id: I15a9aae1aab15022627ca737668e6c97069a2e95
2015-06-29 14:15:16 -07:00
Rintaro Kuroiwa c3c971ebd9 Add pixel_{width,height} to VideoStreamInfo
- Added logic to container parsers to extract pixel width and height.
- If the container doesn't contain the pixel width and height of the
  stream and the stream is H264, this parses the SPS to get the
  sar_width and sar_height.
- If extracted sar_width and sar_height are 0s then they imply 1s.
- Add hb2_v_frag.mp4 for test media. This does not have a
  'pasp' box and has sar_width = 8 sar_height = 9.

Change-Id: I4a06ce95582547bec19adb7905e7612c5a1f359e
2015-06-29 11:17:28 -07:00
Rintaro Kuroiwa 2cf673055c Make {Video,Audio,Text}Info optional
- The fields used to be repeated but there is no use case at the moment.
- DASH IOP explicitly disallows segments with multiple tracks.

Change-Id: Ia0af2048210c546dfaa178735605a81052ea1123
2015-06-25 17:41:00 -07:00
Rintaro Kuroiwa a02e3b60df max{Width,Height,FrameRate} for AdaptationSet
- DASH IOP requires AdaptationSets with video Representations to have:
  @maxWidth (or @width if all the Representations have the same width).
  @maxHeight (or @height if all the Representations have the same width).
  @maxFrameRate (or @frameRate if all the Representations have the same
  frame rate).

Change-Id: I1247b7461237255aeb70b7fb40f78d4439f9c529
2015-06-25 11:20:13 -07:00
Rintaro Kuroiwa d685edef62 Pass sample duration to MPD
- Get the first sample duration in Segmenter.
- Pass the value all the way to Representation thru MuxerListener.

Change-Id: I76fd970f8140d359863363dc347958f680cca5ae
2015-06-23 13:12:17 -07:00
Rintaro Kuroiwa fcaac3de33 Check for sample aspect ratio, frame duration, and time scale
- These fields are required to generate DASH IOP compliant MPDs
  of type=video.

Change-Id: I142ecd662e454ae10d06d66aa5519171f5995303
2015-06-19 13:16:07 -07:00
Kongqun Yang b87d27a23b Use variants of the PKCS#1 PSS functions that specify the MGF1 hash
BoringSSL removes the variants that had been used, in which the hash
is given a default value. This change makes the code more compatible
with BoringSSL.

Change-Id: I665084c2e71593db1afd6baf182224fe0d23c944
2015-06-09 18:34:32 -07:00
Thomas Inskip 4cb5326355 Added missing VideoStreamInfo::trick_play_rate() accessor.
Change-Id: I88656efcb510d7ed2650fdea960ab1fe7e0c2b36
2015-06-03 09:53:48 -07:00
Thomas Inskip a14ea461fb Added trick_play_rate to VideoStreamInfo.
Added ability to query the Demuxer for the container name (type).

Change-Id: I328215f7c5badfe117c5419dd42f5262c568112a
2015-06-02 22:54:13 +00:00
Thomas Inskip 581cb1fc4d Added sample_description_index to 'tfhd' box for DASH-IF IOP compatiblity.
Change-Id: I1bb24f3b3f258625ce6958d6510aab49bedbf719
2015-06-02 14:56:58 -07:00
Thomas Inskip b56f5a0edf Fix for clang build break.
Change-Id: I32b59d96ae2465fe60db9646a4c336695e3190a0
2015-05-26 13:51:40 -07:00
Thomas Inskip a0dc98c13e Added support for ISO-BMFF files with trailing 'moov' boxes.
Change-Id: Icdc9058179a998617f865566d635ecdbd0e422c5
2015-05-22 14:11:46 -07:00
Thomas Inskip ada218c089 Added File Seek and Tell functionality.
Added ability to open files in direct-access mode (no buffering).

Change-Id: Icca71a60f6697967e7535a030c71414de95d8044
2015-05-21 12:48:20 -07:00
Kongqun Yang 57e3e79a3d Add info logging when packaging starts/finishes
Change-Id: I6adc2490e779242a34e3d2db11d349bd0c97eb9f
2015-05-15 09:23:36 -07:00
Kongqun Yang 8277236fe7 Add ProgressListener for progress updates
Bug: 19730025
Change-Id: If60d7629c69d84b245f0c96fb564704d7af82ea2
2015-05-14 19:09:02 -07:00