Difference between revisions of "Bounties"

From VideoLAN Wiki
Jump to navigation Jump to search
 
(39 intermediate revisions by 2 users not shown)
Line 1: Line 1:
= WIP =
+
This page is a list of the [https://en.wikipedia.org/wiki/Bounty_%28reward%29 bounties] that [[VideoLAN]] will pay for features developed on {{VLC}} or 3rd party libraries.
 +
 
 +
= Rules =
 +
 
 +
# One must contact us before starting a bounty.
 +
# Sending a reasonable patch on a public mailing-list gives a temporary lock for the task.
 +
 
 +
=== WIP ===
 
This list is always '''<big>Work In Progress</big>'''. It is NOT a definitive list, nor are the prices!
 
This list is always '''<big>Work In Progress</big>'''. It is NOT a definitive list, nor are the prices!
  
 
Therefore, ask before doing anything. Or suggest ideas.
 
Therefore, ask before doing anything. Or suggest ideas.
  
= Rules =
+
=== Payment ===
One must contact us before starting a bounty.
 
 
 
Sending a reasonable patch on a public mailing-list gives a temporary lock for the task.
 
 
 
== Payment ==
 
 
The bounties are paid to a legal entity that can create an '''invoice'''. It can be done by an independent worker too.
 
The bounties are paid to a legal entity that can create an '''invoice'''. It can be done by an independent worker too.
  
Line 16: Line 18:
 
Money is paid on code '''merge''' in the relevant project.
 
Money is paid on code '''merge''' in the relevant project.
  
== Join our effort ==
+
=== Join our effort ===
 
If you feel like adding some money to a special bounty, please [http://www.videolan.org/contact.html Contact us].
 
If you feel like adding some money to a special bounty, please [http://www.videolan.org/contact.html Contact us].
  
Line 27: Line 29:
  
 
This would be useful for phonon, tomahawk and other libVLC applications.
 
This would be useful for phonon, tomahawk and other libVLC applications.
 +
 +
See [https://trac.videolan.org/vlc/ticket/5603 #5603]
  
 
=== libVLC API for sout and smem ===
 
=== libVLC API for sout and smem ===
Line 34: Line 38:
 
This is very difficult, and needs extended knowledge of VLC.
 
This is very difficult, and needs extended knowledge of VLC.
  
=== Local resampling ===
+
See [https://trac.videolan.org/vlc/ticket/5037 #5037]
 +
 
 +
=== Webdav support ===
 +
{{Price|700}}
 +
This is ''readdir'' implementation for webdav for the HTTP access, with Basic Authentication.
 +
 
 +
See [https://trac.videolan.org/vlc/ticket/9065 #9065]
 +
 
 +
=== Demuxdump2  ===
 +
{{Price|2000}}
 +
This is a new module to dump the incoming streams, like demuxdump, but with more use cases reported.
 +
 
 +
The important use cases that are not supported for now are:
 +
* so that we can "download" from a Network source in the libVLC mobile ports (for example, copy from upnp drive to the local phone)
 +
* so that we can "record" adaptive streaming, like Dash, HLS, MMS or other complex streaming formats.
 +
 
 +
=== UPnP/DLNA renderer ===
 
{{Price|2000}}
 
{{Price|2000}}
Stop resampling the audio when playing local files.
+
Same as ChromeCast, but for UPnP/DLNA
 +
 
 +
See [https://trac.videolan.org/vlc/ticket/17365 #17365] and [https://trac.videolan.org/vlc/ticket/1441 #1441].
 +
 
 +
=== Subtitles under the video ===
 +
{{Price|1500}}
 +
Develop the feature so that we get subtitles under the video, in the black bars, for GPU blending video output (D3D, OpenGL)
 +
 
 +
Price is for core + one module. One extra module is 500 each.
 +
 
 +
See [https://trac.videolan.org/vlc/ticket/2591 #2591].
 +
 
 +
=== Dual subtitles support ===
 +
{{Price|1000}}
  
This is extremely difficult, and needs extended knowledge of VLC.
+
See the "video-es" variable in the core.
  
 +
See [https://trac.videolan.org/vlc/ticket/824 #824].
 +
 
=== RTP packetization ===
 
=== RTP packetization ===
 
{{Price|Each item: 250}}
 
{{Price|Each item: 250}}
Line 60: Line 95:
 
{{Price|500}}
 
{{Price|500}}
 
Extending the DVB scan to another platform than the main one.
 
Extending the DVB scan to another platform than the main one.
 +
 +
=== HTTP POST support ===
 +
{{Price|1000}}
 +
In order to support webservices, it would be nice to have support for POST in the normal HTTP stack and provide a suitable API for modules.
 +
 +
=== HTTP Pool for DASH ===
 +
{{Price|2000}}
 +
In order to support adaptive streaming, it would be nice to have support for a shared pool between multiple streams in the normal HTTP stack and use it in the adaptive module.
 +
 +
Also
 +
* Real byterange support. (Download should respect byterange limit)
 +
* Self metrics (more or less accurate) or ability to toggle prefetch.
  
 
=== Preferences for LUA extensions ===
 
=== Preferences for LUA extensions ===
Line 65: Line 112:
 
Be able to add preferences for LUA extensions.
 
Be able to add preferences for LUA extensions.
  
=== Webdav support ===
 
{{Price|500}}
 
This is readdir implementation for webdav for the HTTP access, with Basic Authentication.
 
  
 
=== Add RTP with FEC ===
 
=== Add RTP with FEC ===
{{Price|2000}}
+
{{Price|1200}}
 
Input and output modules (SMPTE 2022).
 
Input and output modules (SMPTE 2022).
  
Line 95: Line 139:
  
 
For yadif, updating it from upstream is probably the best idea.
 
For yadif, updating it from upstream is probably the best idea.
 +
 +
 +
=== Support DVD Audio ===
 +
{{Price|2000}}
 +
 +
See the dvdcpxm and the http://avisynth.nl/index.php/DVDAGuide page
 +
 +
=== Support HD-DVD ===
 +
{{Price|2000}}
 +
 +
If you have the hardware :)
 +
 +
See [https://trac.videolan.org/vlc/ticket/10273 #10273].
 +
  
 
== VLC bugs ==
 
== VLC bugs ==
Line 128: Line 186:
 
The filter chain should be improved accordingly.
 
The filter chain should be improved accordingly.
  
=== VA video output ===
 
{{Price|500}} (excl. Intel affiliates)
 
 
A video capable of scaled rotated YUV output with blending similar should support Intel cards to complement the VDPAU output.
 
X11 support is necessary.
 
The two usual CSC matrices should be supported; image adjust would be nice.
 
 
Hardware decoding pass-through could be added later.
 
Wayland support is a possible future extension.
 
  
 
=== NVENC encoder ===
 
=== NVENC encoder ===
Line 147: Line 196:
  
 
=== Allow video filters to provide a picture pool ===
 
=== Allow video filters to provide a picture pool ===
{{Price|1000}}
+
{{Price|1500}}
 
Only video output display plugins are currently able to supply a custom picture pool.
 
Only video output display plugins are currently able to supply a custom picture pool.
 
Filters are forced to use generic picture buffers allocated from main memory. This is a major impediment to support hardware acceleration. This is somewhat orthogonal to the previous bounty, but they cannot be done in parallel due to obvious conflicts.
 
Filters are forced to use generic picture buffers allocated from main memory. This is a major impediment to support hardware acceleration. This is somewhat orthogonal to the previous bounty, but they cannot be done in parallel due to obvious conflicts.
Line 153: Line 202:
 
This needs changes in the video output and in the filter chain to allow filters (both conversion and post-processing) to provide an optional pool callback for
 
This needs changes in the video output and in the filter chain to allow filters (both conversion and post-processing) to provide an optional pool callback for
 
their *input* pictures. Support for video splitters pool and removal of picture_t.context would be nice bonuses.
 
their *input* pictures. Support for video splitters pool and removal of picture_t.context would be nice bonuses.
 
  
 
== Libavcodec bugs ==
 
== Libavcodec bugs ==
Line 166: Line 214:
 
{{Price|6000}}
 
{{Price|6000}}
 
Add a MVC Decoder in libavcodec and wire it to VLC.
 
Add a MVC Decoder in libavcodec and wire it to VLC.
 +
 +
=== Cineform features ===
 +
{{Price|1000}}
 +
Now that the cineform SDK is open source, implement mission features, like temporal transform, (maybe bayer), bottom-line-bug fixing, alpha channel fixing, interlacing fixing.
  
 
=== VoxWare MetaSound ===
 
=== VoxWare MetaSound ===
Line 171: Line 223:
 
Add a VoxWare MetaSound Decoder in libavcodec.
 
Add a VoxWare MetaSound Decoder in libavcodec.
  
=== DXV decoder ===
 
{{Price|2000}}
 
Published by Resolume, there are two codecs identified by DXDI and DXD3.
 
Completely closed source, no specifications and available for Windows and OSX only.
 
Binary decoder should not be too hard to reverse, although it is something that will take a considerable effort.
 
  
 
=== X-AVC-S decoder ===
 
=== X-AVC-S decoder ===
Line 181: Line 228:
 
Sony second version of AVC-S, which is just a rebranded H.264, although with different sps/pps management.
 
Sony second version of AVC-S, which is just a rebranded H.264, although with different sps/pps management.
 
Unfortunately no specifications are available, so some time of reverse engineering is required.
 
Unfortunately no specifications are available, so some time of reverse engineering is required.
 +
 +
=== Microsoft VC1 Progressive ===
 +
{{Price|600}}
 +
Microsoft VC1 Progressive segmented frame mode
 +
 +
=== AAC ===
 +
- AACE (aac enhanced with low delay)
 +
 +
- xHE-AAC
  
 
=== Other decoder ===
 
=== Other decoder ===
 
We are interested in other decoders.
 
We are interested in other decoders.
Price are not yet defined.
+
Assume price of 500€ for each variant.
{{Price|?500?}}
+
{{Price|500}}
 
==== general purpose codecs ====
 
==== general purpose codecs ====
 
  - AmaRecTV AMV2, AMV3, AMV4
 
  - AmaRecTV AMV2, AMV3, AMV4
  - Apple Pixlet
+
  - AmuseGraphics - AGM2, AGM3
 +
- AIMV, CNGA, RGGB (Powerpoint?)
  
 
==== cctv software ====
 
==== cctv software ====
  - Verint RFB
+
  - Verint RFB (RFBW)
  - IMM family of DVR codecs
+
  - IMM family of DVR codecs (IMM5, IMM6)
==== screen capture ====
 
- Fox Magic Screen Capture
 
- NewTek SpeedHQ
 
- Screenpresso
 
  
 
= Past bounties =
 
= Past bounties =
Line 324: Line 377:
  
 
Why? because there is x86 and ARMv7 and no ARMv8 support.
 
Why? because there is x86 and ARMv7 and no ARMv8 support.
 +
 +
=== Local resampling ===
 +
{{Price|2000}}
 +
Stop resampling the audio when playing local files.
 +
 +
This is extremely difficult, and needs extended knowledge of VLC.
 +
 +
=== Airplay renderer ===
 +
{{Price|1000}}
 +
Same as ChromeCast, but for AirPlay. See the RAOP module too!
 +
 +
See [https://trac.videolan.org/vlc/ticket/17366 #17366].
 +
 +
=== VLM improvements ===
 +
{{Price|3000}}
 +
 +
This tasks consists in improving the VLM API, in order to get closer to something like a Plex Server: on demand VoD, with transcoding for the specific device.
 +
 +
In scope is:
 +
* simplification of the VLM code
 +
* commonification of the VLM input and playlist (or media player) code, to reduce VLM specific code
 +
* API to remove the weird vlm parsing from the core (the vlm file parsing should be a module)
 +
* preparation of VoD for non-RTSP cases (read HTTP streaming)
 +
 +
Out of scope are:
 +
* HTTP interface changes
 +
* profiles for transcoding
 +
 +
'''NB:''' small reduction of VLM features is accepted.
 +
 +
 +
=== VA video output ===
 +
{{Price|500}} (excl. Intel affiliates)
 +
 +
A video capable of scaled rotated YUV output with blending similar should support Intel cards to complement the VDPAU output.
 +
X11 support is necessary.
 +
The two usual CSC matrices should be supported; image adjust would be nice.
 +
 +
Hardware decoding pass-through could be added later.
 +
Wayland support is a possible future extension.
 +
 +
=== screen capture ===
 +
- Fox Magic Screen Capture
 +
 +
=== DXV decoder ===
 +
{{Price|2000}}
 +
Published by Resolume, there are two codecs identified by DXDI and DXD3.
 +
Completely closed source, no specifications and available for Windows and OSX only.
 +
Binary decoder should not be too hard to reverse, although it is something that will take a considerable effort.
 +
 +
 +
== VLC Android Features ==
 +
=== Support USB OTF ===
 +
{{Price|1000}}
 +
 +
New framework for USB from Android is quite complex, but is doable, since many example exist.
  
  
 
[[Category:Coding]]
 
[[Category:Coding]]

Latest revision as of 10:35, 9 October 2018

This page is a list of the bounties that VideoLAN will pay for features developed on VLC media player or 3rd party libraries.

Contents

Rules

  1. One must contact us before starting a bounty.
  2. Sending a reasonable patch on a public mailing-list gives a temporary lock for the task.

WIP

This list is always Work In Progress. It is NOT a definitive list, nor are the prices!

Therefore, ask before doing anything. Or suggest ideas.

Payment

The bounties are paid to a legal entity that can create an invoice. It can be done by an independent worker too.

Money is paid by the VideoLAN non-profit organization in Euros. VideoLAN does not have a VAT number, so the prices are what VideoLAN will pay.

Money is paid on code merge in the relevant project.

Join our effort

If you feel like adding some money to a special bounty, please Contact us.

List of bounties

VLC Features

libVLC API for filters

2000 € This task consist on doing a correct set of libVLC API for audio filters and video filters.

This would be useful for phonon, tomahawk and other libVLC applications.

See #5603

libVLC API for sout and smem

2000 € Create a libVLC API to be able to use smem. This will include a libVLC API for sout.

This is very difficult, and needs extended knowledge of VLC.

See #5037

Webdav support

700 € This is readdir implementation for webdav for the HTTP access, with Basic Authentication.

See #9065

Demuxdump2

2000 € This is a new module to dump the incoming streams, like demuxdump, but with more use cases reported.

The important use cases that are not supported for now are:

  • so that we can "download" from a Network source in the libVLC mobile ports (for example, copy from upnp drive to the local phone)
  • so that we can "record" adaptive streaming, like Dash, HLS, MMS or other complex streaming formats.

UPnP/DLNA renderer

2000 € Same as ChromeCast, but for UPnP/DLNA

See #17365 and #1441.

Subtitles under the video

1500 € Develop the feature so that we get subtitles under the video, in the black bars, for GPU blending video output (D3D, OpenGL)

Price is for core + one module. One extra module is 500 each.

See #2591.

Dual subtitles support

1000 €

See the "video-es" variable in the core.

See #824.

RTP packetization

Each item: 250 € Do the packetization of ONE of those items:

  • WMA
  • WMV
  • VC-1

See #1289, #1323, and #6505.

DVB scanning

1000 € In order to compete with TV software, we need some DVB scanning, working on one platform using the DTV module.

See #7248.

See http://nate.dynalias.net/dev/scanchannelsbda.rails and http://nate.deepcreek.org.au/svn/ScanChannelsBDA/trunk/

DVB Scanning²

500 € Extending the DVB scan to another platform than the main one.

HTTP POST support

1000 € In order to support webservices, it would be nice to have support for POST in the normal HTTP stack and provide a suitable API for modules.

HTTP Pool for DASH

2000 € In order to support adaptive streaming, it would be nice to have support for a shared pool between multiple streams in the normal HTTP stack and use it in the adaptive module.

Also

  • Real byterange support. (Download should respect byterange limit)
  • Self metrics (more or less accurate) or ability to toggle prefetch.

Preferences for LUA extensions

2500 € Be able to add preferences for LUA extensions.


Add RTP with FEC

1200 € Input and output modules (SMPTE 2022).

Working RealMedia Demuxer

1000 € This task consist in writing a correct and working demuxer for real media format, to avoid crashing and playing all videos from China...


ARM optimizations

ARM optimisation for core and important filters. This is TBD.

Ideas:

  • Audio conversions
  • Chroma conversions
  • Transform filter

Convert deinterlacer x86 optimizations

500 € What? Convert x86 assembler code in the deinterlacer to proper out-of-line (.s/.S) assembler.

Why? The inline existing assembler (esp. Yadif) breaks depending on compiler options (e.g. -O0, -flto) and versions.

For yadif, updating it from upstream is probably the best idea.


Support DVD Audio

2000 €

See the dvdcpxm and the http://avisynth.nl/index.php/DVDAGuide page

Support HD-DVD

2000 €

If you have the hardware :)

See #10273.


VLC bugs

Screencast

Audio Loopback for Mac

500 € To record the desktop sounds.

  • It also requires to check that all input are using mdate()-based PTS

UI for better screencasting

250 € See #4535 and #5988.

RTSP/UDP issue

2000 € Fix the RTSP output so that the UDP transfers work across client NATs (android clients). This will require interleaving support.

Asynchronous demuxer end-of-stream

250 € An (access_)demux can set pf_demux to NULL. This avoids blocking the input thread when doing I/O. But there are no ways to emit an end-of-stream if the pf_demux function is not set. A callback should be defined for this purpose. (FWIW, this limitation is already affecting the out-of-tree Spotify plugin.)

Separate video converters from video filters

500 € Video conversion filters and "normal" post-processing filters all expose the same capability. It makes a mess in the preferences panel, and the semantics for probing are under-specified.

Conversion filters should not touch their input and output formats. Post-processing filters should be able to change either or both input and output formats, but must be requested explicitly. The filter chain should be improved accordingly.


NVENC encoder

1000 € (excl. NVIDIA affiliates)

A plugin could encode video on capable (Kepler/Maxwell) NVIDIA GPUs. At minimum H.264 is needed; MPEG2 would be nice to have. Some level of interface compatibility/similarity with the x264 plugin is highly desirable.

This may need to be out-of-tree depending on the ability to redistribute the header file. The run-time should be dynamically loaded.

Allow video filters to provide a picture pool

1500 € Only video output display plugins are currently able to supply a custom picture pool. Filters are forced to use generic picture buffers allocated from main memory. This is a major impediment to support hardware acceleration. This is somewhat orthogonal to the previous bounty, but they cannot be done in parallel due to obvious conflicts.

This needs changes in the video output and in the filter chain to allow filters (both conversion and post-processing) to provide an optional pool callback for their *input* pictures. Support for video splitters pool and removal of picture_t.context would be nice bonuses.

Libavcodec bugs

Multi-threaded hw decoding

500 € To fix the issue that you cannot have MT hw decoding.

Libavcodec features

MVC

6000 € Add a MVC Decoder in libavcodec and wire it to VLC.

Cineform features

1000 € Now that the cineform SDK is open source, implement mission features, like temporal transform, (maybe bayer), bottom-line-bug fixing, alpha channel fixing, interlacing fixing.

VoxWare MetaSound

500 € Add a VoxWare MetaSound Decoder in libavcodec.


X-AVC-S decoder

600 € Sony second version of AVC-S, which is just a rebranded H.264, although with different sps/pps management. Unfortunately no specifications are available, so some time of reverse engineering is required.

Microsoft VC1 Progressive

600 € Microsoft VC1 Progressive segmented frame mode

AAC

- AACE (aac enhanced with low delay)

- xHE-AAC

Other decoder

We are interested in other decoders. Assume price of 500€ for each variant. 500 €

general purpose codecs

- AmaRecTV AMV2, AMV3, AMV4
- AmuseGraphics - AGM2, AGM3
- AIMV, CNGA, RGGB (Powerpoint?)

cctv software

- Verint RFB (RFBW)
- IMM family of DVR codecs (IMM5, IMM6)

Past bounties

AC-3 Volume

1000 €

Fix correctly the AC-3 volume issue. See #3994.

The issue can come from a mis-integration with liba52, or could come from some channels being wrongly discarded.

This must work on Windows.

Bug -mt on Mpeg-4 video

500 € Fix the Mpeg-4 resolution change for -mt in libavcodec. See #6579 and #6533.

Bug -mt on H.264 video

500 € Fix the H.264 resolution change for -mt in libavcodec. See #7306.

Support OGG length calculation

??? € See #6983.

MSS2

1000 € Add a MSS2 Decoder in libavcodec. See #750.

VC-1 interlaced

1000 € Fix VC-1 interlaced and adding missing B-frames support in libavcodec. See #5887.

G2M

1000 € Add a G2M2/G2M3/G2M4 Decoder in libavcodec. See #2327.

DTS-HD Master Audio

4000 € Add a DTS-HD Master Audio Decoder.

This can be either in libavcodec or in libdca, but it must work in VLC in the end, including 8 channels. This is probably the XLL extension to code.

BD-J

2000 € Work on libbluray integration to play BD-J BD in libbluray.

Auto-Rotation of the video

2000 € As many MP4 videos and JPEG files we need to rotate those when we detect it.

So far, the demuxer has the info, but that is it.

The core should ask the video output if it can do the transformation (OpenGL) else it should load the transform filter with the right parameter.

See #2882.

libVLCcore SD API and Upnp

800 € The Upnp SD is very slow because it needs to fetch recusively all nodes. This needs to change.

This task will likely need a change of API for the Service Discoveries.

See #4437.

Fallback on multi-threaded decoding if hardware decoding fails

1000 € At present, libavcodec will fall back on single-threaded decoding if hardware decoding is enabled and fails during its initialization due to unsupported pixel formats, profiles, etc.. Add support to fallback on multi-threaded decoding if supported by the respective codec.

RTP packetization

Each item: 200 € Do the packetization of ONE of those items:

  • RGB
  • YUV

libVLC API for imem

1000 € Create a libVLC API for imem to map to a libvlc_media_t object, in order to use it like the rest of libVLC. Notably libvlc_media_player_new_from_media


Audio Loopback for Windows

500 € To record the desktop sounds.

  • It also requires to check that all input are using mdate()-based PTS

Access module I/O interruption

2000 € Access modules need to wake up from waiting for I/O events when the user stops or seeks the input. Thread cancellation is not practical for access modules, and inapplicable to seeking. net_*() helper functions are limited to the input thread, not working with stream_Url*() or stream_Demux*(), and not supporting more than one file descriptor and event. A more flexible solution is necessary; stopping should always work; provisions for seeking would be nice to have, but not expected to work without additional demuxer changes. Support for multiple file descriptors (DVB) and condition variables (UDP) is a must.

HTTPS 2.0 input

2000 € Connection reuse when seeking and opening multiple files would speed up seeking and segmented streaming respectively. FWIW, I believe a fully functional implementation of this depends on the access I/O interruption feature above.

AAC encoder

? € Add a native AAC encoder matching the quality of existing implementations by Apple (QuickTime) or Nero (libfaac). Adding support for more channels than just 2.0 is supposed to be covered by an additional bounty.

HDMI pass-through

1000 € Notably for other codecs than the ones we have over S/PDIF.

We need:

  • DTS extensions over HDMI, notably DTS HD MA
  • E-AC3
  • Dolby TrueHD
  • MPGA

The price is for at least the first 3.

See #4940 and other.

ARMv8 NEON mean

750 € What? add unrolled ARMv8 SIMD assembler optimizations for both so-called "merge" operations in the deinterlacing filter.

Why? because there is x86 and ARMv7 and no ARMv8 support.

Local resampling

2000 € Stop resampling the audio when playing local files.

This is extremely difficult, and needs extended knowledge of VLC.

Airplay renderer

1000 € Same as ChromeCast, but for AirPlay. See the RAOP module too!

See #17366.

VLM improvements

3000 €

This tasks consists in improving the VLM API, in order to get closer to something like a Plex Server: on demand VoD, with transcoding for the specific device.

In scope is:

  • simplification of the VLM code
  • commonification of the VLM input and playlist (or media player) code, to reduce VLM specific code
  • API to remove the weird vlm parsing from the core (the vlm file parsing should be a module)
  • preparation of VoD for non-RTSP cases (read HTTP streaming)

Out of scope are:

  • HTTP interface changes
  • profiles for transcoding

NB: small reduction of VLM features is accepted.


VA video output

500 € (excl. Intel affiliates)

A video capable of scaled rotated YUV output with blending similar should support Intel cards to complement the VDPAU output. X11 support is necessary. The two usual CSC matrices should be supported; image adjust would be nice.

Hardware decoding pass-through could be added later. Wayland support is a possible future extension.

screen capture

- Fox Magic Screen Capture

DXV decoder

2000 € Published by Resolume, there are two codecs identified by DXDI and DXD3. Completely closed source, no specifications and available for Windows and OSX only. Binary decoder should not be too hard to reverse, although it is something that will take a considerable effort.


VLC Android Features

Support USB OTF

1000 €

New framework for USB from Android is quite complex, but is doable, since many example exist.