64bit/Mediaplayer

From kJams Wiki
Revision as of 05:21, 12 February 2019 by Dave (talk | contribs) (Deliverable)
Jump to navigation Jump to search

Requirements

  • Maximum bid USD $2,500 (fixed price for entire project)
  • a powerful, modern computer with gobs of RAM and CPU cores. Either:
    • Macintosh (with "Parallels Desktop" or "VMWare Fusion")
    • PC (with "VMWare Workstation")

Deliverable

Using Qt Widgets & C++, you will create a cross-platform layer-compositing media player with these features:

  • uses hardware decode for h.264 (i realize this may be an issue if working within a VM, we will have to figure this out)
  • uses hardware acceleration for playback for all code paths (openGL or native both mac and windows, user selectable depending on best performance)
  • has a transparent window background (for when no movie or video is shown) (ie: you can SEE the desktop in the background, and when playing media that has transparency, you can see behind it to the desktop)
  • allows three or more layers: background color (optionally transparent), Optional video (h.264), zero or more optional animated graphics (with transparency) (these may be 8 bit or 32bit)
  • animated graphic layer may be drawn into during playback real-time (text / bitmaps etc), eg: scrolling text along bottom
  • plays at HD size at 60fps even with video plus graphics
  • animation sources are "pull" model: polled at best frame rate, told what time to produce
  • all audio types (mp3, AAC, mp4, whatever else) decoded to PCM, with callback to user space for optional realtime modification of audio stream as PCM eg: key changing)
  • bonus (not required): actually implement high quality independent key and tempo changing
  • bonus (not required): volume normalizer (for when playing audio, make it sound like an average relative volume)
  • audio layer(s) may be composed into the output audio stream (from multiple PCM streams)
  • individual audio output comps can be sent to separate audio hardware (eg: one to speakers for singer / room, separate one to headphones so DJ can audition next song)
  • final composed video may be “split” and sent to more than one final window or window pane simultaneously (without degrading frame rate, ie: keep texture on GPU, reference from multiple windows)
  • ability to capture final composed video / audio and compress to h.264: this does NOT need to be realtime, nor displayed on screen, but must be able to be run on a background thread so as not to block UI operations

Freelancer Type

  • Speak english fluently (no broken english)
  • familiar with both mac and windows development environments
  • is fully familiar with developing QT desktop apps
  • is familiar with Version Control (we will be using Perforce)
  • understands MVC
  • familiar with Apple's CoreFoundation data structures and APIs (on windows known as "CFLite" & "CFNetwork")
  • familiar with Python (used in build system for pre/post build steps)
  • can work pretty much full time
  • must provide weekly work schedule ahead of time (eg: i plan to work monday through thursday for 5 hours each day)
  • provide scrum type progress updates at the start AND END of each working day (what you worked on last, what you plan to work on next, any blocking issues)
  • communicate frequently (literally communicate with me every day)

I will provide a VM pre configured thusly

  • Qt Creator 4.8.1 with Qt 5.12.1
  • either: macOS 10.14.3 & Xcode 9.4.1, or Windows 10 & VS2017
  • Python 2.7 and all the build scripts that use it
  • Perforce (Helix) for version control, with your creds and workspace
  • my already-working shell program which has:
    • preliminary menus and windows
    • “main browser” window shell where you will put the source & tracks lists
  • The reference app (kJams Pro) is already installed in the VM.


The Point of this project is to basically re-creating the kJams app functionality in Qt (64bit). This reference app already implements software playback version of what is described above (in a 32bit app).

Oops I forgot one thing

You will need to install the K-Lite codec pack to get h.264 playback. Later I'll be switching to using the built-in decoder, but that won't be ready until Qt 5.13, according to this bug report and the ensuing comments.

Milestones

10% payout at each milestone, with rest of payout at end / upon acceptance

  1. freelancer.com only: acceptance milestone (you get this just for accepting the project, to cover freelancer fees)
  2. on Windows, ability to play h.264 without forcing the user to install a codec (compliant with LGPL)
  3. rest of work / finishing touches.