Граф коммитов

60 Коммитов

Автор SHA1 Сообщение Дата
Jean-Yves Avenard 5b7e2de861 Bug 1367128: P3. Plumb in new eviction methods with MSE demuxer. r=gerald
MozReview-Commit-ID: HULNEfD3tRJ

--HG--
extra : rebase_source : ad96f8d40ff8efcbb86e1b1acb41f9d91dc3920d
2017-06-02 21:16:33 +02:00
Jean-Yves Avenard 8acff71452 Bug 1369382: Don't make hard assertion that the queued sample is a keyframe. r=kaku
When seeking, we go to the first IDR prior the seek target. However, if the MP4 sample table is invalid the frame returned may not be an IDR.

It is an error for that frame to not be a keyframe, so we do want to have way to detect them through logging. Change assertion to a soft assertion for that purpose.

MozReview-Commit-ID: EMgwRo1mYMp

--HG--
extra : rebase_source : 363a7e148db166b2130a7862a49f03d419d3fe22
2017-06-01 16:07:27 +02:00
Jean-Yves Avenard 7c84ef88b6 Bug 1359058: P2. Rely on container flags when seeking in plain MP4. r=gerald
This reverts part of bug 1300296. In the worse case we'll get a decoding error. But we're only trading a bad behaviour for another.

MozReview-Commit-ID: H0gF3FqZsU6

--HG--
extra : rebase_source : 54d38d24b40014351f943bff6860f5de9fc2f418
2017-04-26 16:43:54 +02:00
Jean-Yves Avenard fb5df1656c Bug 1366208: Make sure no empty RefPtr are ever stored. r=gerald
Should any error occurred while checking the tracks, we could end up with a null pointer stored in the list of track demuxers.

MozReview-Commit-ID: 13FllESrpbg

--HG--
extra : rebase_source : 335de6320c12f758858e462ed22fc9f9ffe8e305
2017-05-19 11:55:16 +02:00
JW Wang f2ea37e57b Bug 1357986 - Use helper functions of TimeUnit to make code more readable. r=kaku
1. using media::TimeUnit to save some typing.
2. replace TimeUnit() with TimeUnit::Zero().
3. replace TimeUnit::FromXXX(0) with TimeUnit::Zero().
4. replace TimeUnit::FromMicroseconds(std::numeric_limits<int64_t>::max()) with TimeUnit::FromInfinity().
5. replace some uses of int64_t with TimeUnit.
6. replace t > TimeUnit() with t.IsPositive().

MozReview-Commit-ID: 6hC94PXx86i

--HG--
extra : rebase_source : 1ea3b409e6ec12915f3e1a00359d6ff4152c8917
extra : intermediate-source : e31a12ad0e7a4840119036f261ed17eaaff85734
extra : source : ae07ee48000c4a52da0e4fd502b4d690ec51ce1f
2017-04-17 16:35:04 +08:00
JW Wang 302d82c85a Bug 1356530 - Change the type of MediaData::mTime to TimeUnit since int64_t is ambiguous. r=kaku
MozReview-Commit-ID: 4bVeqIuWO2O

--HG--
extra : rebase_source : d504ac15a6dc59ad42f3ab80faf23f629d74315f
extra : intermediate-source : 6e52995b6c8146451d98dffc62f6907755dc856e
extra : source : 82d2649cdafb5a6389f6858c23578811933580c9
2017-04-14 17:13:36 +08:00
JW Wang 235f1f55ed Bug 1356506 - change the type of MediaData::mTimecode to TimeUnit since int64_t is ambiguous. r=gerald
MozReview-Commit-ID: 7dO5OOUuORz

--HG--
extra : rebase_source : 1c1c020700d9180ef9f85d7e2e679f498ab71fce
extra : intermediate-source : d173c820bef7a113e28e9732c42e8c1af36160ab
extra : source : 04c08a780526ca3a5ac4d1a6f9b7ae30d9957e92
2017-04-14 14:52:14 +08:00
JW Wang 464497b945 Bug 1355756. P1 - change the type of MediaData::mDuration to TimeUnit. r=gerald
MozReview-Commit-ID: 3d4bUYtSuMI

