Skip to content

Commit

Permalink
update README. Add TODO.md and doc about configure QtAV
Browse files Browse the repository at this point in the history
  • Loading branch information
wang-bin committed Jan 27, 2014
1 parent e597530 commit dd90abc
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 21 deletions.
43 changes: 22 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 15,7 @@ you must adhere to the terms of the license in question.**

QtAV can meet your most demands

- Hardware decoding suppprt(not stable): DXVA2, VAAPI
- Hardware decoding suppprt(not stable): DXVA2, VAAPI(buggy now)
- Seek, pause/resume
- Video capture
- OSD and custom filters
Expand All @@ -34,15 34,15 @@ QtAV can meet your most demands
- Multiple video outputs for 1 player
- Region of interest(ROI), i.e. video cropping
- Video eq: brightness, contrast, saturation
- QML support as a plugin
- QML support as a plugin. Most playback APIs are compatible with QtMultiMedia module
- Compatiblity: QtAV can be built with both Qt4 and Qt5. QtAV supports
both FFmpeg(>=0.9) and [Libav](http://libav.org).


### Extensible Framework (work in progress)

QtAV currently uses FFmpeg to decode video, convert image and audio data, and uses PortAudio to play
sound. Every part in QtAV is designed to be extensible. For example, you can write your decoder, audio output for particular platform. [Here is a very good example to add cedar hardware accelerated decoder for A13-OLinuXino ](https://github.com/mireq/QtAV/commit/d7b428c1dae66b2a85b7a6bfa7b253980b5b963c)
sound. Every part in QtAV is designed to be extensible. For example, you can write your decoder, audio output for particular platform. [Here is a very good example to add cedar hardware accelerated decoder for A13-OLinuXino ](https://github.com/mireq/QtAV/commit/d7b428c1dae66b2a85b7a6bfa7b253980b5b963c)


# For Developers
Expand All @@ -62,13 62,15 @@ or [Libav](libav.org) (>=0.8) Latest version is recommanded.
3. [PortAudio v19](http://www.portaudio.com/download.html)
[![PortAudio Logo](http://www.portaudio.com/images/portaudio_logo.png)](http://www.portaudio.com)[![PortAudio](http://www.portaudio.com/images/portaudio_logotext.png)](http://www.portaudio.com)

The required development files for MinGW can be found in sourceforge
page: [depends](https://sourceforge.net/projects/qtav/files/depends)
or OpenAL ![OpenAL](http://upload.wikimedia.org/wikipedia/zh/2/28/OpenAL_logo.png "OpenAL")

**The required development files for MinGW can be found in sourceforge
page: [depends](https://sourceforge.net/projects/qtav/files/depends)**

#### Build

You can build QtAV with many compilers and on many platforms. You can use gcc, clang, vc to compile it.
See the wiki [Build QtAV](https://github.com/wang-bin/QtAV/wiki/Build-QtAV)
See the wiki [Build QtAV](https://github.com/wang-bin/QtAV/wiki/Build-QtAV) and [QtAV Build Configurations](https://github.com/wang-bin/QtAV/wiki/QtAV-Build-Configurations)

Here is a brief guide:

Expand All @@ -81,7 83,7 @@ It's recommend not to build in source dir.
qmake will run check the required libraries at the first time, so you must make sure those libraries can be found by compiler.
Then qmake will create a cache file _.qmake.cache_ in your build dir. Cache file stores the check results, for example, whether portaudio is available. If you want to recheck, run `qmake QtAV_project_dir/QtAV.pro -config recheck`

_WARNING_: If you are in windows mingw with sh.exe environment, you may need run qmake twice.
_WARNING_: If you are in windows mingw with sh.exe environment, you may need run qmake twice.(ISSUE #18)



Expand Down Expand Up @@ -126,6 128,7 @@ QtAV can also be used in **Qml**
#### Contributors

- Wang Bin(Lucas Wang) <[email protected]>: creator, maintainer
- mireq: Cedarv support. Better qmlvideofx appearance
- Dimitri E. Prado <[email protected]>: issue 70
- theoribeiro <[email protected]>: initial QML support
- Vito Covito <[email protected]>: interrupt callback
Expand All @@ -151,6 154,10 @@ To select decoder, use `-vd` option. Value can be _dxva_, _vaapi_ and _ffmpeg_,

will use dxva if dxva can decode, otherwise ffmpeg will be used.

QMLPlayer has less options now. To use DXVA decoder:

QMLPlayer-vd "DXVA;FFmpeg" filename


#### Default Shortcuts

Expand All @@ -171,22 178,14 @@ will use dxva if dxva can decode, otherwise ffmpeg will be used.
- Ctrl Up/Down: speed / -
- -> / <-: seek forward / backward
- Drag and drop a media file to player
- Wheel: zoom in/out

Before QtAV 1.3.1, the default behavior can be replaced by subclassing QObject and call `void AVPlayer::setPlayerEventFilter(QObject *obj)` (use null to disable).


# TODO

0. Component framework
1. Subtitle
2. Filters: filter api. integrate all filters in libavfilter.
3. Hardware acceleration using DirectX, NVIDIA Cuda, ATI UVD, Intel IPP, OpenCL and OpenGL:
* decoding: DXVA, XvBA, cuvid, VAAPI
* image, audio and text filters
* rendering: DirectX
4. Stylish GUI based on Qt Graphics View Framework
5. Document and SDK
6. Other: better sync method and seeking, tests, playing statistics, etc.
7. More platform support. Pi, Maemo, Android, iOS, BB10 etc. Depends on Qt and FFmpeg for those platforms.
8. ppa, debian package etc.
Read https://github.com/wang-bin/QtAV/wiki/TODO for detail.

Screenshots
----------
Expand All @@ -197,15 196,15 @@ Use QtAV in QML with OpenGL shaders(example is from qtmultimedia. But qtmultimed

QtAV on Mac OS X

![Alt text](https://sourceforge.net/p/qtav/screenshot/mac.jpg "simple player on Mac")
![Alt text](https://sourceforge.net/p/qtav/screenshot/mac.jpg "player on OSX")

IP camera using QtAV. OS: Fedora 18 (some developers from Italy http://www.selcomsrl.eu/)

![Alt text](https://sourceforge.net/projects/qtav/screenshots/ip_camera.jpg "ip camera")

QMLPlayer on ubuntu

![QMLPlayer](https://a.fsdn.com/con/app/proj/qtav/screenshots/Player-QtAV QML.png "QMLPlayer")
![QMLPlayer](https://sourceforge.net/p/qtav/screenshot/QMLPlayer+QtAV.jpg "QMLPlayer")

Video Wall

Expand All @@ -223,6 222,8 @@ Video Wall

Thanks

Now I have received 1000 RMB(about 160$)

[![Alipay](https://img.alipay.com/sys/personalprod/style/mc/top-logo.png)](https://me.alipay.com/lucaswang)

[PayPal ![Paypal](http://www.paypal.com/en_US/i/btn/btn_donate_LG.gif)](https://sourceforge.net/p/qtav/wiki/Donate 捐赠)
Expand Down
33 changes: 33 additions & 0 deletions doc/QtAVBuildConfigurations.md
Original file line number Diff line number Diff line change
@@ -0,0 1,33 @@
Since QtAV 1.3.1, you can configure how to build QtAV in a easier way.

When running qmake, qmake will do some tests to check the building environment and the features can be enabled. The default behavior is to check all the features in both `$$EssentialDepends` and `$$OptionalDepends`(see QtAV.pro) and to build all parts in source tree including examples, tests. Now you can simply select what you want to check and build using a *user.conf* in QtAV source directory.


Disable Features Manually
=========================
Currently features in `$$EssentialDepends` will always be checked: avutil, avcodec, avformat, swscale, swresample, avresample, gl. Features in `$$OptionalDepends` will also be checked by default.

Features in `$$OptionalDepends` can be disabled by adding a CONFIG value in *QtAV_SRC_DIR/user.conf*(create it if not exists). For example, to disable vaapi, just add:

CONFIG = no-vaapi

All options available are: no-openal, no-portaudio, no-direct2d, no-gdiplus, no-dxva, no-xv, no-vaapi, no-cedarv.


Disable config.tests
====================

config.tests will check what features QtAV can support. It may takes a few seconds. Some you may skip these checking to save time. You can add

CONFIG = no_config_tests

in *QtAV_SRC/user.conf* to disable it then qmake will be faster. But you then must enable the features you want manually in *user.conf*. All features available are `$$OptionalDepends`. For example, to enable *avresample*, add

CONFIG = config_avresample

in *user.conf*.


TODO
====
more flexible configuration, such as build path, blablabla.
68 changes: 68 additions & 0 deletions doc/TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 1,68 @@
#### MISC
- LOGO!
- qtav.org website
- Enable all features using my another project(libswresample tested): https://github.com/wang-bin/dllapi
- SDK document(doxygen seems greate)
- ring buffer instead of queue
- tests and benchmark
- meta data
- component model, plugin
- filter factory and manager
- sws filter and other apis. cpu flags. see vlc/modules/video_chroma/swscale.c

#### Platform Support
- Maemo: can build now. No QtQuick support
- Android: Can build now. Need OpenSL.
- Raspberry Pi
- iOS
- Black Berry
- WinRT. Win8 app
- debian PPA

#### Subtitle
- In which thread?
- VideoThread: store in Statistics.subtitle_only.
- Effect

#### Audio
- OpenAL enhancement.
- OpenSL support.
- AudioFrame
- ALSA, PulseAudio


####Rendering
- Use OpenGL shaders if possible. Currently is only available for ES2. But most desktop OpenGL support shaders.
- Redesign VideoFrame class to support buffers in both device and host. Thus no copy required. e.g. DXVA, VAAPI has direct rendering api.
ref: qtmmwidgets
- OpenVG or GL text renderering, dwrite text renderering
- D3D and DDraw: not that important.

#### Filters
- Integrate libavfilter
- Write some hardware accelerated filters using OpenCL/GLSL/CUDA. For example, stero 3d, yuv<->rgb, hue/contrast/brightness/gamma/sharp
- Audio filters
- IPP
- DShow filters support(mplayer dsnative?)

#### Error control
- Math


#### Additional component
- option parser
- slave mode use socket and then use option parser (https://github.com/dantas/QtAV/commit/a0d93f93a6c8b3b0faea379edb42187cb87a476c)
- log module and log viewer
- config module and a gui one

#### Hardware decoding
- Cuda support. Continue the work on `cuda` branch
- DXVA HD
- SSE4 optimized copy. Ref: VLC
- OMX
- Cedarv enhancement if I have a device to test
- ATI solutions. ATI UVD, XvBA
- XVMC?

#### Player
- QMLPlayer. Morden UI

0 comments on commit dd90abc

Please sign in to comment.