64bit/Mediaplayer: Difference between revisions
Jump to navigation
Jump to search
| Line 8: | Line 8: | ||
Using Qt Widgets & C++, you will create a cross-platform layer-compositing media player with these features: | 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 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, selectable depending on best performance) | * uses hardware acceleration for playback for all code paths (openGL or native both mac and windows, selectable depending on best performance) | ||
Revision as of 04:56, 12 February 2019
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, 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 key or tempo changing (without affecting the other)
- 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 audio stream (from 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).
Milestones
10% payout at each milestone, with rest of payout at end / upon acceptance
- freelancer.com only: acceptance milestone (you get this just for accepting the project, to cover freelancer fees)
- on Windows, ability to play h.264 without forcing the user to install a codec (compliant with LGPL)
- rest of work / finishing touches.