Closed
Bug 976510
Opened 11 years ago
Closed 11 years ago
GStreamerReader needs to check display size for aspect-ratio change video
Categories
(Core :: Audio/Video, defect)
Tracking
()
RESOLVED
FIXED
mozilla30
People
(Reporter: rlin, Assigned: ayang)
Details
Attachments
(2 files, 3 obsolete files)
1.72 MB,
video/mp4
|
Details | |
3.83 KB,
patch
|
ayang
:
review+
|
Details | Diff | Splinter Review |
Use nightly build Firefox and play the testing file,
The video tag's screen size is wrong.
ref: 975978 OmxDecoder needs to check display size for aspect-ratio change video
Reporter | ||
Comment 1•11 years ago
|
||
testing file.
Assignee | ||
Comment 2•11 years ago
|
||
I've tried it on both gstreamer 1.0 and 0.10. Testcase is the same one in bug 975978.
Attachment #8384503 -
Flags: review?(cpearce)
Assignee | ||
Comment 3•11 years ago
|
||
Sorry, uploaded the wrong patch.
Attachment #8384503 -
Attachment is obsolete: true
Attachment #8384503 -
Flags: review?(cpearce)
Attachment #8385053 -
Flags: review?(cpearce)
Assignee | ||
Updated•11 years ago
|
Attachment #8385053 -
Attachment is patch: true
Comment 4•11 years ago
|
||
Comment on attachment 8385053 [details] [diff] [review]
gstreamer_aspect_ratio
Review of attachment 8385053 [details] [diff] [review]:
-----------------------------------------------------------------
::: content/media/gstreamer/GStreamerReader.cpp
@@ +1011,5 @@
> #endif
> +
> + // Calculate display size according to pixel aspect ratio.
> + IntSize displaySize;
> + displaySize = gfx::IntSize(mPicture.width, mPicture.height);
I think you should use ScaleDisplayByAspectRatio() and then IsValidVideoRegion(), like we do in other backends. For example:
http://mxr.mozilla.org/mozilla-central/source/content/media/wmf/WMFReader.cpp#318
http://mxr.mozilla.org/mozilla-central/source/content/media/plugins/MediaPluginReader.cpp#77
Attachment #8385053 -
Flags: review?(cpearce) → review-
Assignee | ||
Comment 5•11 years ago
|
||
(In reply to Chris Pearce (:cpearce) from comment #4)
> Comment on attachment 8385053 [details] [diff] [review]
> gstreamer_aspect_ratio
>
> Review of attachment 8385053 [details] [diff] [review]:
> -----------------------------------------------------------------
>
> ::: content/media/gstreamer/GStreamerReader.cpp
> @@ +1011,5 @@
> > #endif
> > +
> > + // Calculate display size according to pixel aspect ratio.
> > + IntSize displaySize;
> > + displaySize = gfx::IntSize(mPicture.width, mPicture.height);
>
> I think you should use ScaleDisplayByAspectRatio() and then
> IsValidVideoRegion(), like we do in other backends. For example:
>
> http://mxr.mozilla.org/mozilla-central/source/content/media/wmf/WMFReader.
> cpp#318
> http://mxr.mozilla.org/mozilla-central/source/content/media/plugins/
> MediaPluginReader.cpp#77
Thanks for suggestion. I'll fix it.
Assignee | ||
Comment 6•11 years ago
|
||
Attachment #8385053 -
Attachment is obsolete: true
Attachment #8385149 -
Flags: review?(cpearce)
Comment 7•11 years ago
|
||
Comment on attachment 8385149 [details] [diff] [review]
gstreamer_aspect_ratio
Review of attachment 8385149 [details] [diff] [review]:
-----------------------------------------------------------------
r=cpearce with the comments addressed.
Edwin should double check this, he knows more about gstreamer than I.
::: content/media/gstreamer/GStreamerReader.cpp
@@ +1007,4 @@
> #else
> GstCaps* caps = gst_pad_get_negotiated_caps(sinkpad);
> gst_video_format_parse_caps(caps, &mFormat, &mPicture.width, &mPicture.height);
> + gst_video_parse_caps_pixel_aspect_ratio(caps, &PARNumerator, &PARDenominator);
gst_video_parse_caps_pixel_aspect_ratio() can fail, and if so does it set PARNumerator and PARDenominator? If not, you'll be using PARNumerator and PARDenominator uninitialized.
gst_video_parse_caps_pixel_aspect_ratio() returns false when it fails:
http://www.freedesktop.org/software/gstreamer-sdk/data/docs/2012.5/gst-plugins-base-libs-0.10/gst-plugins-base-libs-gstvideo.html#gst-video-parse-caps-pixel-aspect-ratio
I think you should assume that the aspect ratio is 1 on failure. Other backends stop playback when this happens, but I think we could safely assume a PAR of 1 instead.
@@ +1023,5 @@
> + gst_structure_get_fraction(structure, "framerate", &fpsNum, &fpsDen);
> + mInfo.mVideo.mDisplay = ThebesIntSize(displaySize.ToIntSize());
> + mInfo.mVideo.mHasVideo = true;
> + } else {
> + NS_ASSERTION(false, "invalid video display region");
Please call Eos() to stop playback of all streams on error.
Attachment #8385149 -
Flags: review?(edwin)
Attachment #8385149 -
Flags: review?(cpearce)
Attachment #8385149 -
Flags: review+
Comment on attachment 8385149 [details] [diff] [review]
gstreamer_aspect_ratio
Review of attachment 8385149 [details] [diff] [review]:
-----------------------------------------------------------------
LGTM, modulo Chris' comments.
Attachment #8385149 -
Flags: review?(edwin) → review+
Assignee | ||
Comment 9•11 years ago
|
||
Carry r+. Testcase is the same one in bug 975978.
https://tbpl.mozilla.org/?tree=Try&rev=3c46478c4823
Attachment #8385149 -
Attachment is obsolete: true
Attachment #8385892 -
Flags: review+
Assignee | ||
Updated•11 years ago
|
Keywords: checkin-needed
Comment 10•11 years ago
|
||
Keywords: checkin-needed
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla30
You need to log in
before you can comment on or make changes to this bug.
Description
•