Closed Bug 1168674 (oggdemuxer) Opened 10 years ago Closed 8 years ago

OggReader should be moved to the new media architecture

Categories

(Core :: Audio/Video: Playback, defect, P5)

defect

Tracking

()

RESOLVED FIXED
mozilla50
Tracking Status
firefox41 --- affected
firefox50 --- fixed

People

(Reporter: jya, Assigned: jya)

References

(Depends on 1 open bug, Blocks 3 open bugs)

Details

Attachments

(9 files, 7 obsolete files)

106.02 KB, patch
Details | Diff | Splinter Review
58 bytes, text/x-review-board-request
jya
: review+
Details
58 bytes, text/x-review-board-request
jya
: review+
Details
58 bytes, text/x-review-board-request
jya
: review+
Details
58 bytes, text/x-review-board-request
brion
: review+
Details
58 bytes, text/x-review-board-request
brion
: review+
Details
58 bytes, text/x-review-board-request
cpearce
: review+
Details
58 bytes, text/x-review-board-request
mozbugz
: review+
Details
58 bytes, text/x-review-board-request
brion
: review+
Details
The OggReader should be split and have a OggDemuxer following the MediaDataDemuxer API The Opus and Vorbis decoder has to be moved to the MediaDataDecoder architecture so they can be reused with WebM
Brion, k17e mentioned that this is something you could help with...
Flags: needinfo?(brion)
Depends on: 1104475
I'll start looking this over... looks like I don't have permissions on bugzilla to just take the bug assignment. :)
Flags: needinfo?(brion)
Assigning to self
Assignee: nobody → brion
Excellent thank you... If you need any help, I'm on mozilla's IRC #media nickname jya. I've also joined #wikimedia-mobile
Status update: Got distracted with deploying our JavaScript Ogg player for Safari/IE/Edge on Wikipedia -- now that that's pretty much out of my way I'm getting back to finishing this code up! The new Vorbis and Opus decoder classes made for WebM should work for Ogg too, and I've made a first-pass adaptation of a Theora decoder class, which was pretty straightforward. The new OggDemuxer is a larger, trickier beast and is still in progress, but is coming along. A few notes: * Theora has header packets which need to be processed before the data packets; I'm modeling the transfer of the headers on that of the Vorbis decoder. (In WebM, Vorbis header packets are separate data in the track setup info; in Ogg they're regular packets. But they can be easily distinguished from the data packets, so it's easy to grab them all up, then feed them into the codec at init time as the WebM+Vorbis combo does.) * Ogg doesn't have timing information on every packet as the interfaces expect. Ogg instead has a codec-dependent 'granule pos' which is only updated on certain page boundaries. So, calculating an end timestamp for each packet requires some codec-dependent code to calculate the unspecified granule pos values, and to map them to timestamps in nanoseconds... It's not too invasive though, and doesn't feel worse to me than the few places that the WebM demuxer dives into libvpx to get packet timing information. * Still working on adapting the skeleton header stuff & seeking code. (Worst-case cases for duration fetch & seeking involve extra seeks.) This should mostly be grunt work moving code over from the old classes and refactoring it a bit. Once I get it a bit more tidied up I'll post a provisional patch here.
Status: NEW → ASSIGNED
(In reply to Brion Vibber from comment #5) > Status update: > > Got distracted with deploying our JavaScript Ogg player for Safari/IE/Edge > on Wikipedia -- now that that's pretty much out of my way I'm getting back > to finishing this code up! maybe we could use that instead no? > > * Theora has header packets which need to be processed before the data > packets; I'm modeling the transfer of the headers on that of the Vorbis > decoder. (In WebM, Vorbis header packets are separate data in the track > setup info; in Ogg they're regular packets. But they can be easily > distinguished from the data packets, so it's easy to grab them all up, then > feed them into the codec at init time as the WebM+Vorbis combo does.) we only needed it something "special" for Opus in order to handle pre-rolling. The current solution is a bit of a hack ; and instead we could add a new field specifically for pre-rolling in the MediaRawData header. To store any additional header required to decode data ; you have the ExtraData field which is passed at init Time in the TrackInfo object. > > * Ogg doesn't have timing information on every packet as the interfaces > expect. Ogg instead has a codec-dependent 'granule pos' which is only > updated on certain page boundaries. So, calculating an end timestamp for > each packet requires some codec-dependent code to calculate the unspecified > granule pos values, and to map them to timestamps in nanoseconds... It's not > too invasive though, and doesn't feel worse to me than the few places that > the WebM demuxer dives into libvpx to get packet timing information. likely just like vbr mp3 ; we only need an approximated timestamp. If it's an audio+video it would be an issue however. How do you do good A/V sync if there's no timestamps? > Once I get it a bit more tidied up I'll post a provisional patch here. Feel free to ping me on #media if you need any assistance
(In reply to Jean-Yves Avenard [:jya] from comment #6) > we only needed it something "special" for Opus in order to handle > pre-rolling. The current solution is a bit of a hack ; and instead we could > add a new field specifically for pre-rolling in the MediaRawData header. Pre-roll just changes the seeking logic slightly. I would've thought it would end up in the audio config.
(In reply to Jean-Yves Avenard [:jya] from comment #6) > we only needed it something "special" for Opus in order to handle > pre-rolling. The current solution is a bit of a hack ; and instead we could > add a new field specifically for pre-rolling in the MediaRawData header. Pre-roll (for seeking) or Pre-skip (discarding samples at the beginning)? For pre-skip, I think this is the right solution. The EBML elements in WebM are not codec-specific, and technically Vorbis needs something for pre-skip and end-trimming, too (muxing of Vorbis into MKV/WebM was partially broken before these elements got added, e.g., it would change the duration of the file by not handling pre-skip/end-trimming correctly). > To store any additional header required to decode data ; you have the > ExtraData field which is passed at init Time in the TrackInfo object. I think there are some problems with the way this is currently being done for Vorbis. I filed bug 1196353 with a better solution. > likely just like vbr mp3 ; we only need an approximated timestamp. > > If it's an audio+video it would be an issue however. How do you do good A/V > sync if there's no timestamps? There's enough information to reconstruct completely accurate per-packet timestamps. They're not stored in the file to reduce overhead. There's already code to do this in OggCodecState.cpp.
Component: Audio/Video → Audio/Video: Playback
Priority: -- → P5
(In reply to Timothy B. Terriberry (:derf) from comment #8) > > To store any additional header required to decode data ; you have the > > ExtraData field which is passed at init Time in the TrackInfo object. > > I think there are some problems with the way this is currently being done > for Vorbis. I filed bug 1196353 with a better solution. Adding bug 1196353 as blocking this one... > There's enough information to reconstruct completely accurate per-packet > timestamps. They're not stored in the file to reduce overhead. There's > already code to do this in OggCodecState.cpp. Great; OggCodecState looks pretty well-factored and I should be able to use it as-is in OggDemuxer without rewriting the timestamp handling code. I'm idling in #media -- will ping y'all when I have more questions or hit a snag. Thanks!
Depends on: 1196353
Could you post what you currently have or let us know when you think you can be done with this? I'm happy to take over
I've pulled out the rough code for another work sprint this weekend; I've got it building again (had to fix for nsRefPtr -> RefPtr etc), and will spend Saturday tidying up OggDemuxer to actually work. (Currently there's some logic bugs, a few missing bits in track info setup, and a lot of stray debug/copy-paste code sitting around in that class.) TheoraDecoder class _should_ work but is untested until the demuxer is actually working. Current work branch is on my github fork: https://github.com/brion/gecko-dev/commits/ogg https://github.com/brion/gecko-dev/commit/b200af912c641107b3a7188f2de4b6928b1e5821 The OggDemuxer sits alongside the old OggReader and can be switched out/in via the media.format-reader.ogg pref.
Ok, current head on that branch <https://github.com/brion/gecko-dev/commits/ogg> now plays back a few seconds of Ogg Vorbis before exploding, which makes me much happier. Will clean it up further and try to get Theora working later today.
(In reply to Brion Vibber from comment #13) > Ok, current head on that branch > <https://github.com/brion/gecko-dev/commits/ogg> now plays back a few > seconds of Ogg Vorbis before exploding, which makes me much happier. Will > clean it up further and try to get Theora working later today. I had Ogg/Vorbis from wikipedia playing last night. Problems were mostly due to the reading of Xiph headers (you access the members after they were freed). BTW, I don't believe that your change of making ReadHeader be called after parsing the stream is a good one. Not that it likely matter with real content, but with OggReader, an invalid stream or a stream where the headers couldn't be read would be skipped. While now it will just cause a failure and playback will not start. Also not sure why you change HasAudio/HasVideo to use a boolean. I think you starting from the WebM demuxer only made your job harder :)
I have Vorbis and Theora both working as of https://github.com/brion/gecko-dev/commits/ogg-december -- doing some code cleanup the rest of this week to make it less buggy and clean up some of the false starts noted above.
How's this going? If the code is working it would be good to start getting it reviewed.
Last few weeks have been ...... busy and interesting at Wikimedia Foundation the last few weeks, sorry for the late response! Current status: * last synced with mozilla main branch in mid-december * basic video & audio playback works * bunch of crasher bugs recently fixed * seeking needs to be rebuilt a bit * lots of exploratory missteps in the patch need to be cleaned up so the patch is legible I have to resync my local work branch with my github branch for a few changes; the current github branch is https://github.com/brion/gecko-dev/commits/ogg-december and I will post an updated branch on Monday when I'm able to get back to regularly scheduled development. Me and rillian are booking a catchup session for Tuesday March 8.
Is the march4 branch the latest one ?
Flags: needinfo?(brion)
That's the last branch point, let me make sure it's in sync with my work checkout...
thanks. Any chance you can make the changes available as patch over current central ? I've been fetching your branch for the past 4 hours and it has barely progressed.
Yep, will rebase it & post as a fresh patch so don't have to fetch from the separate git.
Flags: needinfo?(brion)
Ok, this patch takes the March branch rebased on master, plus fixes for internal API changes in gecko. Builds and plays, but seeking is still broken and I seem to have lost duration lookup somewhere along the way. I'll get the seeking/duration fixed up in the next day or two.
I'm happy to take over from there if you want to.
Attached patch ogg-work-june-09-2016.diff (obsolete) — Splinter Review
Updated work patch: * Fixed duration detection * Fixed Opus * Cleaned up some of the initialization order and crud, but not all of it Still have to hook seeking back up, will see if I can work that out later Thursday.
Attachment #8761316 - Attachment is obsolete: true
(In reply to Jean-Yves Avenard [:jya] from comment #23) > I'm happy to take over from there if you want to. Thanks, I'll go ahead and keep poking at the remaining issues rest of this week but feel free to take over when ready!
* indexed & bisection seek backend ported over from OggReader * fixed duration detection both indexed and non-indexed files * fixed packet time/duration for vorbis audio * some further cleanup Still some bugs in the seek, sometimes doesn't come up with the right final frame.
Attachment #8761526 - Attachment is obsolete: true
The first june patch didn't compile for me due to assert in the ogg demuxer using function that aren't defined. Otherwise, you are using tabs rather than spaces for indenting...
Thanks, I'll double-check the assertions and clean up indentations.
Removed bogus asserts miscopied from OggReader, fixed some stray tab indents. Now builds and runs with --enable-debug Note there is an assertion fired during bisection seek which needs to be actually fixed; I should have that and some further cleanup done tonight.
Attachment #8761842 - Attachment is obsolete: true
OggDemuxer now supports basic audio chaining, reports buffered times, and has some more seek fixes. Bisection seek in unbuffered time seems to wait until buffering is complete; I probably mistyped something when porting bits over from OggReader. Will keep poking on that. Seek also isn't properly skipping from keyframe to final destination; during the skip forward it's displaying frames which I'm pretty sure it shouldn't. I was under the impression that AccurateFrameSeekTask handles pushing the the decoder forward from the keyframe to the final seek point without displaying, but will double-check that I didn't do something wrong. On at least one video-only file with a seek index <https://upload.wikimedia.org/wikipedia/commons/transcoded/a/aa/Xylocopa_violacea_male_-_2012-10-23.webm/Xylocopa_violacea_male_-_2012-10-23.webm.480p.ogv> I'm seeing video decode continue at a non-keyframe; this may be due to packing of multiple frames in a single ogg page, will double-check it. Getting times for buffered ranges may be unnecessarily expensive as well, as on every call it will jump through the pages on buffer boundaries... and calls through FindStartTime etc cause resets of the queued packet states. Can probably make this more efficient by saving the offset->time points in a lookup table. Couple questions: do I need to be able to signal metadata changes such as changing to non-seekable when hitting a chaining boundary, or potentially the codecs changing at chaining boundary? (Most audio chaining cases can probably get away with just tossing the new data packets at the existing decoder, but I worry about needing to reinitialize from headers or such.) I'll do a little more fixing of the seek stuff, then do another cleanup pass on Sunday.
Attachment #8762130 - Attachment is obsolete: true
Updated patch fixes some seek bugs and a memory leak. * Seek now skips video packets from before the keyframe * ogg_packet structures are now freed when converting packet data to MediaRawPackets * fixed a couple stray bits from the patch
Attachment #8762323 - Attachment is obsolete: true
Some additional fixes: bisect seek during download now works. Fixed some packet structure memory leaks. Rebased against latest tree.
Attachment #8762487 - Attachment is obsolete: true
I'll take over just to incorporate the existing work and put the new reader behind a pref.
Assignee: brion → jyavenard
Blocks: 1288329
Blocks: 1289059
Attachment #8774728 - Flags: review?(jyavenard)
Attachment #8774729 - Flags: review?(jyavenard)
Attachment #8774730 - Flags: review?(jyavenard)
Attachment #8774734 - Flags: review?(gsquelart)
Not on by default yet. use media.format-reader.ogg preference Review commit: https://reviewboard.mozilla.org/r/67172/diff/#index_header See other reviews: https://reviewboard.mozilla.org/r/67172/
This ensure that the first sample demuxed will be identical to the first one demuxed following a seek to the beginning. Also, only demux the next packet when none is queued rather than all the time. Review commit: https://reviewboard.mozilla.org/r/67178/diff/#index_header See other reviews: https://reviewboard.mozilla.org/r/67178/
r?cpearce A hack was in place to ensure that the first returned sample would have a time of 0 so that the media start time would be 0. This was incorrect for two primary reasons: - The media start time is adjusted according to the first sample anyway. - When seeking to 0, the first sample would have a time different to the first sample decoded (when we want them to have the same time). Review commit: https://reviewboard.mozilla.org/r/67180/diff/#index_header See other reviews: https://reviewboard.mozilla.org/r/67180/
Attachment #8774731 - Flags: review?(brion)
Attachment #8774732 - Flags: review?(brion)
Attachment #8774733 - Flags: review?(cpearce)
Attachment #8774735 - Flags: review?(brion)
Attachment #8774728 - Flags: review?(jyavenard) → review+
Attachment #8774729 - Flags: review?(jyavenard) → review+
Attachment #8774730 - Flags: review?(jyavenard) → review+
Depends on: 1289438
Summary: OggReader should be move to the new media architecture → OggReader should be moved to the new media architecture
Attachment #8774734 - Flags: review?(gsquelart) → review+
Comment on attachment 8774731 [details] Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start. https://reviewboard.mozilla.org/r/67176/#review64346 Looks correct
Attachment #8774731 - Flags: review?(brion) → review+
Attachment #8774732 - Flags: review?(brion) → review+
Attachment #8774735 - Flags: review?(brion) → review+
Attachment #8774728 - Attachment description: Bug 1168674. [ogg] P1. Add OggDemuxer object. → Bug 1168674: [ogg] P1. Add OggDemuxer object.
Attachment #8774729 - Attachment description: Bug 1168674. [ogg] P2. Hook up new OggDemuxer. → Bug 1168674: [ogg] P2. Hook up new OggDemuxer.
Attachment #8774730 - Attachment description: Bug 1168674. [ogg] P3. Add theora MediaDataDecoder. → Bug 1168674: [ogg] P3. Add theora MediaDataDecoder.
Attachment #8774731 - Attachment description: Bug 1168674. [ogg] P4. Skip over header packets when seeking close to the start. → Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start.
Attachment #8774732 - Attachment description: Bug 1168674. [ogg] P5. Use common demuxing methods. → Bug 1168674: [ogg] P5. Use common demuxing methods.
Attachment #8774733 - Attachment description: Bug 1168674. [vorbis] P6. Do not tweak first decoded sample time. → Bug 1168674: [vorbis] P6. Do not tweak first decoded sample time.
Attachment #8774734 - Attachment description: Bug 1168674. [ogg] P7. Properly mark overridden methods. → Bug 1168674: [ogg] P7. Properly mark overridden methods.
Attachment #8774735 - Attachment description: Bug 1168674. [ogg] P8. Set dts to pts value. → Bug 1168674: [ogg] P8. Set dts to pts value.
Comment on attachment 8774728 [details] Bug 1168674: [ogg] P1. Add OggDemuxer object. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67170/diff/1-2/
Comment on attachment 8774729 [details] Bug 1168674: [ogg] P2. Hook up new OggDemuxer. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67172/diff/1-2/
Comment on attachment 8774730 [details] Bug 1168674: [ogg] P3. Add theora MediaDataDecoder. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67174/diff/1-2/
Comment on attachment 8774731 [details] Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67176/diff/1-2/
Comment on attachment 8774732 [details] Bug 1168674: [ogg] P5. Use common demuxing methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67178/diff/1-2/
Comment on attachment 8774733 [details] Bug 1168674: [vorbis] P6. Do not tweak first decoded sample time. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67180/diff/1-2/
Comment on attachment 8774734 [details] Bug 1168674: [ogg] P7. Properly mark overridden methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67182/diff/1-2/
Comment on attachment 8774735 [details] Bug 1168674: [ogg] P8. Set dts to pts value. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67184/diff/1-2/
Attachment #8775137 - Flags: review?(brion)
Comment on attachment 8775137 [details] Bug 1168674: [ogg] P8. Fix metadata retrieval. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67416/diff/1-2/
Attachment #8775137 - Flags: review?(brion) → review+
Comment on attachment 8774733 [details] Bug 1168674: [vorbis] P6. Do not tweak first decoded sample time. https://reviewboard.mozilla.org/r/67180/#review64604
Attachment #8774733 - Flags: review?(cpearce) → review+
Comment on attachment 8774730 [details] Bug 1168674: [ogg] P3. Add theora MediaDataDecoder. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67174/diff/2-3/
Comment on attachment 8774731 [details] Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67176/diff/2-3/
Comment on attachment 8774732 [details] Bug 1168674: [ogg] P5. Use common demuxing methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67178/diff/2-3/
Comment on attachment 8774733 [details] Bug 1168674: [vorbis] P6. Do not tweak first decoded sample time. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67180/diff/2-3/
Comment on attachment 8774734 [details] Bug 1168674: [ogg] P7. Properly mark overridden methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67182/diff/2-3/
Comment on attachment 8774735 [details] Bug 1168674: [ogg] P8. Set dts to pts value. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67184/diff/2-3/
Comment on attachment 8775137 [details] Bug 1168674: [ogg] P8. Fix metadata retrieval. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67416/diff/2-3/
Depends on: 1290058
Comment on attachment 8774728 [details] Bug 1168674: [ogg] P1. Add OggDemuxer object. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67170/diff/2-3/
Attachment #8775137 - Attachment description: Bug 1168674: [ogg] P9. Fix metadata retrieval. → Bug 1168674: [ogg] P8. Fix metadata retrieval.
Comment on attachment 8774729 [details] Bug 1168674: [ogg] P2. Hook up new OggDemuxer. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67172/diff/2-3/
Comment on attachment 8774730 [details] Bug 1168674: [ogg] P3. Add theora MediaDataDecoder. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67174/diff/3-4/
Comment on attachment 8774731 [details] Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67176/diff/3-4/
Comment on attachment 8774732 [details] Bug 1168674: [ogg] P5. Use common demuxing methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67178/diff/3-4/
Comment on attachment 8774733 [details] Bug 1168674: [vorbis] P6. Do not tweak first decoded sample time. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67180/diff/3-4/
Comment on attachment 8774734 [details] Bug 1168674: [ogg] P7. Properly mark overridden methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67182/diff/3-4/
Comment on attachment 8775137 [details] Bug 1168674: [ogg] P8. Fix metadata retrieval. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67416/diff/3-4/
Attachment #8774735 - Attachment is obsolete: true
Comment on attachment 8774728 [details] Bug 1168674: [ogg] P1. Add OggDemuxer object. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67170/diff/3-4/
Comment on attachment 8774729 [details] Bug 1168674: [ogg] P2. Hook up new OggDemuxer. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67172/diff/3-4/
Comment on attachment 8774730 [details] Bug 1168674: [ogg] P3. Add theora MediaDataDecoder. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67174/diff/4-5/
Comment on attachment 8774731 [details] Bug 1168674: [ogg] P4. Skip over header packets when seeking close to the start. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67176/diff/4-5/
Comment on attachment 8774732 [details] Bug 1168674: [ogg] P5. Use common demuxing methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67178/diff/4-5/
Comment on attachment 8774733 [details] Bug 1168674: [vorbis] P6. Do not tweak first decoded sample time. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67180/diff/4-5/
Comment on attachment 8774734 [details] Bug 1168674: [ogg] P7. Properly mark overridden methods. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67182/diff/4-5/
Comment on attachment 8775137 [details] Bug 1168674: [ogg] P8. Fix metadata retrieval. Review request updated; see interdiff: https://reviewboard.mozilla.org/r/67416/diff/4-5/
Pushed by jyavenard@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/dd8e8efffcb3 [ogg] P1. Add OggDemuxer object. r=me https://hg.mozilla.org/integration/autoland/rev/8577afd12830 [ogg] P2. Hook up new OggDemuxer. r=me https://hg.mozilla.org/integration/autoland/rev/06bab9aac05e [ogg] P3. Add theora MediaDataDecoder. r=me https://hg.mozilla.org/integration/autoland/rev/0152356f027f [ogg] P4. Skip over header packets when seeking close to the start. r=brion+1012 https://hg.mozilla.org/integration/autoland/rev/3db6ca9dc9cd [ogg] P5. Use common demuxing methods. r=brion+1012 https://hg.mozilla.org/integration/autoland/rev/864104ba08a6 [vorbis] P6. Do not tweak first decoded sample time. r=cpearce https://hg.mozilla.org/integration/autoland/rev/435bf9dd44f3 [ogg] P7. Properly mark overridden methods. r=gerald https://hg.mozilla.org/integration/autoland/rev/70cda19d2159 [ogg] P8. Fix metadata retrieval. r=brion+1012
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: