Commit Graph

125 Commits

Author SHA1 Message Date
Kongqun Yang 7fd94950d4 ProducerConsumerQueue unittest
Change-Id: I7cbd830e9bf93e1a5da75870f7a7a596708e5d5d
2014-04-18 18:35:41 -07:00
Kongqun Yang 7e9b8aa5a4 A thread safe producer consumer queue implementation
Change-Id: I827d8959d9c7c398178d083d01fafdb1779805da
2014-04-18 18:28:02 -07:00
Kongqun Yang 3f8b37a377 Implement ClosureThread
ClosureThread runs a Closure in a platform thread. Chromium Thread class
involves message loop, so we choose to implement our own based on the
lower level SimpleThread which wraps PlatformThread.

Change-Id: Ibb759f7debcc027c0764195ca93506f9a202110b
2014-04-19 01:03:29 +00:00
Kongqun Yang 2c8418fd22 Add 'sbgp' and 'sgpd' box definitions
sbgp: Sample to Group box
sgpd: Sample Group Descripton box

They are required for DASH Live support.

Change-Id: I2f3b55843c5148db60c7c3a6891ba825b59934ce
2014-04-19 00:57:39 +00:00
Kongqun Yang 833f27f687 Make Muxer::Initialize and Muxer::Finalize private
User should not need to care about how and when to call these APIs.
Internal code should call them automatically.

Change-Id: Ibc85a709d4e82ecc7b477986cabf09dcfc2e100c
2014-04-10 19:56:35 +00:00
Kongqun Yang 2498da675a Rename MP4GeneralSegmenter and MP4VODSegmenter
Rename MP4GeneralSegmenter to MultiSegmentSegmenter and MP4VODSegmenter
to SingleSegmentSegmenter.

Also drop MP4 from MP4Fragmenter and MP4Segmenter.

Change-Id: I5cefb88164516ec3588e0e3333a16f05b6277e7b
2014-04-09 20:27:16 +00:00
Kongqun Yang b34b997bcb Some more clean ups in media/base
1. Use size_t for MediaSample size;
2. Get rid of stringstream in media_sample.cc and media_stream.cc.

Change-Id: I11fe650305a732ae6a18546ac68692e03ecedae4
2014-04-09 18:39:51 +00:00
Kongqun Yang f9ae38f717 Doxygen documentation for media/base
Change-Id: I6a63bd762e9f32655baf9b40db32ababb6aa3b54
2014-04-07 18:09:23 -07:00
Kongqun Yang adeb1f16ec Doxygen comments for media/file
Change-Id: Iba142c50efe9eac169f1ebd016035e070865e742
2014-04-01 10:52:22 -07:00
Kongqun Yang 25b1038f5d Enable warnings and warnings-as-errors
The warnings and warnings-as-errors are enabled by set chromium_code to
1. Chromium build disables warnings and warnings-as-errors by default
on external contents.

And fix the errors with them enabled. Mostly defined but not used,
sign-unsign comparison, unsigned string formatting, and return value not
used etc.

Change-Id: I305b63924955a84172e98e0ebfe5aba0f11bdb37
2014-03-28 22:24:49 +00:00
Kongqun Yang 895a4daa4d Update happyhttp to latest revision
Latest rev of happyhttp fixes the bugs so patches are no longer needed.
Also removes http_fetcher_unittest from the build as it performs real
http requests to an external server.
2014-03-28 22:13:03 +00:00
Kongqun Yang 56c203c214 Remove TODOs
Some TODOs remain but are replaced with word NOTE instead. Some TODOs
are turned into bugs.

The patch are prepared using script:
find . -regex ".*/\(app\|media\|mpd\)/.*\.\(cc\|h\|gyp\)" \
  -exec sed -i "/TODO/d" {} \;
(remove the line containing TODO) with some post editing.

Change-Id: I6dd3539cce2bbeefee32d6307f78c13aacb94d1b
2014-03-28 14:30:27 -07:00
Kongqun Yang fddeb1feb1 Support for multiple audio/video tracks in a file
Remove --audio and --video command line options and replaced with
--stream. User can use --stream=video (default) to pull the first video
track from the source or --stream=audio to pull the first audio track.
The user may also use --stream={stream_id}, 0-based stream id to pull
the stream, e.g. --stream=0 for the first stream.

