Bug 1742

Summary: Review Request: vo-aacenc - VisualOn AAC encoder library
Product: Package Reviews Reporter: Prabin Kumar Datta <linux.n.pkd>
Component: Review RequestAssignee: RPM Fusion Package Review <rpmfusion-package-review>
Status: RESOLVED EXPIRED    
Severity: normal CC: dominik, hans, hobbes1069, kevin.kofler, rc040203, rpmfusion-package-review, sergio, thomasbelvin, tnorth
Priority: P5    
Version: Current   
Hardware: All   
OS: GNU/Linux   
namespace:

Description Prabin Kumar Datta 2011-05-09 17:49:31 CEST
Spec URL: http://prabindatta.fedorapeople.org/SPECS/vo-aacenc.spec
SRPM URL:
http://prabindatta.fedorapeople.org/SRPMS/vo-aacenc-0.1.0-1.fc14.src.rpm
Description: 
This library contains an encoder implementation of the Advanced 
Audio Coding (AAC) audio codec. The library is based on a codec 
implementation by VisualOn as part of the Stagefright framework 
from the Google Android project.

> Why this package is not eligible to be included in Fedora?
https://bugzilla.redhat.com/show_bug.cgi?id=701811#c3
and
https://bugzilla.redhat.com/show_bug.cgi?id=701811#c4

> Mention if this is your first RPM Fusion package?
Yes!

> Mention that you are seeking a sponsor if you are not a Fedora sponsored > packager or an RPM Fusion sponsored package?
I am already sponsored in fedora.
fas name: prabindatta
Comment 1 Thibault North 2011-05-09 22:48:49 CEST
I'll review that one.
Comment 2 Thibault North 2011-05-10 17:03:24 CEST
rpmlint output:
[tnorth@grouchy ~]$ rpmlint SRPMS/vo-aacenc-0.1.0-1.fc14.src.rpm RPMS/x86_64/vo-aacenc-0.1.0-1.fc14.x86_64.rpm RPMS/x86_64/vo-aacenc-devel-0.1.0-1.fc14.x86_64.rpm RPMS/x86_64/vo-aacenc-debuginfo-0.1.0-1.fc14.x86_64.rpm
vo-aacenc.src: W: spelling-error Summary(en_US) codec -> cosec, codex, code
vo-aacenc.src: W: spelling-error %description -l en_US codec -> cosec, codex, code
vo-aacenc.x86_64: W: spelling-error Summary(en_US) codec -> cosec, codex, code
vo-aacenc.x86_64: W: spelling-error %description -l en_US codec -> cosec, codex, code
vo-aacenc-devel.x86_64: W: invalid-url URL: http://opencore-amr.sourceforge.net/ HTTP Error 403: Forbidden
vo-aacenc-devel.x86_64: W: no-documentation
vo-aacenc-debuginfo.x86_64: W: invalid-url URL: http://opencore-amr.sourceforge.net/ HTTP Error 403: Forbidden
4 packages and 0 specfiles checked; 0 errors, 7 warnings.

(urls are okay, redirection breaks the rpmlint test)

