Matthew/Artem:

Yes, if sound-juicer is having trouble ripping files, then this is likely
because the CDDA plugin we use (cddasrc) is not very sophisticated.  We
have been using this basic cddasrc CDDA plugin since Vermillion devel build 62.

Previously we were using the GStreamer libcdio plugin (cdiocddasrc), but we
stopped shipping it when we realized that we were linking GPL libcdio into a
LGPL GStreamer plugin.  Unfortunately both of the popular CDDA plugins supported
by GStreamer depend on GPL libraries (libcdio and libcdparanoia).  We've talked
with the libcdio maintainer and they have no interest in changing license to
LGPL.  The libcdparanoia code doesn't compile or work on Solaris.

This basic cddasrc plugin just accesses the CD device using simple ioctl's
and has no error correction or logic to deal with skips, artifacts, damage
correction, etc.  Also there are known issues with the ioctl's not working
well with some CD drives.

Support for things like cdparanoia could be added, but we can't copy code
from any of the existing GPL'ed projects such as cdparanoia or libcdio.
I know that Jörg uses a LGPL-compatible permutation of cdparanoia in
cdda2wav, but I don't believe the needed headers/libraries are exposed by
cdda2wav on Solaris for GStreamer to use.  Or am I wrong here?

There was also some talk about making sound-juicer use cdda2wav to take
advantage of its higher quality and the fact that it works on a wider
set of CD players.  However, cdda2wav is a command-line utility that
doesn't integrate cleanly with a GStreamer plugin.  The GSTreamer plugin
wants to read the file one sector at a time, including situations where
users may hit the pause button and there could be a long delay between
sector reads.  If cdda2wav provided a set of interfaces that could be
used by GStreamer, it wouldn't be hard to write a CDDA plugin to use
cdda2wav interfaces.  Note the existing cddasrc pluging is less than 600
lines of code, so it isn't much code to write a CDDA plugin.

Another idea might be to move away from sound-juicer and start shipping
GRIP instead, since it is a nice user interface for ripping CD's via
cdda2wav.  However, note it only uses cdda2wav for ripping and uses
GStreamer for playing audio from the CD.  If we wanted to really use
GRIP, it probably should avoid using GStreamer altogether and only use
cdda2wav.  Otherwise you wouldn't be able to play CD's on some machines,
but you would be able to rip them and play the created WAV files.  That's
not really acceptable either.  So I think GRIP needs some work before it can
replace sound-juicer.

So if you have problems in this area, here are your options:

1) Use cdda2wav (or GRIP) for ripping and don't use sound-juicer.

2) Get a CD drive that works with the basic CDDA plugin and throw
    away your current drive that doesn't work well with Solaris ioctl's
    anyway.  Do you really want to use a CD drive that requires error
    correction to just read from any CD?  I'd say such drives would be
    less reliable overall.

3) Install libcdio from SFE, rebuild SUNWgnome-media packages so that
    the cdiocddasrc plugin gets built, and use that.  It's not as good
    as cdda2wav, but will work with sound-juicer, and is better than the
    basic CDDA plugin.

4) Help to make the basic plugin better, so it has better paranoia
    support without violating GPL licensing.

5) Get involved with the cdda2wav project and make it possible for
    GStreamer to use its interfaces, which are supposed to work better
    than libcdio and do not have GPL legal issues.

> Artem, did you implement your replacement code the way I did propose (by 
> calling
> cdda2wav)?

I also worked on the cddasrc plugin with Artem.  No, we didn't take your
suggestons due to all the issues spelled out above.  In fact, Jörg, I pinged
you on March 16th and April 14th, earlier this year about these issues, but
you never responded (private thread between you, me, and Artem titled
"Unable to play CD's with snv_59").

I know that cdda2wav does allow sector reading at a time, but you didn't
make it clear how to use cdda2wav interfaces to handle things like a user
hitting pause, then hitting unpause.  Or a user sliding the time bar to
move the play-time to a point earlier or later in the song.  Does cdda2wav
provide interfaces that would make such things possible?

Also, it doesn't seem to make sense to run cdda2wav over and over for each
sector.  Is there a way to run cdda2wav once and then control it via signals or
something so that you can say, things like "give me the next sector now" or
"give me sector xyz now"?

> If you did not..... cdda2wav is full of tricks that allow it to work around 
> typical bugs (deviations from the CD standard) and to play or extract audio
> in as many cases as possible.

The biggest drawback to cdda2wav is that it doesn't seem to provide any
interfaces to GStreamer that would allow users to take advantage of these
features from GStreamer based programs like totem, rhythmbox or sound-juicer.

I also know that cdda2wav does things with RBAC privileges so that
normal users have read permission from the CD device (and not just the
root user).  So this makes it a bit harder to port cdda2wav code into
GStreamer.  Not sure if it makes sense for a library to require such
privilege if you use one of its plugins.  Although we know the programs
we ship that use the cdda plugin, this would create hassles for users
who download and install programs that want to use this plugin, for
example.

References:

Bug asking GStreamer maintainers to add this simple cdda plugin upstream
and to move the libcdio plugin to gst-plugins-ugly or gst-plugins-bad.

   http://bugzilla.gnome.org/show_bug.cgi?id=413705

The above bug report has the cddasrc plugin code as an attachment if
you want to review the code we use for our current "basic" CDDA plugin.

Brian
_______________________________________________
opensolaris-discuss mailing list
opensolaris-discuss@opensolaris.org

Reply via email to