Change-Id: Ie1f93c2cc80a160a496b1d43ae3a658263d30cfc
2014-03-21 14:38:45 -07:00
Kongqun Yang af0725a887 Fix crash when parsing MP4 with MDAT before MOOV
Exit gracefully rather than crash with segmentation fault.

Bug: 13458666
Change-Id: Ic34bbd9aa2e2fa69c46a47f9cfeb326a910121a5
2014-03-20 16:33:00 -07:00
Kongqun Yang e21f436d97 Fix a compilation error due to base update 2014-03-19 18:57:29 -07:00
Kongqun Yang c1a7fd9c4a Change output messages to make it more human readable
Also remove formatting using stream which is not recommended per Google
C++ style guide.

Change-Id: I3930f0a453acc0258876c08c4266dcbb13757ac8
2014-03-19 18:42:27 -07:00
Kongqun Yang 5f3c0f7181 Remove the name after TODO
The change is made using command:
find . -regex ".*/\(app\|media\|mpd\)/.*\.\(cc\|h\|gyp\)" -exec sed -i
's,TODO(\w\+),TODO,g' {} \;

Then scan through the files and reformat them properly.

Change-Id: I13836cde38b9e30daf1fd8a847e203337f883e1b
2014-03-19 18:07:06 -07:00
Kongqun Yang e2b29552e9 Fix flaky packager_test due to timestamp diff
Change muxer interface to allow injection of testing clock. Also added
more packager_tests.

Change-Id: Ie580cbd7e79607a2c2b9df5d5d52ee4be108ff8f
2014-03-20 00:52:53 +00:00
Kongqun Yang cca3767c25 First draft doxygen documentation for media/mp4.
Change-Id: I13a28245168724a237a4653e298d6b835c24f17b
2014-03-19 17:39:42 -07:00
Kongqun Yang d2b38ce118 Remove webm which is not really supported yet
Change-Id: Idc94f8c193c07e93c3c910a95f8576a10a65a177
2014-03-14 14:00:08 -07:00
Kongqun Yang d90ca489f9 Widevine encryptor source unittest
Change-Id: I1b56d0a019480472eb462d8a39f81c4eb3c81a0e
2014-03-12 10:56:31 -07:00
Rintaro Kuroiwa f73f4bb773 Use default ContentProtection element specified by DASH for MP4
BUG: 13175714
TEST: media_event_unittest passes

Change-Id: I96a4ecaaf2a7152df21c1680949db74b6a47199f
2014-03-05 00:12:03 -08:00
Kongqun Yang 374324b042 Disable test_isolation_mode, glib, and x11 in GYP_DEFINES
This removes unnecessary library dependencies.

Change-Id: Id451766d1bedd7fbcd9cf9cf882de86ccb662486
2014-03-03 21:28:33 +00:00
Kongqun Yang b9f1996b68 Fix compilation errors after manifest update
Manifest was updated in CL 7debbbe19b158ea7377e229a17ec1d3d9d19d1b8
to point to Chromium LGKR CL 253526.

There are some API refactoring in base, which result in some code
changes in our packager source.

Change-Id: I52bf5a8a4f8fe0ebc566677efcd572332db8f618
2014-03-03 13:26:14 -08:00
Kongqun Yang 0a8dc6f606 Clean up *_iterator code in media/mp4.
Make functions const if needed and reformat the code using clang-format.

Change-Id: If2848ef6c3b61df5358286687d80213533125856
2014-02-21 10:52:01 -08:00
Rintaro Kuroiwa 4047cb78cc Enable media event unit tests
Change-Id: Ie3d5418a875da8f7091430b0aa73e3817b162248
2014-02-20 10:34:18 -08:00
Kongqun Yang b93f2020c8 Fix no ContentProtection element problem.
The original code used stream_info.is_encrypted() to check whether output
stream is encrypted; However, stream_info contains input stream
information and does not contain output stream infomation, which results
in incorrect status was passed to mpd generator. Fix the problem with
correct information from muxer.

Change on behalf of rkuroiwa after a discussion with him.

Bug: 12994813

Change-Id: I6e74b378a0fd7deedaaac166e913a66d312b8318
2014-02-20 01:22:09 +00:00
Kongqun Yang 58c4473d42 Add copyright information.
The information is generated by Edwin's copyright.py script with some
minor manual modifications.

