Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 02 Dec 2010 18:31:34 +0200
From:      Andriy Gapon <avg@freebsd.org>
To:        Max Brazhnikov <makc@freebsd.org>
Cc:        freebsd-multimedia@freebsd.org, kde@freebsd.org
Subject:   libxine and audio cd: use libcdio ?
Message-ID:  <4CF7C9E6.8090903@freebsd.org>

next in thread | raw e-mail | index | archive | help

I've noticed that libxine currently supports digital extraction of Audio CD data
only for acd(4) devices, but not for cd(4); the latter case including access via
ahci, ATA_CAM or atapicam.

This in turn means problems for KDE if Phonon is configured with Xine backend.
This is easy to test with kscd or amarok and an audio CD.

So I got this craze idea.  multimedia/libxine already has a dependency on
sysutils/libcdio, but for unrelated reasons.  libcdio is a bit more sophisticated
than libxine in digital audio extraction area and does properly support both cd(4)
and acd(4).  So, why not use libcdio's capabilities in libxine instead of rolling
duplicate (and less capable in FreeBSD case) routines.
This suggestion should probably go to the upstream developers as well.  But for
time being let's focus on our immediate problem.

Here's a work-in-progress and a little bit hackish patch that implements the idea:
http://people.freebsd.org/~avg/libxine-input_cdda.diff

Short description:
- add read_cdrom_toc() and read_cdrom_frames() implementations that use libcdio

- universally use cdda_input_plugin_t* as the first argument to read_cdrom_toc
 - this removes ifdef in the calling code and adds this_gen->fd dereference where
needed

- an unrelated change that sneaked in - __FreeBSD_kernel__ => __FreeBSD_kernel__,
__FreeBSD_kernel_version => __FreeBSD_version

- cdda_open => _cdda_open, cdda_close => _cdda_close to avoid name conflict with
libcdio headers (cdparanoia compatibility names)

- $(LIBCDIO_LIBS) -lcdio_cdda in related Makefile
 - this is an "unlcean" change, it should be in Makefile.am and should check
libcdio availability (like #ifdef LIBCDIO_CONFIG_H in the source code)

- also it seems that I missed cdio_cddap_close() call, will fix that.

What do you think?
Thanks!

P.S. I've also written a little posting about differences between cd(4) and acd(4)
with respect audio CDs:
http://www.listshow.net/201012/freebsd-arch/1747-accessing-data-on-audio-cd.html

-- 
Andriy Gapon



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4CF7C9E6.8090903>