--HG--
extra : rebase_source : 94c821b6d381421035e6a12cbe038436055c5822
extra : intermediate-source : 9a06beffc736486f47b9cf05e7f482e726d53068
extra : source : fdbdcd5c1474f04dc1dbde66fcf3a9ecec953053
2017-04-12 17:27:34 +08:00
Gerald Squelart 1564d36454 Bug 1341483 - MP4Metadata::GetTrackIndice() now also returns a success/error code - r=kinetik
MozReview-Commit-ID: BIgvy5eKNJl

--HG--
extra : rebase_source : 251d61df6136ab46d8efe33edd4199fa5aabd2f0
2017-03-15 16:55:50 +11:00
Gerald Squelart 2ea7fba755 Bug 1341483 - MP4Metadata::Crypto() now also returns a success/error code - r=kinetik
MozReview-Commit-ID: EywDv5JuDK6

--HG--
extra : rebase_source : 017cd996817b1aaa78f5c7bed9fa05da3baf442c
2017-02-27 21:32:03 +11:00
Gerald Squelart 7961918dfc Bug 1341483 - MP4Metadata::GetTrackInfo() now also returns a success/error code - r=kinetik
MozReview-Commit-ID: KQ3fJzZkrGW

--HG--
extra : rebase_source : b9f4324f50c81f4945c0a47e63af0cb616ba013e
2017-02-27 17:05:41 +11:00
Gerald Squelart c93b449e6b Bug 1341483 - MP4Metadata::GetNumberTracks() now also returns a success/error code - r=kinetik
In addition to the returned MediaResult, a special number-of-tracks value
(not just 0) indicates an unrecoverable error.

For Rust-vs-Stagefright comparison purposes, an error is considered the same
as 0 (because Stagefright never returns errors, but Rust may, so complaining
about that would be too noisy, and useless to us.)

MozReview-Commit-ID: IwadWSOIWr4

--HG--
extra : rebase_source : 29f53ee6a02a0431adb0b615a122a4e7b480108c
2017-02-27 13:36:59 +11:00
Gerald Squelart 1bbbbd132d Bug 1341483 - MP4Metadata::Metadata() now also returns a success/error code - r=kinetik
The returned MediaResult is used as error or warning in MP4Demuxer::Init().

MozReview-Commit-ID: Bnv4xG8bCJ4

--HG--
extra : rebase_source : c1952ed61396834b0cd7da58c9b64481a5c46ab1
2017-02-27 13:01:11 +11:00
Gerald Squelart 0cb411e982 Bug 1343437 - MP4Demuxer::Init resolves with a MediaResult - r=jya
If MP4Demuxer::Init detects some recoverable error (e.g., invalid tracks when
others may still be usable), it will eventually Resolve the promise with the
first warning.

Later on, errors/warnings from the MP4Metadata parser will also be handled, to
provide even better diagnostics.

MozReview-Commit-ID: E9Rly9dhXW3

--HG--
extra : rebase_source : cae214d0c80297bd61156dc1a305a186da0974fe
2017-02-27 10:10:28 +11:00
Alfredo.Yang 48c54615b1 Bug 1343461 - add a wrapper class to encapsulate rust/stagefright sample table. r=gerald
MozReview-Commit-ID: 4UgToySaEmb

--HG--
extra : rebase_source : b91481f844d94bd3a9f7e6bfeaa08391f117e967
2017-03-01 10:53:49 +08:00
Gerald Squelart bcdfea341d Bug 1343156 - Remove unnecessary MP4Metadata::HasCompleteMetadata - r=jya
MP4Metadata::Metadata() contains the same code at the beginning, so calling
HasCompleteMetadata() is unnecessary, so we should just remove it completely.

(Except to get a better error message, but this will be reinstated in an
upcoming bug.)

MozReview-Commit-ID: 2C3GI5fE0Ja

--HG--
extra : rebase_source : 2bdb6199222dcb0ca4012121a3fd4694b440be3e
2017-02-27 10:06:45 +11:00
Gerald Squelart d32a15fe74 Bug 1341454 - MP4Demuxer::Init() pre-caches everything from MP4Metadata - r=jya
MP4Demuxer::Init() used to just create a minimal MP4Metadata structure, and
report success/failure from that alone. But other later-called functions
(e.g.: GetNumberTracks, GetTrackDemuxer, etc.) could still fail with no useful
error reporting, when MP4Metadata tried to gather more of the needed
information.
Also, MP4Demuxer needed to keep this MP4Metadata around forever, even though
it could contain an arbitrary amount of extra data that is not needed.

