gnash-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnash-dev] Flash HD (H.264) video decoding acceleration


From: Bastiaan Jacques
Subject: Re: [Gnash-dev] Flash HD (H.264) video decoding acceleration
Date: Wed, 23 Sep 2009 05:39:10 -0700 (PDT)
User-agent: Alpine 2.00 (DEB 1167 2008-08-23)

Hi Gwenole,

First off, I have to express some concern that apparently only
proprietary GPU drivers are supported for use with VA API -- at least,
for the codecs that are commonly used in Flash videos. The last
thing we want to do is encourage people to use proprietary drivers for
use with Gnash. I would be interested in merging the VA API integration
if we have some indication that the free GPU driver community (i.e.,
Nouveau or AMD-free) will soon be supported by VA API.

Still, some of the changes in the patch seem useful, even without VA
API integration.

Here are some comments from a preliminary read of the OpenGL part of the patch.

+      std::list< boost::shared_ptr<GnashTexture> >::iterator it;
+      for (it = _cached_textures.begin(); it != _cached_textures.end();
it++) {

Use ++it to save some CPU cycles.



+      }
+
+      // Otherwise, create one and empty cache because they may no
+      // longer be referenced
+      else {

Please put the comment inside the else{} block.


+       dynamic_cast<GnashVaapiTexture
*>(texture.get())->update(dynamic_cast<GnashVaapiImage
*>(frame)->surface());

Can you split this across multiple lines and check that your casting
succeeds (or, if you are sure that it will, use static_cast instead)?

+    gnash::point l, u;
+    m->transform(&l, point(bounds->get_x_min(), bounds->get_y_min()));
+    m->transform(&u, point(bounds->get_x_max(), bounds->get_y_max()));
+    const unsigned int w = u.x - l.x;
+    const unsigned int h = u.y - l.y;


I think it would be clearer to write:

  rect trans_bounds = bounds;
  m->transform(trans_bounds);
  boost::int32 w = trans_bounds.width();
  boost::int32 h = trans_bounds.height();


+// Returns a string representation of an OpenGL error
+static const char *gl_get_error_string(GLenum error)

Can you use gluErrorString() instead?

+static inline bool gl_do_check_error(int report)

report is used as a boolean, so it should be a bool.


+    D(bug("GnashTexture::GnashTexture()\n"));

Please use GNASH_PRINT_FUNCTION.

+GnashTexture::GnashTexture(unsigned int width, unsigned int height,
ImageType type)
+    : _width(width), _height(height), _texture(0), _format(type),
_flags(0)
+{
+    D(bug("GnashTexture::GnashTexture()\n"));
+
+    init();
+}

And what of init()'s return value?

+    struct TextureState {
+       unsigned int    old_texture;
+       unsigned int    was_enabled : 1;
+       unsigned int    was_bound   : 1;
+    }                  _texture_state;

Do performance numbers indicate that bitfields should be preferred over
clarity (i.e., using bool) here?

+    /// Note that this buffer MUST have the same _pitch, or unexpected
things
+    /// will happen.

Can you assert() on this condition in update()?

For sending future patches, it would be nice to have the VA API patch seperate
from other bugfixes.

Bastiaan




reply via email to

[Prev in Thread] Current Thread [Next in Thread]