Closed
Bug 823646
Opened 13 years ago
Closed 12 years ago
Certain H.264 movie are not shown properly with media.windows-media-foundation.enabled = true
Categories
(Core :: Audio/Video, defect)
Tracking
()
RESOLVED
FIXED
mozilla21
People
(Reporter: alice0775, Assigned: cpearce)
References
(Blocks 1 open bug, )
Details
(Whiteboard: [ietestdrive])
Attachments
(2 files)
|
583.08 KB,
image/png
|
Details | |
|
12.29 KB,
patch
|
padenot
:
review+
|
Details | Diff | Splinter Review |
Build Identifier:
http://hg.mozilla.org/mozilla-central/rev/21195f52311c
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20121220 Firefox/20.0 ID:20121220030912
See report http://forums.mozillazine.org/viewtopic.php?p=12557309#p12557309 .
Certain h.264 movie are not show properly. sound is ok.
- http://ie.microsoft.com/testdrive/Graphics/VideoFormatSupport/Default.html
- http://devfiles.myopera.com/articles/4791/0.htm
- http://easyhtml5video.com
This problem does not happen in Windows8.
Steps to reproduce:
1. Make sure media.windows-media-foundation.enabled = true
2. Open http://ie.microsoft.com/testdrive/Graphics/VideoFormatSupport/Default.html
3. Play back if necessary
Actual results:
Diagonal stripe pattern is displayed
| Reporter | ||
Updated•13 years ago
|
Summary: Certain H.264 movie are not show properly with media.windows-media-foundation.enabled = true → Certain H.264 movie are not shown properly with media.windows-media-foundation.enabled = true
Comment 2•13 years ago
|
||
An example of an H.264 video that works:
http://www.quirksmode.org/html5/tests/video.html
Comment 4•12 years ago
|
||
Example URL from my dupe: http://graphics8.nytimes.com/packages/video/multimedia/bundles/projects/2012/AvalancheDeploy/airbag_final.mp4
and from that bug:
(In reply to Ted Mielczarek [:ted.mielczarek] from comment #1)
> FWIW:
>
> $ ffprobe ~/airbag_final.mp4
> avprobe version 0.8.4-4:0.8.4-0ubuntu0.12.04.1, Copyright (c) 2007-2012 the
> Libav developers
> built on Nov 6 2012 16:51:33 with gcc 4.6.3
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/home/luser/airbag_final.mp4':
> Metadata:
> major_brand : mp42
> minor_version : 0
> compatible_brands: mp42mp41
> creation_time : 2012-12-10 23:34:14
> Duration: 00:00:05.00, start: 0.033367, bitrate: 1288 kb/s
> Stream #0.0(eng): Video: h264 (Main), yuv420p, 200x312 [PAR 1:1 DAR
> 25:39], 1277 kb/s, 29.97 fps, 29.97 tbr, 29970 tbn, 59.94 tbc
> Metadata:
> creation_time : 2012-12-10 23:34:14
| Assignee | ||
Comment 5•12 years ago
|
||
The problem is that on Windows 7 the video stream media type changes, in particular the frame size changes, which messes up our calculation of where the YCbCr planes are in the output video frames. I don't know why, maybe WMF is getting the frame size from metadata, and then the actual frame size is different.
Anyway, the solution is to check the |flags| returned by IMFSourceReader for MF_SOURCE_READERF_CURRENTMEDIATYPECHANGED and if so reconfigure the our reader to handle the new video frame geometry.
I'll also add a check for this on the audio decode, but I won't handle it. I'm not sure if media type changes happen in audio in WMF in practice.
| Assignee | ||
Comment 6•12 years ago
|
||
* Detect video media type changes, and reconfigure the reader to handle new video frame geometries.
* Stop decoding audio upon audio media type changes. If we encounter audio media type changes in the wild we can fix it properly; I'm not sure if it happens in actual media or not, but I think it unlikely.
* Handle "pan and scan", "minimum aperture", and "geometric aperture", this allows the media to specify a region of the video frame as being displayed. I don't think we'll encounter this in MP4, but we should handle it just in case.
* Make some line endings consistent in WMDecoder.cpp.
* Remove WMFReader::mVideoWidth, it's not necessary to store it.
| Assignee | ||
Comment 7•12 years ago
|
||
Comment on attachment 703132 [details] [diff] [review]
Patch v1
Review of attachment 703132 [details] [diff] [review]:
-----------------------------------------------------------------
::: content/media/wmf/WMFReader.cpp
@@ +296,5 @@
> +
> +HRESULT
> +WMFReader::ConfigureVideoFrameGeometry(IMFMediaType* aMediaType)
> +{
> + NS_ENSURE_ARG(aMediaType);
This needs to be:
NS_ENSURE_TRUE(aMediaType != nullptr, E_POINTER);
As otherwise I get a type mismatch error in VS2012 and porbably also in new versions of GCC. (The error is because NS_ENSURE_ARG returns an nsresult, but this function returns an HRESULT).
Comment 8•12 years ago
|
||
Comment on attachment 703132 [details] [diff] [review]
Patch v1
Review of attachment 703132 [details] [diff] [review]:
-----------------------------------------------------------------
It would be cool to have a reftest for that. Actually, it would be cool to have reftests for h264, we only have theora and webm. I filed bug 832296 for this.
::: content/media/wmf/WMFReader.cpp
@@ +253,5 @@
> + MFVideoArea videoArea;
> + memset(&videoArea, 0, sizeof(MFVideoArea));
> + if (panScan) {
> + hr = aMediaType->GetBlob(MF_MT_PAN_SCAN_APERTURE,
> + (UINT8*)&videoArea,
nit: trailing whitespace, and others below that.
Attachment #703132 -
Flags: review?(paul) → review+
Updated•12 years ago
|
Whiteboard: [ietestdrive]
| Assignee | ||
Comment 9•12 years ago
|
||
Comment 10•12 years ago
|
||
Status: ASSIGNED → RESOLVED
Closed: 12 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla21
Updated•12 years ago
|
Blocks: ietestdrive
You need to log in
before you can comment on or make changes to this bug.
Description
•