Chromium's original copyright notice is not replaced.

Also add LICENSE file taken from
https://sites.google.com/a/google.com/ospo/releasing#TOC-BSD-License

Change-Id: I231f09af96a0a611b1ca81e95cab82e12d7f529b
2014-02-18 23:46:01 +00:00
Kongqun Yang 66e8f847e6 Clean up gyp.
Split packager.gyp into multiple smaller gyp definitions.

Change-Id: Icb38bd20f6e11ea41a975332c911d6bde7fc827d
2014-02-18 23:44:53 +00:00
Rintaro Kuroiwa 16c6c92643 Fix compilation warning when not using clang
Initialier lists caused gcc to raise warnings.

Change-Id: Ib9201d537082d311fb5f08e60773bc47ea4af896
2014-02-18 11:01:14 -08:00
Rintaro Kuroiwa 172cd59987 Use more data for creating VOD MediaInfo
MuxerListener takes MuxerOptions, reference time scale, and container
type which should be passed to MediaInfo creation.

Change-Id: I54c23476120e9ef77fc1df7e781b3a9acf0ff520
2014-02-12 15:51:18 -08:00
Rintaro Kuroiwa e65e2ea220 Add driver program flags for dumping MediaInfo
Change-Id: I314027b799271e95fc12b8716f5977be00013737
2014-02-07 13:47:06 -08:00
Rintaro Kuroiwa d07007a5d2 VodMediaInfoDumpMuxerListener unit tests
Change-Id: Ib9ff3737f084fc835457fc931162c9a2e9c441bc
2014-01-29 11:57:58 -08:00
Rintaro Kuroiwa 6d68f778ee Add ContainerType to MuxerListener
Container type should be passed to MuxerListener

Change-Id: I4941f17d68fab1565c6105a73e50fa9885bbd304
2014-01-28 00:32:09 -08:00
Kongqun Yang 522048b0d9 Add a muxer option to normalize PTS to start from 0
Some players do not like non-zero starting PTS. We need to do PTS
normalization to make it work on those players.

Bug: 12686658

Change-Id: I0958c25395e4ea87d8208db9a5f6c5816827eb99
2014-01-24 22:34:27 +00:00
Kongqun Yang 5b826ec637 Workaround server limitation with client retries.
Change-Id: Ia1c7b20682e50a5931a83be0f464d81acf7c07af
2014-01-23 18:50:54 -08:00
Kongqun Yang a8fb39fb27 Clean up CHECK macros in mp4 muxer code.
Change-Id: I887344c8f79bb3b45a17abe23bc0b2614c0dcd48
2014-01-23 23:26:34 +00:00
Rintaro Kuroiwa 90dae2716c Convert info from muxer to MediaInfo and dump to file
A MuxerListener implementation.
MediaInfo protobuf is dumped out to a file as human readable string.

Change-Id: I1b1d52b4d11d969efc07b413ff25cb26fb1aa2b4
2014-01-22 00:38:23 -08:00
Rintaro Kuroiwa 9b3ed17a96 Delegate MediaInfo generation for VOD
Info from muxer is delegated to a function in internal namespace to
create MediaInfo protobuf structure.

Change-Id: I7c00ce02c9ab23f022cf485e582d771ce61107cf
2014-01-22 00:24:05 -08:00
Kongqun Yang 596e59c8be Add RSA signing support in WidevineEncryptorSource
Defines an abstract request signer class and two implementations of the
signer class, AesRequestSigner for AES-CBC signing and RsaRequestSigner
for RSA-PSS signing.

WidevineEncryptorSource now uses Signer for signature generation.

Change-Id: I4528409a9be998535bccde40fdadb412e4bbdaf3
2014-01-21 18:32:08 -08:00
Kongqun Yang 85c91568f2 Add a new packager test for separate av muxer output
Also fix a bug that when Muxer::Finalize is called, the fragmenter
isn't initialized yet.

Change-Id: I826d1ad2519e553de8581ac4a334373cf1eb8067
2014-01-22 02:27:52 +00:00
Kongqun Yang e6df0ffb21 Fix asan error in aes_encryptor_unittest.
The error was caused by an incorrectly constructed test case.

