Giter VIP home page Giter VIP logo

daala's Introduction

Daala next-generation video codec

Daala is the codename for a new video compression technology. The effort is a collaboration between the Mozilla Foundation, the Xiph.Org Foundation and any other contributors that wish to help. The goal of the project is to provide a video format that's free to implement, use and distribute, and a reference implementation with technical performance superior to H.265. For more information, see the Daala wiki.

To get a sense of how well Daala performs in comparison to other codecs, check out Are We Compressed Yet?

Tiger barfing rainbows

Hacking on Daala

The wiki has quickstart pages for Linux/OS X, Windows, and Windows MinGW64.

Daala uses the GitHub Issue Tracker and the Rietveld code review tool. Jenkins is used for continuous integration.

Getting in Touch

There's an IRC channel #daala on chat.freenode.org. If you don't have IRC set up you can easily connect from your web browser.

You can also subscribe to the daala mailing list.

daala's People

Contributors

andreasgal avatar barrbrain avatar chisophugis avatar danesh-d avatar dschleef avatar edwardcwang avatar ekr avatar fluffy avatar gmaxwell avatar jmvalin avatar jnickelsburg avatar kodawah avatar kylesiefring avatar lu-zero avatar luctrudeau avatar mbebenita avatar metajack avatar misterzeus avatar negge avatar pezcamaron avatar quill300 avatar rillian avatar smarter avatar stemidts avatar suhashere avatar tdaede avatar tmatth avatar tszymczak avatar xiphmont avatar ycho avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

daala's Issues

Make all decoder ctl numbers odd

In Theora we had a convention that decoder ctl's (listed in include/daaladec.h) were all odd, as documented here https://trac.xiph.org/browser/trunk/theora/include/theora/theoradec.h#L36, so they would fail if accidentally passed to an encoder.

The current decoder controls in Daala do not follow this convention, but should.

The encoder also starts numbering at 4000 instead of 0, and does not use consecutive numbers, to make it less likely that arbitrary values passed to the function will trigger bad behavior, a convention we started during Opus development. The decoder should do something similar.

Add support for looping / replaying a video to stream analyzer

Right now the stream analyzer plays through the video once and then stops. To play a second time, the video file must be reopened. Add support for looping (via a check box menu item). Internally, this will require implementing the DaalaDecoder::reset() so that the internal state of the decoder is reset rather than creating a new decoder.

./configure --enable-dump-images fails to link in libpng on Ubuntu

echo " CCLD " examples/dump_video;/bin/bash ./libtool --silent --tag=CC --mode=link gcc -I/home/yushin/.linuxbrew/Cellar/libogg/1.3.2/include -std=c89 -pedantic -Wall -Wextra -Wno-parentheses -Wno-long-long -Wno-overlength-strings -g -O2 -o examples/dump_video examples/examples_dump_video-dump_video.o src/libdaalabase.la src/libdaaladec.la -L/home/yushin/.linuxbrew/Cellar/libogg/1.3.2/lib -logg

Show the padded region in the stream analyzer

The stream analyzer should be updated to display the padded region around the encoded frame. Internally the frame size is padded out to the next largest superblock (multiple of 32 currently) and the frame edge is extended. It would be helpful if the stream analyzer could show this region as well. Display the padded decoded frame with 16 pixels of black on all sides and some indication of where the edge extension begins. Bonus points for allowing you to toggle this mode on and off.

Support tuning via command line flags

Currently there are many defines in internal.h that switch quantization matrices. Because these are actually coded in the bitstream, they can be a runtime encoder option instead.

Better DC RDO on inter

DC quantization currently has very limited RDO. We only consider RDO for zero vs non-zero, and even then the rate estimate is pretty rough. It considers the cost of coding the zero vs non-zero flag, but not the cost of actually coding the non-zero value itself. This should be improved.

Display bit per block in the stream analyzer

