summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.cpp b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
index 0fcc230..7bb6541 100644
--- a/core/multimedia/opieplayer/libmad/libmadplugin.cpp
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
@@ -1,248 +1,248 @@
/**********************************************************************
** Copyright (C) 2001 Trolltech AS. All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <time.h>
#include <locale.h>
#include <math.h>
#include <assert.h>
#include <qapplication.h>
#include <qpe/config.h>
// for network handling
#include <netinet/in.h>
#include <netdb.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
//#define HAVE_MMAP
#if defined(HAVE_MMAP)
# include <sys/mman.h>
#endif
#include "libmadplugin.h"
extern "C" {
#include "mad.h"
}
#define MPEG_BUFFER_SIZE 65536
//#define MPEG_BUFFER_SIZE 32768 //16384 // 8192
//#define debugMsg(a) qDebug(a)
#define debugMsg(a)
class Input {
public:
char const *path;
int fd;
#if defined(HAVE_MMAP)
void *fdm;
#endif
unsigned char *data;
unsigned long length;
int eof;
};
class Output {
public:
mad_fixed_t attenuate;
struct filter *filters;
unsigned int channels_in;
unsigned int channels_out;
unsigned int speed_in;
unsigned int speed_out;
const char *path;
};
# if defined(HAVE_MMAP)
static void *map_file(int fd, unsigned long *length)
{
void *fdm;
*length += MAD_BUFFER_GUARD;
fdm = mmap(0, *length, PROT_READ, MAP_SHARED, fd, 0);
if (fdm == MAP_FAILED)
return 0;
# if defined(HAVE_MADVISE)
madvise(fdm, *length, MADV_SEQUENTIAL);
# endif
return fdm;
}
static int unmap_file(void *fdm, unsigned long length)
{
if (munmap(fdm, length) == -1)
return -1;
return 0;
}
# endif
static inline QString tr( const char *str ) {
// Apparently this is okay from a plugin as it runs in the process space of the owner of the plugin
- return qApp->translate( "MediaPlayer", str, "libmad strings for mp3 file info" );
+ return qApp->translate( "OpiePlayer", str, "libmad strings for mp3 file info" );
}
class LibMadPluginData {
public:
Input input;
Output output;
int bad_last_frame;
struct mad_stream stream;
struct mad_frame frame;
struct mad_synth synth;
bool flush;
};
LibMadPlugin::LibMadPlugin() {
d = new LibMadPluginData;
d->input.fd = 0;
#if defined(HAVE_MMAP)
d->input.fdm = 0;
#endif
d->input.data = 0;
d->flush = TRUE;
info = tr( "No Song Open" );
}
LibMadPlugin::~LibMadPlugin() {
close();
delete d;
}
bool LibMadPlugin::isFileSupported( const QString& path ) {
debugMsg( "LibMadPlugin::isFileSupported" );
// Mpeg file extensions
// "mp2","mp3","m1v","m2v","m2s","mpg","vob","mpeg","ac3"
// Other media extensions
// "wav","mid","mod","s3m","ogg","avi","mov","sid"
char *ext = strrchr( path.latin1(), '.' );
// Test file extension
if ( ext ) {
if ( strncasecmp(ext, ".mp2", 4) == 0 )
return TRUE;
if ( strncasecmp(ext, ".mp3", 4) == 0 )
return TRUE;
}
// UGLY - just for fast testing
if ( path.left(4) == "http") {
return TRUE;
}
return FALSE;
}
int LibMadPlugin::tcp_open(char *address, int port) {
struct sockaddr_in stAddr;
struct hostent *host;
int sock;
struct linger l;
memset(&stAddr, 0, sizeof(stAddr));
stAddr.sin_family = AF_INET;
stAddr.sin_port = htons(port);
if ((host = gethostbyname(address)) == NULL)
return (0);
stAddr.sin_addr = *((struct in_addr *)host->h_addr_list[0]);
if ((sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
return (0);
l.l_onoff = 1;
l.l_linger = 5;
if (setsockopt(sock, SOL_SOCKET, SO_LINGER, (char *)&l, sizeof(l)) < 0)
return (0);
if (connect(sock, (struct sockaddr *)&stAddr, sizeof(stAddr)) < 0)
return (0);
return (sock);
}
/**
* Read a http line header.
* This function read character by character.
* @param tcp_sock the socket use to read the stream
* @param buf a buffer to receive the data
* @param size size of the buffer
* @return the size of the stream read or -1 if an error occured
*/
int LibMadPlugin::http_read_line(int tcp_sock, char *buf, int size) {
int offset = 0;
do
{
if (std::read(tcp_sock, buf + offset, 1) < 0)
return -1;
if (buf[offset] != '\r') /* Strip \r from answer */
offset++;
}
while (offset < size - 1 && buf[offset - 1] != '\n');
buf[offset] = 0;
return offset;
}
int LibMadPlugin::http_open(const QString& path ) {
char *host;
int port;
char *request;
int tcp_sock;
char http_request[PATH_MAX];
char filename[PATH_MAX];
char c;
char *arg =strdup(path.latin1());
/* Check for URL syntax */
if (strncmp(arg, "http://", strlen("http://")))
return (0);