# MUST: rpmlint must be run on the source rpm and all binary rpms the build produces. The output should be posted in the review. [OK]
# MUST: The package must be named according to the Package Naming Guidelines . [OK]
# MUST: The spec file name must match the base package %{name}, in the format %{name}.spec unless your package has an exemption. [OK]
# MUST: The package must meet the Packaging Guidelines . [OK]
# MUST: The package must be licensed with a Fedora approved license and meet the Licensing Guidelines .  [OK rpmfusion]
# MUST: The License field in the package spec file must match the actual license.[OK]
# MUST: If (and only if) the source package includes the text of the license(s) in its own file, then that file, containing the text of the license(s) for the package must be included in %doc.[OK (NOTICE contains the licence of COPYING)]
# MUST: The spec file must be written in American English. [OK]
# MUST: The spec file for the package MUST be legible. [OK]
# MUST: The sources used to build the package must match the upstream source, as provided in the spec URL. Reviewers should use md5sum for this task. If no upstream URL can be specified for this package, please see the Source URL Guidelines for how to deal with this. [OK]
# MUST: The package MUST successfully compile and build into binary rpms on at least one primary architecture. [OK]
# MUST: If the package does not successfully compile, build or work on an architecture, then those architectures should be listed in the spec in ExcludeArch. Each architecture listed in ExcludeArch MUST have a bug filed in bugzilla, describing the reason that the package does not compile/build/work on that architecture. The bug number MUST be placed in a comment, next to the corresponding ExcludeArch line. [NA]
# MUST: All build dependencies must be listed in BuildRequires, except for any that are listed in the exceptions section of the Packaging Guidelines ; [inclusion of those as BuildRequires is optional. Apply common sense. [OK]
# MUST: The spec file MUST handle locales properly. This is done by using the %find_lang macro. Using %{_datadir}/locale/* is strictly forbidden.[9] [NA]
# MUST: Every binary RPM package (or subpackage) which stores shared library files (not just symlinks) in any of the dynamic linker's default paths, must call ldconfig in %post and %postun. [OK]
# MUST: Packages must NOT bundle copies of system libraries. [OK]
# MUST: If the package is designed to be relocatable, the packager must state this fact in the request for review, along with the rationalization for relocation of that specific package. Without this, use of Prefix: /usr is considered a blocker. [NA]
# MUST: A package must own all directories that it creates. If it does not create a directory that it uses, then it should require a package which does create that directory.[OK]
# MUST: A Fedora package must not list a file more than once in the spec file's %files listings. (Notable exception: license texts in specific situations)[14] [OK]
# MUST: Permissions on files must be set properly. Executables should be set with executable permissions, for example. [OK]
# MUST: Each package must consistently use macros.  [OK]
# MUST: The package must contain code, or permissable content. [OK]
# MUST: Large documentation files must go in a -doc subpackage. (The definition of large is left up to the packager's best judgement, but is not restricted to size. Large can refer to either size or quantity). [NA]
# MUST: If a package includes something as %doc, it must not affect the runtime of the application. To summarize: If it is in %doc, the program must run properly if it is not present. [OK]
# MUST: Header files must be in a -devel package. [OK]
# MUST: Static libraries must be in a -static package. [NA]
# MUST: If a package contains library files with a suffix (e.g. libfoo.so.1.1), then library files that end in .so (without suffix) must go in a -devel package. [OK]
# MUST: In the vast majority of cases, devel packages must require the base package using a fully versioned dependency: Requires: %{name}%{?_isa} = %{version}-%{release} [OK]
# MUST: Packages must NOT contain any .la libtool archives, these must be removed in the spec if they are built.[OK]
# MUST: Packages containing GUI applications must include a %{name}.desktop file, and that file must be properly installed with desktop-file-install in the %install section. If you feel that your packaged GUI application does not need a .desktop file, you must put a comment in the spec file with your explanation. [NA]
# MUST: Packages must not own files or directories already owned by other packages. The rule of thumb here is that the first package to be installed should own the files or directories that other packages may rely upon. This means, for example, that no package in Fedora should ever share ownership with any of the files or directories owned by the filesystem or man package. If you feel that you have a good reason to own a file or directory that another package owns, then please present that at package review time. [OK]
# MUST: All filenames in rpm packages must be valid UTF-8. [OK]


Therefore, the package is APPROVED
Comment 3 Prabin Kumar Datta 2011-05-10 22:02:07 CEST
Thanks! Thibault

Package CVS request
======================
Package Name:  vo-aacenc
Short Description: VisualOn AAC encoder library
Owners: prabindatta
Branches: devel F-15 F-16 EL-6
InitialCC:
----------------------
License tag: nonfree
Comment 4 Prabin Kumar Datta 2011-05-10 22:37:32 CEST
Since it is similar to opencore-amr which is already available and also based on VisualOn. 
I think this package will be under License tag: free (used opencore-amr as reference)

