summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.cpp42
1 files changed, 21 insertions, 21 deletions
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.cpp b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
index 9d1ff8c..1989b4a 100644
--- a/core/multimedia/opieplayer/libmad/libmadplugin.cpp
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
@@ -361,243 +361,243 @@ int LibMadPlugin::http_open(const QString& path ) {
http_request[4] = 0;
if (strcmp(http_request, "200 ")) {
fprintf(stderr, "http_open: ");
do {
read(tcp_sock, &c, sizeof(char));
fprintf(stderr, "%c", c);
} while (c != '\r');
fprintf(stderr, "\n");
return (0);
}
#endif
QString name;
QString genre;
QString bitrate;
QString url;
QString message = tr("Info: ");
do {
int len;
len = http_read_line(tcp_sock, http_request, sizeof(http_request));
if (len == -1) {
- qDebug( "http_open: "+ QString(strerror(errno)) +"\n");
+ // qDebug( "http_open: "+ QString(strerror(errno)) +"\n");
return 0;
}
if (QString(http_request).left(9) == "Location:") {
/* redirect */
::close(tcp_sock);
http_request[strlen(http_request) - 1] = '\0';
return http_open(&http_request[10]);
}
if (QString(http_request).left(4) == "ICY ") {
/* This is shoutcast/icecast streaming */
if (strncmp(http_request + 4, "200 ", 4)) {
- qDebug("http_open: " + QString(http_request) + "\n");
+ // qDebug("http_open: " + QString(http_request) + "\n");
return 0;
}
} else if (QString(http_request).left(4) == "icy-") {
/* we can have: icy-noticeX, icy-name, icy-genre, icy-url, icy-pub, icy-metaint, icy-br */
if ( QString( http_request ).left( 8 ) == "icy-name" ) {
name = tr("Name: ") + QString(http_request).mid(9, (QString(http_request).length())- 9 );
} else if ( QString( http_request ).left( 9 ) == "icy-genre" ) {
genre = tr("Genre: ") + QString(http_request).mid(10, (QString(http_request).length())-10 );
} else if ( QString( http_request ).left( 6 ) == "icy-br" ) {
bitrate = tr("Bitrate: ") + QString(http_request).mid(7, (QString(http_request).length())- 7 );
} else if ( QString( http_request ).left( 7 ) == "icy-url" ) {
url = tr("URL: ") + QString(http_request).mid(8, (QString(http_request).length())- 8 );
} else if ( QString( http_request ).left( 10 ) == "icy-notice" ) {
message += QString(http_request).mid(11, QString(http_request).length()-11 ) ;
}
}
} while (strcmp(http_request, "\n") != 0);
info = QString(name + genre + url + bitrate + message).replace( QRegExp("\n"), " : " );
- qDebug("Stream info: " + info);
+ // qDebug("Stream info: " + info);
return (tcp_sock);
}
bool LibMadPlugin::open( const QString& path ) {
debugMsg( "LibMadPlugin::open" );
Config cfg("OpiePlayer");
cfg.setGroup("Options");
bufferSize = cfg.readNumEntry("MPeg_BufferSize",MPEG_BUFFER_SIZE);
- qDebug("buffer size is %d", bufferSize);
+ // qDebug("buffer size is %d", bufferSize);
d->bad_last_frame = 0;
d->flush = TRUE;
info = QString( "" );
//qDebug( "Opening %s", path.latin1() );
if (path.left( 4 ) == "http" ) {
// in case of any error we get 0 here
if ( !(http_open(path) == 0) ) {
d->input.fd = http_open(path);
} else {
return FALSE;
}
} else {
d->input.path = path.latin1();
d->input.fd = ::open( d->input.path, O_RDONLY );
// thats a better place, since it should only seek for ID3 tags on mp3 files, not streams
printID3Tags();
}
if (d->input.fd == -1) {
- qDebug("error opening %s", d->input.path );
+ // qDebug("error opening %s", d->input.path );
return FALSE;
}
struct stat stat;
if (fstat(d->input.fd, &stat) == -1) {
- qDebug("error calling fstat"); return FALSE;
+ // qDebug("error calling fstat"); return FALSE;
}
if (S_ISREG(stat.st_mode) && stat.st_size > 0)
d->input.fileLength = stat.st_size;
else
d->input.fileLength = 0;
#if defined(HAVE_MMAP)
if (S_ISREG(stat.st_mode) && stat.st_size > 0) {
d->input.length = stat.st_size;
d->input.fdm = map_file(d->input.fd, &d->input.length);
if (d->input.fdm == 0) {
- qDebug("error mmapping file"); return FALSE;
+ // qDebug("error mmapping file"); return FALSE;
}
d->input.data = (unsigned char *)d->input.fdm;
}
#endif
if (d->input.data == 0) {
d->input.data = (unsigned char *)malloc( bufferSize /*MPEG_BUFFER_SIZE*/);
if (d->input.data == 0) {
- qDebug("error allocating input buffer");
+ // qDebug("error allocating input buffer");
return FALSE;
}
d->input.length = 0;
}
d->input.eof = 0;
mad_stream_init(&d->stream);
mad_frame_init(&d->frame);
mad_synth_init(&d->synth);
return TRUE;
}
bool LibMadPlugin::close() {
debugMsg( "LibMadPlugin::close" );
int result = TRUE;
mad_synth_finish(&d->synth);
mad_frame_finish(&d->frame);
mad_stream_finish(&d->stream);
#if defined(HAVE_MMAP)
if (d->input.fdm) {
if (unmap_file(d->input.fdm, d->input.length) == -1) {
- qDebug("error munmapping file");
+ // qDebug("error munmapping file");
result = FALSE;
}
d->input.fdm = 0;
d->input.data = 0;
}
#endif
if (d->input.data) {
free(d->input.data);
d->input.data = 0;
}
if (::close(d->input.fd) == -1) {
- qDebug("error closing file %s", d->input.path);
+ // qDebug("error closing file %s", d->input.path);
result = FALSE;
}
d->input.fd = 0;
return result;
}
bool LibMadPlugin::isOpen() {
debugMsg( "LibMadPlugin::isOpen" );
return ( d->input.fd != 0 );
}
int LibMadPlugin::audioStreams() {
debugMsg( "LibMadPlugin::audioStreams" );
return 1;
}
int LibMadPlugin::audioChannels( int ) {
debugMsg( "LibMadPlugin::audioChannels" );
/*
long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
qDebug( "LibMadPlugin::audioChannels: %i", d->frame.header.mode > 0 ? 2 : 1 );
return d->frame.header.mode > 0 ? 2 : 1;
*/
return 2;
}
int LibMadPlugin::audioFrequency( int ) {
debugMsg( "LibMadPlugin::audioFrequency" );
long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
- qDebug( "LibMadPlugin::audioFrequency: %i", d->frame.header.samplerate );
+ // qDebug( "LibMadPlugin::audioFrequency: %i", d->frame.header.samplerate );
return d->frame.header.samplerate;
}
int LibMadPlugin::audioSamples( int ) {
debugMsg( "LibMadPlugin::audioSamples" );
long t; short t1[5]; audioReadSamples( t1, 2, 1, t, 0 );
mad_header_decode( (struct mad_header *)&d->frame.header, &d->stream );
/*
qDebug( "LibMadPlugin::audioSamples: %i*%i", d->frame.header.duration.seconds,
d->frame.header.samplerate );
return d->frame.header.duration.seconds * d->frame.header.samplerate;
*/
if ( d->frame.header.bitrate == 0 )
return 0;
int samples = (d->input.fileLength / (d->frame.header.bitrate/8)) * d->frame.header.samplerate;
- qDebug( "LibMadPlugin::audioSamples: %i * %i * 8 / %i", (int)d->input.fileLength,
- (int)d->frame.header.samplerate, (int)d->frame.header.bitrate );
- qDebug( "LibMadPlugin::audioSamples: %i", samples );
+ // qDebug( "LibMadPlugin::audioSamples: %i * %i * 8 / %i", (int)d->input.fileLength,
+ // (int)d->frame.header.samplerate, (int)d->frame.header.bitrate );
+ // qDebug( "LibMadPlugin::audioSamples: %i", samples );
return samples;
// return 10000000;
}
bool LibMadPlugin::audioSetSample( long, int ) {
debugMsg( "LibMadPlugin::audioSetSample" );
// long totalSamples = audioSamples(0);
// if ( totalSamples <= 1 )
// return FALSE;
// // Seek to requested position
// qDebug( "seek pos: %i", (int)((double)pos * d->input.fileLength / totalSamples) );
// ::lseek( d->input.fd, (long)((double)pos * d->input.fileLength / totalSamples), SEEK_SET );
// mad_stream_sync(&d->stream);
// mad_stream_init(&d->stream);
// mad_frame_init(&d->frame);
// mad_synth_init(&d->synth);
// return TRUE;
@@ -659,49 +659,49 @@ bool LibMadPlugin::read() {
if (d->input.fdm == 0) {
d->input.data = 0;
return FALSE;
}
d->input.data = (unsigned char *)d->input.fdm;
}
mad_stream_buffer(&d->stream, d->input.data + skip, d->input.length - skip);
} else
#endif
{
if (d->stream.next_frame) {
memmove(d->input.data, d->stream.next_frame,
d->input.length = &d->input.data[d->input.length] - d->stream.next_frame);
}
do {
len = ::read(d->input.fd, d->input.data + d->input.length, bufferSize /* MPEG_BUFFER_SIZE*/ - d->input.length);
}
while (len == -1 && errno == EINTR);
if (len == -1) {
- qDebug("error reading audio");
+ // qDebug("error reading audio");
return FALSE;
}
else if (len == 0) {
d->input.eof = 1;
assert(bufferSize /*MPEG_BUFFER_SIZE*/ - d->input.length >= MAD_BUFFER_GUARD);
while (len < MAD_BUFFER_GUARD)
d->input.data[d->input.length + len++] = 0;
}
mad_stream_buffer(&d->stream, d->input.data, d->input.length += len);
}
return TRUE;
}
static mad_fixed_t left_err, right_err;
static const int bits = 16;
static const int shift = MAD_F_FRACBITS + 1 - bits;
inline long audio_linear_dither( mad_fixed_t sample, mad_fixed_t& error ) {
@@ -737,49 +737,49 @@ bool LibMadPlugin::decode( short *output, long samples, long& samplesMade ) {
int offset = buffered;
samplesMade = 0;
static int maxBuffered = 8000; // 65536;
if ( samples > maxBuffered ) {
samples = maxBuffered;
}
if ( d->flush ) {
buffered = 0;
offset = 0;
d->flush = FALSE;
}
while ( buffered < maxBuffered ) {
while (mad_frame_decode(&d->frame, &d->stream) == -1) {
if (!MAD_RECOVERABLE(d->stream.error)) {
debugMsg( "feed me" );
return FALSE; // Feed me
}
if ( d->stream.error == MAD_ERROR_BADCRC ) {
mad_frame_mute(&d->frame);
- qDebug( "error decoding, bad crc" );
+ // qDebug( "error decoding, bad crc" );
}
}
mad_synth_frame(&d->synth, &d->frame);
int decodedSamples = d->synth.pcm.length;
memcpy( &(buffer[0][offset]), d->synth.pcm.samples[0], decodedSamples * sizeof(mad_fixed_t) );
if ( d->synth.pcm.channels == 2 )
memcpy( &(buffer[1][offset]), d->synth.pcm.samples[1], decodedSamples * sizeof(mad_fixed_t) );
offset += decodedSamples;
buffered += decodedSamples;
}
//qApp->processEvents();
audio_pcm( output, samples, buffer[0], (d->synth.pcm.channels == 2) ? buffer[1] : 0 );
// audio_pcm( output, samples, buffer[1], buffer[0] );
// audio_pcm( output, samples, buffer[0], buffer[1] );
samplesMade = samples;
memmove( buffer[0], &(buffer[0][samples]), (buffered - samples) * sizeof(mad_fixed_t) );
if ( d->synth.pcm.channels == 2 ) {
memmove( buffer[1], &(buffer[1][samples]), (buffered - samples) * sizeof(mad_fixed_t) );
}
buffered -= samples;
return TRUE;
@@ -800,70 +800,70 @@ bool LibMadPlugin::audioReadSamples( short *output, int /*channels*/, long sampl
if ( !read() ) {
return FALSE;
}
needInput = FALSE;
if ( decode( output, samples, samplesMade ) )
return TRUE;
else
needInput = TRUE;
}
while ( ( samplesMade < samples ) && ( !d->input.eof ) );
return FALSE;
}
double LibMadPlugin::getTime() {
debugMsg( "LibMadPlugin::getTime" );
return 0.0;
}
void LibMadPlugin::printID3Tags() {
- qDebug( "LibMadPlugin::printID3Tags" );
+ // qDebug( "LibMadPlugin::printID3Tags" );
char id3v1[128 + 1];
if ( ::lseek( d->input.fd, -128, SEEK_END ) == -1 ) {
- qDebug( "error seeking to id3 tags" );
+ // qDebug( "error seeking to id3 tags" );
return;
}
if ( ::read( d->input.fd, id3v1, 128 ) != 128 ) {
- qDebug( "error reading in id3 tags" );
+ // qDebug( "error reading in id3 tags" );
return;
}
if ( ::strncmp( (const char *)id3v1, "TAG", 3 ) != 0 ) {
debugMsg( "sorry, no id3 tags" );
} else {
int len[5] = { 30, 30, 30, 4, 30 };
QString label[5] = { tr( "Title" ), tr( "Artist" ), tr( "Album" ), tr( "Year" ), tr( "Comment" ) };
char *ptr = id3v1 + 3, *ptr2 = ptr + len[0];
- qDebug( "ID3 tags in file:" );
+ // qDebug( "ID3 tags in file:" );
info = "";
for ( int i = 0; i < 5; ptr += len[i], i++, ptr2 += len[i] ) {
char push = *ptr2;
*ptr2 = '\0';
char *ptr3 = ptr2;
while ( ptr3-1 >= ptr && isspace(ptr3[-1]) ) ptr3--;
char push2 = *ptr3; *ptr3 = '\0';
if ( strcmp( ptr, "" ) ) {
if( ((QString)ptr).find(" ") == -1) // don't add anything that has blanks
info += ( i != 0 ? ", " : "" ) + label[i] + ": " + ptr;
}
// qDebug( info.latin1() );
*ptr3 = push2;
*ptr2 = push;
}
if (id3v1[126] == 0 && id3v1[127] != 0)
info += tr( ", Track: " ) + id3v1[127];
}
if ( ::lseek(d->input.fd, 0, SEEK_SET) == -1 ) {
- qDebug( "error seeking back to beginning" );
+ // qDebug( "error seeking back to beginning" );
return;
}
}