Agreed.  But I'm really curious about the flickering.  Is flickering
just a bad side effect of a low framerate, or a bug with (hopefully)
some workaround?

On Jan 10, 5:18 pm, Romain Guy <romain...@android.com> wrote:
> Given the number of texture fetches you are doing in your shader I am
> not surprised at all if you are getting around 10 fps (it depends on
> the hardware of course and I don't know what platform you are testing
> on.)
>
>
>
>
>
>
>
>
>
> On Tue, Jan 10, 2012 at 4:11 PM, Brad Grimm <sna...@gmail.com> wrote:
> > I wouldn't consider the shaders too complex, though I'm not familiar
> > with how complex shaders generally are.  Below is an example of a
> > shader that demonstrates the problem.
>
> > My goal is well under 60 frames.  Since the camera only delivers
> > around ~20-25 frames, and I'm generally happy if I can pull more than
> > 15 FPS out of my various.  The below shader gets around 9 frames per
> > second, but I don't mind the framerate drop when I'm doing complex
> > operations.
>
> > The real problem is the out of order frame, visually it is a big a
> > problem.  It seems to flicker 3 or 4 times at a frequency of around
> > once per second or so before it finally clears up.  It is easiest to
> > see by moving the camera quickly from something dark to light.  Though
> > it is noticeable even for small movements as the video will have an
> > odd jerkiness to it.
>
> > Example cell shader:
>
> > #extension GL_OES_EGL_image_external : require
> > precision mediump float;
>
> > varying vec2 outTexCoords;
> > uniform samplerExternalOES texture;
>
> > void main(void) {
> >        vec4 color = texture2D(texture, outTexCoords);
> >        color.r = (sign(color.r*8.0)*floor(abs(color.r*8.0)+0.5))/4.0;
> >        color.g = (sign(color.g*8.0)*floor(abs(color.g*8.0)+0.5))/4.0;
> >        color.b = (sign(color.b*8.0)*floor(abs(color.b*8.0)+0.5))/4.0;
>
> >        const float threshold = 0.05;
>
> >        vec3 rgb2lum = vec3(0.30, 0.59, 0.11);
> >        float lum0 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2(-0.0078125, 0.0078125)).rgb, rgb2lum);
> >        float lum1 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2( 0.00 ,     0.0078125)).rgb, rgb2lum);
> >        float lum2 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2( 0.0078125, 0.0078125)).rgb, rgb2lum);
> >        float lum3 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2(-0.0078125, 0.00)).rgb, rgb2lum);
> >        float lum4 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2( 0.0,       0.0)).rgb, rgb2lum);
> >        float lum5 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2( 0.0078125, 0.007 )).rgb, rgb2lum);
> >        float lum6 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2(-0.0078125,-0.0078125)).rgb, rgb2lum);
> >        float lum7 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2( 0.00 ,    -0.0078125)).rgb, rgb2lum);
> >        float lum8 = dot(texture2D(texture, outTexCoords +
> > 0.2*vec2( 0.0078125,-0.0078125)).rgb, rgb2lum);
>
> >        float x = lum2+  lum8+2.0*lum5-lum0-2.0*lum3-lum6;
> >        float y = lum6+2.0*lum7+  lum8-lum0-2.0*lum1-lum2;
> >        float edge = sign(max(threshold - (x*x + y*y),0.0));
> >        color.rgb *= edge;
>
> >        gl_FragColor = vec4(color.rgb, 1.0);
> > }
>
> > On Jan 10, 2:43 pm, Romain Guy <romain...@android.com> wrote:
> >> It sounds like the issue might be your fragment shader. How complex is
> >> it? On today's mobile GPUs you cannot do that many operations per
> >> fragment at 60fps.
>
> >> On Tue, Jan 10, 2012 at 1:08 PM, Brad Grimm <sna...@gmail.com> wrote:
> >> > I have noticed an interesting bug when using TextureView with the
> >> > Camera.
>
> >> > If I setup a TextureView, pass it a valid OpenGL texture and pass that
> >> > into the camera, everything works great.  I can then swap out the
> >> > pixel shader with a simple shader and all still works great.  But if I
> >> > swap out the pixel shader with a more complex shader the framerate
> >> > drops and stuttering appears.
>
> >> > What seems to be happening is that a frame is getting processed out of
> >> > order.  After some hypothesizing I wondered if the hardware was being
> >> > sent too much to do.  After trying a number of things I found that if
> >> > I just slept the gl processing thread for around 75 milliseconds or so
> >> > the framerate jumped back up and the stuttering disappeared.
>
> >> > This is an okay hack for now, but I worry that value is just an
> >> > arbitrary guess based on my shader, and that it may change with other
> >> > shaders or other phones.  My question is: Is it possible to know when
> >> > it is safe to send another frame down to OpenGL without over-taxing
> >> > the system?  (Or is something else going on here?)
>
> >> > I have tried using glFinish, and glFlush and neither of these helped.
> >> > I wondered if that was because the camera uses samplerExternalOES and
> >> > somehow that effects it?
>
> >> > Note: If I run the same OpenGL code using a SurfaceView instead I
> >> > don't get any stuttering.  Of course the performance isn't as good so
> >> > that may be the reason it doesn't.
>
> >> > Any help is appreciated.
>
> >> > Thanks,
> >> > Brad
>
> >> > --
> >> > You received this message because you are subscribed to the Google
> >> > Groups "Android Developers" group.
> >> > To post to this group, send email to android-developers@googlegroups.com
> >> > To unsubscribe from this group, send email to
> >> > android-developers+unsubscr...@googlegroups.com
> >> > For more options, visit this group at
> >> >http://groups.google.com/group/android-developers?hl=en
>
> >> --
> >> Romain Guy
> >> Android framework engineer
> >> romain...@android.com
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Android Developers" group.
> > To post to this group, send email to android-developers@googlegroups.com
> > To unsubscribe from this group, send email to
> > android-developers+unsubscr...@googlegroups.com
> > For more options, visit this group at
> >http://groups.google.com/group/android-developers?hl=en
>
> --
> Romain Guy
> Android framework engineer
> romain...@android.com

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to