Change-Id: I86006bd79d85f68d28d623da5c644b9037a12844
2014-01-17 01:42:40 +00:00
Kongqun Yang 8095e21c96 Clean up clang compilation errors.
Clang from Chromium enforces Chromium styles:
http://www.chromium.org/developers/coding-style,
http://www.chromium.org/developers/coding-style/chromium-style-checker-errors.

Change-Id: I8070739489a8109380578d1797801e981d119793
2014-01-17 01:41:45 +00:00
Kongqun Yang 76269c4706 Add static function File::ReadFileToString.
Change-Id: Ib50aea743662376c8c7da82bba4002932da4014c
2014-01-16 22:14:59 +00:00
Rintaro Kuroiwa e4d94be0d3 Fire MuxerListener events from MP4Muxer
Implementation only for OnMediaStart and OnMediaEnd.

Change-Id: I58a94c29b7e8cecf29b6202c7018592e5ce620b2
2014-01-14 18:25:07 -08:00
Kongqun Yang 57ca7d2144 Remove EncryptorSource argument from Muxer constructor.
Add a new function Muxer::SetEncryptorSource. Also clean up
packager test.

Change-Id: I5fee46e3d15e0c7a0f138c1d90f980b724887768
2014-01-15 01:48:41 +00:00
Kongqun Yang b6af6ca976 Move encryptor creation out of EncryptorSource::Initialize.
Use EncryptorSource::CreateEncryptor for encryptor creation.
EncryptorSource no longer owns the created encryptor.

Change-Id: I34d1f32262b7692bcb347d3b084fd06cbae7850f
2014-01-15 01:47:47 +00:00
Kongqun Yang e7472c4247 Fix a path conflict due to merging.
Change-Id: Ib84e9628e62d423141fcad5e9763fc87dd666c5e
2014-01-13 18:10:10 +00:00
Kongqun Yang 1eb5236c90 Rsa Key unittest.
Change-Id: I761db06762e594884f339aee66fec171c92b8108
2014-01-11 01:16:40 +00:00
Kongqun Yang a725f3fd02 Fix mp4 parsing failure if CTTS table is empty.
The original code assumes CompositionOffset is always valid and
has the same number of samples as other table, which is not true
if CTTS table is empty for non-fragmented mp4.

Change-Id: If4ecc1159de33202db4ab36df8e32c2a6900daf8
2014-01-10 16:36:22 -08:00
Kongqun Yang c73bfadd0e Move test utilities in media/base to media/test.
Also clean up test_data_util.cc.

Change-Id: Ic6038e072939d55fad7cc739b53ab9888b4251c1
2014-01-10 15:38:40 -08:00
Rintaro Kuroiwa faab1435ba Merge "A muxer listener implementation for VOD" 2014-01-10 23:35:12 +00:00
Kongqun Yang e4ebc9763c Rename AAC to AACAudioSpecificConfig.
Change-Id: Idda2db1f2cdde6c2c220830c2681bef209ad4ce2
2014-01-10 23:34:50 +00:00
Rintaro Kuroiwa 1a28e0c475 A muxer listener implementation for VOD
Change-Id: I48890799deb7cda66d477392a671bbd8c01a9dbe
2014-01-10 15:32:13 -08:00
Kongqun Yang ffc4a82460 Implement RsaPrivateKey and RsaPublicKey.
Used for message signing, signature verification, encryption and
decryption using RSA algorithm.

Change-Id: Icacd5a994c532a7bd4179c44e98c3ee9db744e83
2014-01-10 22:28:20 +00:00
Kongqun Yang 1e7080dda6 Implement Widevine encryptor source.
Use AES CBC signing for now. Rsa signing is not implemented yet.

Change-Id: Ife52ac098e9a82d4e40bbe0c0156f435a67c1aac
2014-01-10 14:24:15 -08:00
Kongqun Yang 577f899794 Implement AES CBC encryption/decrytion.
Change-Id: I017b02b5e8fc64c280a8245b72be89e1cf047f26
2014-01-10 21:33:09 +00:00
Rintaro Kuroiwa 0f3056b551 Use scoped_ptr for box ownership transfer
MP4Muxer passes ownership of ftyp and moov box to MP4Segmenter.