Small change:
Package CVS request
======================
Package Name:  vo-aacenc
Short Description: VisualOn AAC encoder library
Owners: prabindatta
Branches: devel F-15 F-16 EL-6
InitialCC:
----------------------
License tag: free

Comment 5 Prabin Kumar Datta 2011-05-10 22:53:55 CEST
Sorry for again updating this. But this is request from a friend to add F-14 under branch.

Small change:
Package CVS request
======================
Package Name:  vo-aacenc
Short Description: VisualOn AAC encoder library
Owners: prabindatta
Branches: devel F-14 F-15 F-16 EL-6
InitialCC:
----------------------
License tag: free
Comment 6 Richard 2011-05-11 15:13:08 CEST
Just confirmed, bug 4 should not be removed when bug 33 is added.
Comment 7 Kevin Kofler 2011-06-04 20:04:19 CEST
Are we sure this package is actually legal to ship under the license it claims to be under?

http://spectralhole.blogspot.com/2010/12/androids-stagefright-aac-encoder-or.html

If the above blog post is true, this package contains non-Free code derived from the ISO AAC reference implementation just like FAAC does.

Bumping out of accepted because of the legal issues. If the above analysis is true, the package is entirely undistributable in its current state and needs to go to nonfree if its license headers get fixed.
Comment 8 Kevin Kofler 2011-06-05 00:23:56 CEST
So http://www.mail-archive.com/libav-devel@libav.org/msg00895.html claims:
> The code in these libraries are (just as for opencore-amr) relicensed 
> versions of 3GPP reference code, but all of it has, to the best of my 
> knowledge, been checked for legal correctness by Google.

Now whom do we believe? Do they have the rights to relicense that 3GPP code? What about the code which 3GPP allegedly derived from ISO reference code?
Comment 9 Kevin Kofler 2011-06-05 00:30:00 CEST
See also:
http://www.hydrogenaudio.org/forums/index.php?showtopic=88183&pid=752806&mode=threaded&start=#entry752806
http://code.google.com/p/android/issues/detail?id=16431

