Hi everybody,
I'd like to ask a questions to which I can't seem to find a clear answer.
Freescale i.MX6Q SOC (this is the one we use the most, but some considerations apply also to others) has features that allow to decode media streams (audio and video) in hardware.
In particular, the "i.MX_Android_Extended_Codec_Release_Notes.pdf" document for the Freescale Android release, lists several "Freescale enhanced codecs".
The release description says that "Only codecs that have no license restriction are included in omxplayer package."
What does exactly "no license restriction" stand for? In particular I'm trying to figure out if I need to pay for patents related to some of those codecs, for example mp3, aac, H.264 and so on. I mean, is the decoding / encoding functionality implemented in hardware, so that there's no patent encumbered functionality in the software?
Can anybody give an indication, and eventually list special cases if there are any?
Thanks in advance!
Solved! Go to Solution.
Hello Diego,
The landscape of codecs at Freescale, their different license terms and how they need to be "handled" is indeed confusing. Let me see if I can clarify the i.MX codec/extended codec scenario:
Hopefully I answered more questions than I created!
Ok, so it all goes back to "it would be nice to have an easy option to remove proprietary CODEC decode/encode technology software from Freescale BSPs" as also asked here:
Hello Diego,
The landscape of codecs at Freescale, their different license terms and how they need to be "handled" is indeed confusing. Let me see if I can clarify the i.MX codec/extended codec scenario:
Hopefully I answered more questions than I created!
Hi Stephen,
after looking deeper into Android Freescale BSP I think my question is still partly unresponded, and I'm about to explain why.
The part I'm referring to specifically is:
Stephen Cox:
- Restricted Use/distribution codecs such as MPEGLA (MP3, H.264...), AAC... these are also considered proprietary codecs BUT the licensors allow Freescale to distribute them in our standard BSP (or extended package) for internal use and demonstration purposes -- any commercial distribution requires the customer to engage directly with the Licensor to garner a proper license. These terms are included in the appendix of the license you clicked through to take delivery of the Android BSP.
While for audio decoders, encoders and parsers I can actually find the software pieces that do the decoding inside the Android Freescale BSP and run on the CPU, I can't find the same for video decoders and encoders, as I just find software that seems to be communicating with a hardware device (not the CPU) which actually performs decoding and encoding.
Let me detail that with two examples.
MP3 decoding
I can find the OMX component that is registered to OMX core in the file external/fsl_imx_omx/OpenMAXIL/release/registry/component_register.
The OMX component OMX.Freescale.std.audio_decoder.mp3.sw-based that has the audio_decoder.mp3 role uses the lib_omx_mp3_dec_v2_arm11_elinux.so.
As can be seen in external/fsl_imx_omx/OpenMAXIL/src/component/mp3_dec/Android.mk the lib_omx_mp3_dec_v2_arm11_elinux.so library uses and links to device/fsl-codec/lib/lib_mp3_dec_v2_arm12_elinux.so, which is the software piece, provided by Freescale, that runs on the CPU so it might require licensing as you detailed.
H.264 / MPEG4 AVC decoding
I can find the OMX component that is registered to OMX core in the file external/fsl_imx_omx/OpenMAXIL/release/registry/component_register.
The OMX component OMX.Freescale.std.video_decoder.avc.v3.hw-based that has the video_decoder.avc role uses the lib_omx_vpu_dec_v2_arm11_elinux.so.
As can be seen in external/fsl_imx_omx/OpenMAXIL/src/component/vpu_dec_v2/Android.mk the lib_omx_vpu_dec_v2_arm11_elinux.so library uses and links to libvpu.so, which is obtained by building the files in external/linux-lib/vpu/ provided by Freescale.
To me it looks like this software just opens /dev/mxc_vpu device and passes buffers so that hardware VPU can decode incoming video streams.
So, I'm back to the question: am I right supposing that no license is needed for computing (decoding) which is performed on the VPU? After all I won't be shipping any software performing video decoding, as libvpu.so seems to be just passing back and forth data.
Thanks,
Diego
P.S.: I know software fallback using libav gets installed by default, but don't take that into consideration, as I'm willing to remove the fallback and the library altogether.
Yeah... it actually doesn't matter whether or how much hardware assist is leveraged in the decode pipeline.
The bottom line from a commercial distribution license standpoint is ... if the software codec enables a salient stream (MP3, MP4, h.264...) to be decoded on the system/SoC (regardless of whether some or most of that decode is performed by the VPU vs the CPU) then MPEGLA (other restricted codec licensors) consider that as royalty bearing distribution.
Audio codecs are somewhat "lighter" on resources so they are often decoded in the CPU of modern SoC's (i.MX6). Video codecs continue to require HW assist as they scale to crazy resolutions, frame rates and multiple display/planes... and FSL spends significant effort to tune the video codecs to take advantage of our VPU hardware. But, at the end of the day -- from a commercial distribution license/royalty standpoint -- they are treated the same.
Thank you again Stephen,
The bottom line from a commercial distribution license standpoint is ... if the software codec enables a salient stream (MP3, MP4, h.264...) to be decoded on the system/SoC (regardless of whether some or most of that decode is performed by the VPU vs the CPU) then MPEGLA (other restricted codec licensors) consider that as royalty bearing distribution.
This somewhat puzzles me, as I always though the "equation" was:
Following your statement the "equation" should be more like:
As is in the product we have in mind the target is to use only one single video format with no audio of any kind (audio output won't even be connected) our target is to remove the ability to play any unused codec, to avoid obtaining and paying license for stuff that we have no use for.
I don't know if you can reply to the following question officially from Freescale's point of view, but I gladly accept even "personal" and "not a lawyer's perspective" kind of answers: would properly stripping down libvpu to allow decoding of only the desired format allow me to obtain license only for that single format?
I think the answers is "yes" or else any hardware "H.264 capable" would require obtaining patent license. But then every modern CPU would be "H.264 capable"...
Thank you Stephen, and again thank you for following me in this long thread and taking the time to provide your kind replies.
Diego
There's no need to remove or de-feature general functionality that can be utilized for playback of various codecs. It is designed to be beneficial to a broad array of video codecs but not IP specific or royalty bearing.
Just because there is generic video acceleration technology in the VPU pipeline that can benefit h.264 playback (or DivX, or MPEG4) does not mean you have to pay a royalty for those codecs.
If you load proprietary CODEC decode/encode technology software on to your platform that specifically enables playback of that codec, then you must adhere to the license associated with distribution.
Hi Stephen,
thank you very much for your detailed and precise answer. I had a partial idea of what you explained, but your reply solved all my doubts. I hope your answer will be useful also to other people.
Again, thank you very much Stephen,
regards,
Diego
Hi,
Its better you can contact Freescale local SALES person for the clarification.
Thank you Saurabh for your kind reply,
while I don't expect a one size fits all reply, I think Freescale could publicly explain the relation between their multimedia decoding hardware and most common patents (e.g. H.264).
Thanks.