The bit accounting code needs to be modified to run in the decoder and exposed as a DECCTL. This will require modifications so that the bit accounting code is not longer enabled / disabled in the decoder via the ./configure flag, but at runtime is enabled / disabled by the presence of a buffer supplied via DECCTL.

Display the bits per pixel per block as an heat map overlay to the image.

Add MV visualization to analyzer

Desired functionality:
graphical depiction of motion vectors (direction/magnitude, ala Theora telemetry)
ability to hover on specific blocks/vectors to show actual values of motion vectors

Activity masking modulation

Figure out how to modulate the effect of activity masking based on whether the block/superblock/whatever has texture vs edges.

Add back quantization matrix interpolation

This got removed when introducing the fixed lapping. Now that the matrices are now "full" (not per band), we'll have to find an efficient way to code them in the bit-stream. Suggested approach is coding the DCT of the log of the matrix.

Add a "go to next frame" menu item

Currently, you can go to the next frame by pressing '.' but this is impossible to know without reading the source code, having a menu item would improve discoverability.

Motion compensation lines

When Monty zeros all of the motion vectors and turns lapping off, there are lines that appear at the top of the motion compensated blocks.

Awaiting more info from Monty.

Add a way to specify extra CFLAGS

Right now you can do CFLAGS="..." ./configure but that will overwrite the default CFLAGS. It'd be nice to have a way to pass extra CFLAGS either to configure or to make, for example in libav you can do make ECFLAGS="..."

Update chroma quantization matrices

We should be quantizing chroma less coarsely than luma at low bit rates. At the low end of the range, the quantization chroma should be a factor of two over luma. At high bit rates we should be quantizing chroma more heavily (Cb more heavily than Cr).

Add RDO to Haar DC quantization

Haar DC coefficients are currently "rounded to nearest" when doing the quantization. We should be applying RDO to that decision.

Build fails with enabling assembly optimizations on OSX10.9.5

../src/x86/sse2dct.c:296:25: warning: unused function 'unbiased_rshift32_256' [-Wunused-function]
OD_SIMD_INLINE od_m256i unbiased_rshift32_256(od_m256i a, int b) {
^
1 warning generated.
CC src/x86/src_libdaalabase_la-sse41dct.lo
CC src/x86/src_libdaalabase_la-avx2dct.lo
../src/x86/avx2dct.c:73:10: error: argument to '__builtin_ia32_permti256' must be a constant integer
return _mm256_permute2x128_si256(a, b, c);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include/avx2intrin.h:847:12: note:
expanded from macro '_mm256_permute2x128_si256'
(__m256i)__builtin_ia32_permti256(__V1, __V2, (M)); })
^ ~~~
../src/x86/avx2dct.c:73:10: error: returning 'void' from a function with incompatible result type
'od_m256i' (aka '__m256i')
return _mm256_permute2x128_si256(a, b, c);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/6.0/include/avx2intrin.h:844:46: note:
expanded from macro '_mm256_permute2x128_si256'

define _mm256_permute2x128_si256(V1, V2, M) extension ({ \

                                         ^~~~~~~~~~~~~~~~~~

2 errors generated.

Cannot see block boundaries in dark areas

The stream analyzer displays block boundaries by halving the luma channel. This does not work at all in areas where luma is low. Update the code to adapt the offset based on the current luma value so its always visible.

Add realtime playback to the stream analyzer

Right now you can only step through a video a frame at a time in the stream analyzer. Add support for pressing space to start and stop the video playback in real time. The frame rate is stored in the daala_info struct as timebase_numerator and timebase_denominator.

Migrate stream analyzer to wxWidgets 3.0

The stream analyzer currently builds with wxWidgets 3.0, but there are UI errors that need to be fixed. Once it works cleanly against 3.0, update the automake scripts so that it requires 3.0.0 to build in configure.ac.

Signal the colorspace in the bitstream

Y4M files can support a number of chroma siting options and colorspaces (Rec. 709, Rec. 2020, etc). Signal these in the bitstream and write the correct values with the encoder when the Y4M input supplies correct information.

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.