Change-Id: Iae7c7161560c744d8d3e7e5382450e7d056112ec
2014-01-08 12:06:04 -08:00
Kongqun Yang 1b5c3b5316 MP4 Muxer implementation.
Change-Id: I2aeb506e5bf7e2301e855456688273fe5f3988a2
2014-01-07 17:40:37 -08:00
Kongqun Yang 01646837e1 Implement write function for cenc and es_descriptor.
And MP4 code clean ups due to mp4 box changes.

Change-Id: I712b2dceb5038bfefa14097fe2fb2ab1fb913cb5
2014-01-07 16:59:52 -08:00
Kongqun Yang dccb069ffc A simple HTTPFetcher implementation using happyhttp.
Change-Id: I4f64d46ca4873711300ae175c5f5646ca1a7c366
2014-01-06 22:02:36 +00:00
Kongqun Yang 636baf9b21 MP4 Box unittest.
Change-Id: I1ed9b0108f5da4c52a3e33514ac4fd952f6616d0
2014-01-02 17:14:53 -08:00
Kongqun Yang 57474b31d6 Implement mp4 box read/write.
The box may be optimized if necessary during writing.

Change-Id: I7a46e72a0bcbeacb23085a87e1f0df3a826e4da7
2014-01-02 17:12:51 -08:00
Kongqun Yang 0f3bc4b6b4 Implement base mp4 box objects: Box and FullBox.
Change-Id: Ic1acc0f7ec3999d5270609a8836dbbde7f0d1c0f
2014-01-03 00:58:09 +00:00
Rintaro Kuroiwa b6e127416b MuxerListener interface
Muxer event handler interface.

Change-Id: Iee4b43c49ae9a105bbadb61b6ae9ed2e66bfaba2
2014-01-02 10:44:51 -08:00
Kongqun Yang 3318ad715d Define BoxBuffer which wraps mp4 box read/write.
BoxBuffer wraps either BoxReader for reading or BufferWriter for writing.
Thus it is capable of doing either reading or writing, but not both.

Change-Id: Id57370755a586bfdef1291a23af29f5b1feec903
2013-12-12 23:49:17 +00:00
Kongqun Yang e9b77add23 Implemented FixedEncryptorSource.
FixedEncryptorSource takes hardcoded key id and content key.
Implemented an AES Encryptor using OpenSSL.

Change-Id: I59ba9a41fc0f40925d697045dd1b147b7351c2f9
2013-12-10 19:29:48 -08:00
Kongqun Yang 4f1aab5e51 A simple BufferWriter implementation.
The BufferWriter is capable of appending various data types to buffer.
No optimization is done yet. We may consider optimize it for
appending (adding data to the tail) later.

Change-Id: I3b8e749e410c7ea4d4f2fb855e27744131c63cb0
2013-12-03 17:27:19 -08:00
Kongqun Yang 3c2abdafb7 Move BufferReader to media/base.
Added new functions ReadNBytesInto8(s) and several other minor
changes.

Change-Id: I175fd3be388fcfd04fc205e25ab7dec4c8b004ff
2013-12-02 17:11:03 -08:00
Kongqun Yang dc88702315 Removed EditList, added NAL and several other cleanup.
Change-Id: I2658eae0789f1c4e8d0534a6ff70267058bee2fc
2013-11-25 17:21:19 -08:00
Kongqun Yang edf74fc89f Demuxer, MediaStream, File and Status implementations.
Also includes a dummy packager_test with TestingMuxer.

Change-Id: I6a6e6dd77e343ef742adc1846ede203993628943
2013-11-11 18:13:51 -08:00
Kongqun Yang 3f3d9a6b76 Add duration, language, codec data to stream info.
Change-Id: I83d221fd36adb53ccf5629c80b137ba0ec730d55
2013-11-12 02:04:32 +00:00
Kongqun Yang db7602f42e Implemented non-fragmented mp4 parsing support.
Change-Id: I956704d1bf7d2d018ad65343b462c62b5042aba6
2013-10-10 18:04:32 -07:00
Kongqun Yang 338e3342b0 Create MP4MediaParser and its dependents.
Create new classes: StreamInfo, AudioStreamInfo, VideoStreamInfo,
MediaParser, MediaSample, MP4MediaParser.

Change-Id: I19c2fc73964d9f8fc90acaddd1783f4e6ff87d07
2013-10-03 16:00:54 -07:00
Kongqun Yang 0f24c7f9ac Start with media/mp4, media/webm and base codes from Chromium. 2013-09-23 18:37:14 -07:00