(Google's response there shows that Google didn't check the legal status as claimed by Martin Storsjö, they're deferring all queries to VisualOn.)
Comment 10 Kevin Kofler 2011-06-05 00:34:33 CEST
The opencore-amr and vo-amrwbenc codecs might also be encumbered, by the way.
Comment 11 Prabin Kumar Datta 2011-06-09 18:38:50 CEST
Hi! Kevin Kofler,
After reading your question I was confused since these are legal issues. So, I asked Upstream about this.

Here goes the Upstream's answers of all your questions:

> /----------- (1.)
> Are we sure this package is actually legal to ship under the license it claims
> to be under?
>
> http://spectralhole.blogspot.com/2010/12/androids-stagefright-aac-encoder-or.html
>
> If the above blog post is true,

Yes, it's true, it is derived from the 3GPP reference implementation -
nobody denies that.

> this package contains non-Free code derived
> from the ISO AAC reference implementation just like FAAC does.

Except that in this case, VisualOn claims, by releasing the code under the
license they have done, that they have the right to doing it.

> /------- (2.)
> So http://www.mail-archive.com/libav-devel@libav.org/msg00895.html claims:
> > The code in these libraries are (just as for opencore-amr) relicensed
> > versions of 3GPP reference code, but all of it has, to the best of my
> > knowledge, been checked for legal correctness by Google.
>
> Now whom do we believe? Do they have the rights to relicense that 3GPP code?

You can only know that by asking 3GPP and VisualOn.

> What about the code which 3GPP allegedly derived from ISO reference code?

The same goes here, you need to ask 3GPP.

> http://www.hydrogenaudio.org/forums/index.php?showtopic=88183&pid=752806&mode=threaded&start=#entry752806
> http://code.google.com/p/android/issues/detail?id=16431
>
> (Google's response there shows that Google didn't check the legal status as
> claimed by Martin Storsjö, they're deferring all queries to VisualOn.)

That's the most authoritive answer you will get, unless you ask VisualOn
yourself. I have not done any further research myself - I only
redistribute code under the license that I have got it from
Google/VisualOn. You can't really get any further by discussing this issue
back and forth between people that haven't checked the issue and that
aren't lawyers.

Either you trust that VisualOn has done things right, or you ask them to
provide the necessary documents showing that everything is right.

> /--------- (4.)
> The opencore-amr and vo-amrwbenc codecs might also be encumbered, by the way.

Yes, the same goes for them, too, except that you need to ask PacketVideo
instead of VisualOn, for opencore-amr.
Comment 12 Kevin Kofler 2011-06-16 12:30:57 CEST
So how do we proceed from there? We surely can't bother RH Legal with this patent-encumbered stuff, so who should decide whether we can ship this or not?
Comment 13 Prabin Kumar Datta 2011-06-27 19:04:32 CEST
I have send a mail to info@visualon.com asking about the legal issue with a link to this package review page.
Comment 14 Richard 2011-10-06 21:22:18 CEST
(In reply to comment #13)
> I have send a mail to info@visualon.com asking about the legal issue with a
> link to this package review page.

Did you ever get a response? 

Comment 15 Prabin Kumar Datta 2011-10-09 00:22:10 CEST
Till now I didn't get any response.
Comment 16 Tom 2012-09-15 22:09:40 CEST
Please ask again.

It's a pain creating a vo-aacenc package and adding "--enable-libvo-aacenc --enable-version3" to ffmpeg spec just to convert video for my phone with Mobile Media Converter (another missing package).
Comment 17 Hans de Goede 2012-09-16 09:11:20 CEST
Hi all,

2 things:

1) About the legal issue, http://code.google.com/p/android/issues/detail?id=16431#c1 says:

"This codec software has been developed by VisualOn based on 3GPP specifications and has been included in the Android Open-Source Project. VisualOn believes that it has the necessary rights to the AAC encoder code, but is in the process of re-confirming this."

Thus I believe that we can and should simply ship this as part of free for 2 reasons:

a) We simply have to trust upstream when it comes to licensing statements, as there usually is no other source for us to find out where the code comes from, <period>. We do that for all packages, I don't see why this one is that much different.

b) As for the fact that this happens to be derived from a reference implementation. Well the whole purpose of said reference implementain is for others to base encoders on it. So chances are that VisualOn has a license for the necessary aac related IP, including the reference implementation. And until we receive word to the contrary, we are back to a) trusting upstreams licensing statement

c) a) apparently is good enough for google to continue shipping this. If it is good enough for google I don't see why it is not good enough for rpmfusion.

Note IANAL, but still I say we should move forward for this.

2) I was not aware of this Review Request, so in the mean time I've created my own package for this, see bug 2470. I'll mark 2470 as a dup of this one right after this. But I do suggest that we use my version for importing once this package is created in pkg CVS, because:
1) It is based on the newer 1.2 version
2) It properly uses %{?_isa} for the -devel Requires on the base package
3) It does not ship a static lib, which is a clear violation of the packaging guidelines

Regards,

Hans
Comment 18 Hans de Goede 2012-09-16 09:20:23 CEST
*** Bug 2470 has been marked as a duplicate of this bug. ***
Comment 19 Kevin Kofler 2013-05-23 05:15:16 CEST
So, it doesn't look like this situation is going to change, unfortunately; I guess VisualOn simply isn't willing to make any positive statements that could expose them to (additional) liabilities. I think I actually agree with Hans now: Seeing how this has been shipping with something as high-profile as Android for 2 years now, if something were afoul with its licensing, something would have happened by now. And seeing how even GStreamer expects this to be available these days, I think we should actually ship it.
Comment 20 Hans de Goede 2014-03-02 09:09:44 CET
Kevin,

I would like to move forward with this and at this time we 2 seem to be the only 2 interested in getting this into rpmfusion.

