Coder Social home page Coder Social logo

aconite's People

Contributors

colinbdclark avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

aconite's Issues

Aconite needs unit tests

At the moment, Aconite lacks unit tests. It has a few tests that can be run manually and verified by eye, but none that run automatically.

The frameCount's avgDuration function has an off-by-one bug

Currently, the aconite.animationClock.frameCounter component's avgDuration() invoker calculates the average duration incorrectly. Since tickCounter is a zero-based index, it should calculate the average like this;

sum / tickCounter + 1;

The clip sequencing test seems to have major time sync issues

I can't quite explain what's changed, but it seems that the clip sequencer manual test is no longer working properly. It's worth investigating what has changed, and also consider the possibility of avoiding the use of Video.currentTime for synchronization, since it appears that it isn't frame accurate. Instead, we should synchronize a manual frame counter with the resolution of the video elements's play() and pause() promises.

Modelize the texture unit used by aconite.texture/aconite.compositable

Currently, the texture unit used by aconite.texture and within aconite.compositable.draw is specified as a component option. It should be moved into the model so that it can be specified by clients as the result of a model transformation, or more easily modulated (say, when reordering layers in an application.

Add support for controlling a video's volume

By default, Aconite automatically mutes all videos and provides no means to control their volume. We add a model value bound to the media element's volume property, which should default to 0.0, and flip the muted default to false so audio volume can be easily changed on the fly.

Wherever possible, Aconite should avoid injecting events across components

In various spots, Aconite uses Infusion's event injection pattern, like:

gradeNames: "a.component"
events: {
    myEvent: "{otherComponent}.events.theirEvent"
}

Instead, unless actual event sharing is needed, it should use "event listener chaining," where a listener for the other component's event will fire the local component's event.

Video readiness should be modelized

A video can be assumed to not yet be ready to play whenever:

  • It is first created
  • Its url model property changes

When its onVideoLoaded event fires (bound to canplaythrough), it is fully ready.

We should reflect this state as a boolean property (canPlayThrough, perhaps) in the aconite.video component's model.

Remove the use of time fragments in aconite.clipSequencer

It appears that HTML media elements that use time fragments cannot be looped. They will automatically pause themselves. Attempting to start them again with a call to play() will cause them to play past the time fragment's end point. So they're really only effective if you never want to loop your clips.

This behaviour is consistent across (at least) Chrome, Safari, and Firefox on my Mac. I assume it's in the spec, but haven't yet checked.

It seems that, instead, the aconite.clipSequencer needs to manage the currentTime property of the media element itself and schedule looping using its own Bergson scheduler at the appropriate interval.

Refactor Aconite's shader-handling code

At the moment, it's pretty awkward to work with Aconite shaders. They are somewhat hidden behind the aconite.glRenderer interface, which requires odd additional options for uniforms in addition to a model, as well as layers of wrapping of arrays that is confusing and error prone. Some useful comments about the issues can be found in Aconite's source code as well as the video example that was created for an older version of our Onward paper.

We should introduce a somewhat closer to the metal component that represents a GL shader and that is fully modelized, and which is responsible for loading (via a separate component), compiling, and attaching shaders as well as managing their runtime state.

Make the play button more responsive

Aconite's play button overlay CSS is hardcoded to particular pixel offset that isn't particularly nice looking. It should be more responsive.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.