Closed Bug 860488 Opened 11 years ago Closed 11 years ago

When playing some videos, each frames of rendering size is different

Categories

(Core :: Graphics: Layers, defect)

ARM
Gonk (Firefox OS)
defect
Not set
normal

Tracking

()

RESOLVED INVALID

People

(Reporter: sotaro, Assigned: sotaro)

References

Details

It seems landing GFX layer refactoring regression. Confirmed on unagi by using m-i source code.
When playing some videos, each frames of  rendering size is different.

Confirmed by using a following video on Bug 850566.
 https://www.dropbox.com/s/bxgyyrcvyymi4xd/AvatarMovieTrailer.mp4
QA Contact: nical.bugzilla
Assignee: nobody → nical.bugzilla
QA Contact: nical.bugzilla
I confirmed following
 - first video is rendered correctly
 - if second video sizes are different one, video is rendered strangely
(In reply to Sotaro Ikeda [:sotaro] from comment #1)
> I confirmed following
>  - first video is rendered correctly
>  - if second video sizes are different one, video is rendered strangely

It seems like somewhere keeps old information.
Before layer refactoring. There are two RenderLayer() in ImageLayerOGL.cpp. Only ShadowImageLayerOGL one is used. ImageLayerOGL one is not used.
- ImageLayerOGL::RenderLayer()
- ShadowImageLayerOGL::RenderLayer()

So, ImageLayerOGL is not updated anymore and do not work correctly.
(In reply to Sotaro Ikeda [:sotaro] from comment #3)
> Before layer refactoring. There are two RenderLayer() in ImageLayerOGL.cpp.
> Only ShadowImageLayerOGL one is used. ImageLayerOGL one is not used.
> - ImageLayerOGL::RenderLayer()
> - ShadowImageLayerOGL::RenderLayer()
> 
> So, ImageLayerOGL is not updated anymore and do not work correctly.

And ImageLayerOGL is used for layer refactoring.
IIRC following, 2nd arg of GetVisibleRegion().GetBounds() need to be picture size. I do not remember which bug is. Though it is not related to the bug.

>    mOGLManager->BindAndDrawQuadWithTextureRect(program,
>                                                GetVisibleRegion().GetBounds(),
>                                                nsIntSize(ioImage->GetSize().width,
>                                                          ioImage->GetSize().height));

http://mxr.mozilla.org/mozilla-central/source/gfx/layers/opengl/ImageLayerOGL.cpp#437
(In reply to Sotaro Ikeda [:sotaro] from comment #3)
> Before layer refactoring. There are two RenderLayer() in ImageLayerOGL.cpp.
> Only ShadowImageLayerOGL one is used. ImageLayerOGL one is not used.
> - ImageLayerOGL::RenderLayer()
> - ShadowImageLayerOGL::RenderLayer()
> 
> So, ImageLayerOGL is not updated anymore and do not work correctly.

More precisely, ImageLayerOGL is not used on mobile platforms. We used and still use ImageLayerOGL on desktop firefox.
The point is, though, that in the making of ImageHost that provides the functionality once provided by ShadowImageLayerOGL, we apparently used ImageLayerOGL's implementation as a reference. I am not sure why ShadowImageLayerOLG::RenderLayer and ImageLayerOGL::RenderLayer were different, though.
ImageLayerOGL::RenderLayer() uses GonkIOSurfaceImage to get an image size and image buffer size. But ShadowImageLayerOGL::RenderLayer() uses SurfaceDescriptorGralloc and android::GraphicBuffer to get an image size and image buffer size.
nical, I re-think about the bug. I take the bug. Is it OK?
Assignee: nical.bugzilla → sotaro.ikeda.g
(In reply to Sotaro Ikeda [:sotaro] from comment #8)
> nical, I re-think about the bug. I take the bug. Is it OK?

Of course :) thanks
This bug is not valid now.
Status: NEW → RESOLVED
Closed: 11 years ago
Resolution: --- → INVALID
You need to log in before you can comment on or make changes to this bug.