With this patch, MP4Demuxer::Init() fetches all the data that could ever be
needed, and then discards the MP4Metadata.
This ensures that no late-initialization errors could creep in, and also helps
reporting errors early and with better diagnostic information.

This bug focuses on Init(), a later bug will give MP4Metadata the ability
to report its own even-more-detailed errors.

MozReview-Commit-ID: 1NjzOeKa1JI

--HG--
extra : rebase_source : 02781395aa538cf2be984b695a7bc7e2b9b039b7
2017-02-23 14:56:51 +11:00
Tom Tromey d2667a2b27 Bug 1060419 - make AppendPrintf and nsPrintfCString use Printf.h, r=froydnj
MozReview-Commit-ID: 2E8FoiNxU8L

--HG--
extra : rebase_source : 810ac727bef0751f24edea18c52e0ec170bf367d
2016-12-14 09:32:21 -07:00
Sylvestre Ledru 92ed0479a5 Bug 1338086 - Remove useless else blocks in order to reduce complexity in dom/media/ r=jya
MozReview-Commit-ID: 5ewd0uy2Kgk

--HG--
extra : rebase_source : 957074ab07621d73574a3919b1895798210747fc
2017-02-09 15:42:59 +01:00
Jean-Yves Avenard 71e0f46c33 Bug 1325707: P4. Fix coding style of MediaDataDemuxers. r=gerald
MozReview-Commit-ID: AV2lXwVZqLV

--HG--
extra : rebase_source : f66559f4d104516c8dfd2c9a146dfba8672dce33
2017-02-07 09:23:34 +01:00
Jay Harris efb83af7fa Bug 1318792 - Adds support for sbgp and sgpd boxes occuring in the sampletable r=jya
MozReview-Commit-ID: JaFGeZKFPRg

--HG--
extra : rebase_source : 07137a6923478b837794a1fa2cf617bfd08e41d6
2017-01-25 11:35:16 +13:00
Jay Harris 107910f23e Bug 1318792 - Adds support for sbgp and sgpd boxes in the traf box r=jya
MozReview-Commit-ID: 7aHEaCTJm22

--HG--
extra : rebase_source : d160d3d64f3848f697e648eae2dafa481800bedd
2017-01-25 12:10:35 +13:00
Gerald Squelart 038cba7f2e Bug 1313497 - Pass TimeUnit by const& in MediaDataDemuxer - r=jya
Thanks to the previous patch, MediaDataDemuxer::Seek and
SkipToNextRandomAccessPoint (and all overrides in derived demuxers) can now
take their TimeUnit parameter by const&.

MozReview-Commit-ID: 6CqfjAXZ7Yk

--HG--
extra : rebase_source : c3453e4432d9e0281cf5eba55217b0c1d6312f5b
2016-11-13 15:13:51 +11:00
Jean-Yves Avenard 20dc9102e8 Bug 1299072: P12. Use MediaResult for MediaDataDemuxer promises. r=gerald
MozReview-Commit-ID: JeQrmoHbb8m

--HG--
extra : rebase_source : 1f4581e5789f18b358a6f5bb5f8595cc7a75110b
2016-09-12 12:22:20 +10:00
Jean-Yves Avenard 75e90695b5 Bug 1300296: P2. Don't rely on MP4 container to properly report if a frame is a keyframe. r=kentuckyfriedtakahe
There are too many cases where the MP4 is improperly muxed and frames are incorrectly reported as keyframe.
Instead we now look inside the H264 stream and check for IDR frames.

We also ensure that the first frame returned after a seek is always a true keyframe.

For plain MP4, seeking in those broken files will lead to broken A/V sync. The only way to fix this would be to check for the frame type when reading the samples table. However, this would require to read the entire stream which isn't viable.

MozReview-Commit-ID: Cpv5y7HVD0N

--HG--
extra : rebase_source : 2f92032fe39ed6ad6c2b82438f405040b5e7d30c
2016-09-04 21:33:23 +10:00
Jean-Yves Avenard a18ecfafaa Bug 1280346: [mp4] Always use SPS dimensions if available. r=gerald,rillian
H264 decoders always use those anyway, so may as well use them in the demuxer if SPS NAL is available.
This guarantees that we have correct dimensions when reading the MP4 metadata, and will have the side benefit that when loadedmetadata is fired, the dimensions provided at the time will be final; not having to wait to decode the first frame.

MozReview-Commit-ID: 3j70Xqw8jJY

--HG--
extra : rebase_source : 6bc0f1fa1c2db35bcaa683cc1a68042d122e2892
2016-08-22 06:39:41 +10:00
Jean-Yves Avenard d9896af911 Bug 1289059: P1. Add MediaDemuxer generic logging. r=cpearce
MozReview-Commit-ID: 453QrMX1nWp

--HG--
extra : rebase_source : 679586d22a380e57c19c1e78b29e71282c08ecbf
2016-07-24 22:30:07 +10:00
Jonathan Watt b15368cfcb Bug 1279451 - Remove a lot of unnecessary includes of nsAutoPtr.h. rs=sparky 2016-06-07 21:10:18 +01:00
Jean-Yves Avenard cbd1ad11d5 Bug 1254311: [mp4] Ignore empty raw sample. r=cpearce
Some decoders (wmf) will return an error if fed an empty sample.

MozReview-Commit-ID: 2FF0cy41zYV
2016-03-09 13:32:26 +11:00
Jean-Yves Avenard fcaa513106 Bug 1240411: P4. Clean up readers headers. r=cpearce
Remove redundant virtual keyword and add missing override if any.
2016-01-19 19:47:31 +11:00
Jean-Yves Avenard bb0aacbf79 Bug 1227396: P13. Refactor how MP4 buffered range is calculated. r=cpearce
We now use an index of samples made of block of samples delimited by keyframes. The search is performed using a binary search. This allows to quickly find which blocks are found within the media cache.
On a 8 core mac pro, this leads to a 67% improvement on CPU time spent playing a long MP4 video (from 112s CPU to 45s CPU)

The optimisation is only possible if all mp4 data chunks are continuous (which they almost always are)
2015-11-30 11:29:37 +11:00
Jean-Yves Avenard fdf27ff498 Bug 1227396: P9. Remove unnecessary monitor. r=cpearce
The Index and MoofParser are now only used via the MP4Demuxer which is guaranteed to always be called on the same taskqueue.
2015-11-30 11:29:35 +11:00
Jean-Yves Avenard c8c275cee2 Bug 1227396: P7. Replace nsTArray<MediaByteRange> with dedicated MediaByteRangeSet object. r=cpearce 2015-11-30 11:29:34 +11:00
sajitk 582e1a55fa Bug 1219480 - Replace PRLogModuleInfo with LazyLogModule in the media directory. r=rillian 2015-11-15 14:49:01 +01:00
Wes Kocher f3a9eb2a26 Backed out changeset 1e5f3d1151d6 (bug 1219480) for cpp unittest bustage CLOSED TREE
--HG--
extra : commitid : BMVKq6cPeho
2015-11-11 09:36:56 -08:00
sajitk 3cbe348cdd Bug 1219480 - Replace PRLogModuleInfo with LazyLogModule in the media directory. r=rillian
--HG--
extra : rebase_source : c73098485fa005d914304fb6e7f8eba3c15e66dc
2015-11-11 06:52:00 +01:00
Nathan Froyd 01583602a9 Bug 1207245 - part 6 - rename nsRefPtr<T> to RefPtr<T>; r=ehsan; a=Tomcat
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout.  The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.

CLOSED TREE makes big refactorings like this a piece of cake.

 # The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
    xargs perl -p -i -e '
 s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
 s/nsRefPtr ?</RefPtr</g;   # handle declarations and variables
'

 # Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h

 # Handle nsRefPtr.h itself, a couple places that define constructors
 # from nsRefPtr, and code generators specially.  We do this here, rather
 # than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
 # things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
     mfbt/nsRefPtr.h \
     xpcom/glue/nsCOMPtr.h \
     xpcom/base/OwningNonNull.h \
     ipc/ipdl/ipdl/lower.py \
     ipc/ipdl/ipdl/builtin.py \
     dom/bindings/Codegen.py \
     python/lldbutils/lldbutils/utils.py

 # In our indiscriminate substitution above, we renamed
 # nsRefPtrGetterAddRefs, the class behind getter_AddRefs.  Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
    xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'