Therefor I would like to take over as the package submitter, can you take over as reviewer, review this and mark it as approved, then we'll see if we can get someone to actually create a CVS module for this.

The links from the original description:

Spec URL: http://prabindatta.fedorapeople.org/SPECS/vo-aacenc.spec
SRPM URL:
http://prabindatta.fedorapeople.org/SRPMS/vo-aacenc-0.1.0-1.fc14.src.rpm

Still work, and are the version I would like to import, so please review those.

Thanks & Regards,

Hans
Comment 21 Hans de Goede 2016-09-16 17:13:54 CEST
Hi,

Ok, lets revive / reboot this review request. Here is an updates spec and srpm:

http://jwrdegoede.danny.cz/vo-aacenc.spec
http://jwrdegoede.danny.cz/vo-aacenc-0.1.3-1.fc26.src.rpm

Changes since the list version:

* Fri Sep 16 2016 Hans de Goede <j.w.r.degoede@gmail.com> - 0.1.3-1
- New upstream release 0.1.3
- Stop building and packaging a statically linked lib

Regards,

Hans
Comment 22 rc040203 2016-09-16 18:05:21 CEST
(In reply to Hans de Goede from comment #21)

- MUSTFIX: Building is non-verbose
Please append --disable-silent-rules to %configure

- /usr/lib64/pkgconfig/vo-aacenc.pc seems broken to me.

It uses includedir=/usr/include, but the headers below /usr/include/vo-aacenc
are expecting to find vo-aacenc's headers under /usr/include/vo-aacenc:

e.g.
/usr/include/vo-aacenc/voAMRWB.h:#include  "voAudio.h"

i.e. they expect -I/usr/include/vo-aacenc and not -I/usr/include.


- Consider to remove the "rm -rf %{buildroot}" from %install
It's not needed anymore unless you plan to build this package for really ancient rhels.


- Consider to remove the "Group" tags. They aren't used for anything in Fedora.
Comment 23 Dominik 'Rathann' Mierzejewski 2016-09-16 18:41:55 CEST
FYI this is no longer relevant for FFmpeg as vo-aacenc is not supported. fdk-aac is for HE-AAC, and the native encoder is good enough for most cases.
Comment 24 Hans de Goede 2016-09-17 14:13:51 CEST
(In reply to rc040203 from comment #22)
> (In reply to Hans de Goede from comment #21)
> 
> - MUSTFIX: Building is non-verbose
> Please append --disable-silent-rules to %configure

Fixed in 0.1.3-2

> - /usr/lib64/pkgconfig/vo-aacenc.pc seems broken to me.
> 
> It uses includedir=/usr/include,

Right, vo-amrwbenc does the same thing, the users expect to need to do:

#include <vo-amrwbenc/enc_if.h>

I just tried building gstreamer1-plugins-bad-freeworld with vo-aacenc support enabled and that works fine.

> - Consider to remove the "rm -rf %{buildroot}" from %install
> It's not needed anymore unless you plan to build this package for really
> ancient rhels.

Fixed in 0.1.3-2

> - Consider to remove the "Group" tags. They aren't used for anything in
> Fedora.

Fixed in 0.1.3-2

Here is 0.1.3-2 :

* Sat Sep 17 2016 Hans de Goede <j.w.r.degoede@gmail.com> - 0.1.3-2
- Pass --disable-silent-rules to %%configure
- Drop obsolete Group tags, rm -rf %%{buildroot}
- Use %%make_install

http://jwrdegoede.danny.cz/vo-aacenc.spec
http://jwrdegoede.danny.cz/vo-aacenc-0.1.3-2.fc26.src.rpm
Comment 25 Nicolas Chauvet 2017-04-24 14:02:49 CEST
(In reply to Dominik 'Rathann' Mierzejewski from comment #23)
> FYI this is no longer relevant for FFmpeg as vo-aacenc is not supported.
> fdk-aac is for HE-AAC, and the native encoder is good enough for most cases.

Please re-open if anyone think this review is still relevant.