if [ -d .git ]; then
    git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
    hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi

--HG--
rename : mfbt/nsRefPtr.h => mfbt/RefPtr.h
2015-10-18 01:24:48 -04:00
Jean-Yves Avenard 628247fc4e Bug 1212176: Remove arguments passed to MediaDataDemuxer::NotifyDataArrived API. r=cpearce
Be more explicit on what it does and how it should be used.
2015-10-08 20:47:21 +11:00
Gerald Squelart 9c5368f80d Bug 1200326 - p5 - Moved fallible code from MP4TrackDemuxer constructor to caller - r=jya
In MP4TrackDemuxer constructor, getting the track info and indices could potentially fail, triggering crashing assertions.
The fallible work is now done before calling the constructor, and if it fails a nullptr is returned, which is correctly handled in MediaFormatReader.
Also reordered some MP4TrackDemuxer members for more natural construction.
2015-09-23 00:47:00 +02:00
Jean-Yves Avenard 023ff53978 Bug 1204757: P1. Update MediaDataDemuxer::Init() behavior. r=cpearce
A MediaDataDemuxer is now not to resolve the init promise until it has all the metadata.
Except MediaSource, all demuxers would be doing blocking read to scan for the metadata, and having partial metadata would be an error.
For MediaSource, we pass the NotifyDataArrived message which will cause the MediaSourceDemuxer to re-attempt to search for the metadata.

When used within MediaSource's TrackBuffersManager, a demuxer will never be created until we have received a complete init segment (this task is performed by the various ContainerParsers)
2015-09-16 18:14:17 +10:00
Jean-Yves Avenard 33e5945370 Bug 1204407: P2. Remove no longer required MediaDataDemuxer APIs. r=cpearce 2015-09-16 18:14:15 +10:00
Jean-Yves Avenard 71c5c9a7bf Bug 1204419: P4. Remove MediaDataDemuxer API no longer used. r=cpearce 2015-09-16 18:14:12 +10:00
Jean-Yves Avenard 1a98b5d4e0 Bug 1196398: [mp4] Do not allocate memory spanning across ftyp and moov atom. r=kentuckyfriedtakahe
A typical non-fragmented mp4 would have the ftyp atom located at the beginning of the mp4 and the moov at the end. We would to calculate the location of the metadata by spanning the byte range of the two atoms.
As such, we would typically allocate an amount of memory equivalent to the size of the mp4.

Instead we now reconstruct the metadata to only have the ftyp and moov atoms contiguously.
2015-08-21 15:35:31 +10:00
Jean-Yves Avenard af3e91f01a Revert "Bug 1196398: [mp4] Do not allocate memory spanning across ftyp and moov atom. r=kentuckyfriedtakahe"
This reverts commit 73156610be5f
2015-08-21 14:48:23 +10:00
Jean-Yves Avenard 600ae4f2bf Bug 1196398: [mp4] Do not allocate memory spanning across ftyp and moov atom. r=kentuckyfriedtakahe
A typical non-fragmented mp4 would have the ftyp atom located at the beginning of the mp4 and the moov at the end. We would to calculate the location of the metadata by spanning the byte range of the two atoms.
As such, we would typically allocate an amount of memory equivalent to the size of the mp4.

Instead we now reconstruct the metadata to only have the ftyp and moov atoms contiguously.
2015-08-21 13:10:34 +10:00
Alfredo Yang 8393a2233e Bug 1163486 - Remove MP4Reader. r=jya 2015-07-21 02:48:00 +02:00
Carsten "Tomcat" Book de3872af29 Backed out changeset 1704ea727e81 (bug 1163486) for at least b2g bustage 2015-07-21 08:42:54 +02:00
Alfredo Yang 23c919b20e Bug 1163486 - Remove MP4Reader. r=jya 2015-07-20 19:25:00 +02:00
Jean-Yves Avenard 3db4cce1f9 Bug 1169473: Re-add H264 telemetry. r=miketaylr 2015-07-16 14:31:52 +10:00
Jean-Yves Avenard 641d20eb39 Bug 1180403: P1. Ensure buffered index is up to date. r=cpearce 2015-07-09 11:06:07 +10:00