summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmad/libmad.pro4
-rw-r--r--core/multimedia/opieplayer/libmad/libmadplugin.cpp68
2 files changed, 23 insertions, 49 deletions
diff --git a/core/multimedia/opieplayer/libmad/libmad.pro b/core/multimedia/opieplayer/libmad/libmad.pro
index 679242b..8278bf0 100644
--- a/core/multimedia/opieplayer/libmad/libmad.pro
+++ b/core/multimedia/opieplayer/libmad/libmad.pro
@@ -1,25 +1,25 @@
TEMPLATE = lib
CONFIG += qt warn_on release
HEADERS = libmad_version.h fixed.h bit.h timer.h stream.h frame.h synth.h decoder.h \
layer12.h layer3.h huffman.h libmad_global.h mad.h libmadplugin.h libmadpluginimpl.h
SOURCES = version.c fixed.c bit.c timer.c stream.c frame.c synth.c decoder.c \
- layer12.c layer3.c huffman.c libmadplugin.cpp libmadpluginimpl.cpp
+ network.c layer12.c layer3.c huffman.c libmadplugin.cpp libmadpluginimpl.cpp
TARGET = madplugin
-DESTDIR = ../../../plugins/codecs
+DESTDIR = $(OPIEDIR)/plugins/codecs
INCLUDEPATH += $(OPIEDIR)/include ..
DEPENDPATH += ../$(OPIEDIR)/include ..
LIBS += -lqpe -lm
VERSION = 1.0.0
TRANSLATIONS = ../../i18n/pt_BR/libmadplugin.ts
TRANSLATIONS += ../../i18n/de/libmadplugin.ts
TRANSLATIONS += ../../i18n/en/libmadplugin.ts
TRANSLATIONS += ../../i18n/hu/libmadplugin.ts
TRANSLATIONS += ../../i18n/sl/libmadplugin.ts
TRANSLATIONS += ../../i18n/ja/libmadplugin.ts
TRANSLATIONS += ../../i18n/pl/libmadplugin.ts
TRANSLATIONS += ../../i18n/ko/libmadplugin.ts
TRANSLATIONS += ../../i18n/no/libmadplugin.ts
TRANSLATIONS += ../../i18n/zh_CN/libmadplugin.ts
TRANSLATIONS += ../../i18n/zh_TW/libmadplugin.ts
TRANSLATIONS += ../../i18n/fr/libmadplugin.ts
diff --git a/core/multimedia/opieplayer/libmad/libmadplugin.cpp b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
index 7978805..7bb6541 100644
--- a/core/multimedia/opieplayer/libmad/libmadplugin.cpp
+++ b/core/multimedia/opieplayer/libmad/libmadplugin.cpp
@@ -1,87 +1,83 @@
/**********************************************************************
** 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 <qapplication.h>
-#include <qpe/config.h>
-#include <qmessagebox.h>
-#include <qstring.h>
-
#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;
@@ -192,282 +188,260 @@ int LibMadPlugin::tcp_open(char *address, int port) {
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 ) {
- qDebug("Open http");
char *host;
int port;
char *request;
int tcp_sock;
char http_request[PATH_MAX];
char filename[PATH_MAX];
- // char c;
+ char c;
char *arg =strdup(path.latin1());
- QString errorMsg;
-
/* Check for URL syntax */
-// if (strncmp(arg, "http://", strlen("http://"))) {
-// qDebug("Url syntax error");
-// return (0);
-// }
+ if (strncmp(arg, "http://", strlen("http://")))
+ return (0);
- qDebug("Parse URL");
+ /* Parse URL */
port = 80;
host = arg + strlen("http://");
-
- // we need to think of something better than that
- //if ((request = strchr(host, '/')) == NULL) {
- // qDebug("Url syntax 2error %s", host);
- // return (0);
- // }
-
+ if ((request = strchr(host, '/')) == NULL)
+ return (0);
*request++ = 0;
if (strchr(host, ':') != NULL) /* port is specified */
{
port = atoi(strchr(host, ':') + 1);
*strchr(host, ':') = 0;
}
- qDebug("Open a TCP socket");
- if (!(tcp_sock = tcp_open(host, port))) {
- perror("http_open");
- errorMsg="http_open "+(QString)strerror(errno);
- QMessageBox::message("OPiePlayer",errorMsg);
+ /* Open a TCP socket */
+ if (!(tcp_sock = tcp_open(host, port)))
+ {
+ perror("http_open");
return (0);
}
snprintf(filename, sizeof(filename) - strlen(host) - 75, "%s", request);
/* Send HTTP GET request */
/* Please don't use a Agent know by shoutcast (Lynx, Mozilla) seems to be reconized and print
* a html page and not the stream */
snprintf(http_request, sizeof(http_request), "GET /%s HTTP/1.0\r\n"
/* "User-Agent: Mozilla/2.0 (Win95; I)\r\n" */
"Pragma: no-cache\r\n" "Host: %s\r\n" "Accept: */*\r\n" "\r\n", filename, host);
- qDebug("send");
+
send(tcp_sock, http_request, strlen(http_request), 0);
- qDebug("Parse server reply");
+ /* Parse server reply */
#if 0
- qDebug("do 0");
do
read(tcp_sock, &c, sizeof(char));
while (c != ' ');
read(tcp_sock, http_request, 4 * sizeof(char));
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
do
{
int len;
len = http_read_line(tcp_sock, http_request, sizeof(http_request));
if (len == -1)
{
fprintf(stderr, "http_open: %s\n", strerror(errno));
return 0;
}
if (strncmp(http_request, "Location:", 9) == 0)
{
- qDebug("redirect");
+ /* redirect */
std::close(tcp_sock);
http_request[strlen(http_request) - 1] = '\0';
return http_open(&http_request[10]);
}
if (strncmp(http_request, "ICY ", 4) == 0)
{
- qDebug(" This is icecast streaming");
+ /* This is icecast streaming */
if (strncmp(http_request + 4, "200 ", 4))
{
fprintf(stderr, "http_open: %s\n", http_request);
return 0;
}
}
else if (strncmp(http_request, "icy-", 4) == 0)
{
/* we can have: icy-noticeX, icy-name, icy-genre, icy-url, icy-pub, icy-metaint, icy-br */
/* Don't print these - mpg123 doesn't */
/* fprintf(stderr,"%s\n",http_request); */
}
}
while (strcmp(http_request, "\n") != 0);
return (tcp_sock);
}
bool LibMadPlugin::open( const QString& path ) {
debugMsg( "LibMadPlugin::open" );
- Config cfg("OpiePlayer");
+ Config cfg("MediaPlayer");
cfg.setGroup("Options");
bufferSize = cfg.readNumEntry("MPeg_BufferSize",MPEG_BUFFER_SIZE);
qDebug("buffer size is %d", bufferSize);
d->bad_last_frame = 0;
d->flush = TRUE;
info = QString( "" );
- qDebug( "Opening %s", path.latin1() );
+ //qDebug( "Opening %s", path.latin1() );
+
- bool isStream=FALSE;
if (path.left( 4 ) == "http" ) {
d->input.fd = http_open(path);
- if(d->input.fd == 0) {
- qDebug("http_open error");
- }
- isStream=TRUE;
- qDebug("Opened ok");
} else {
d->input.path = path.latin1();
d->input.fd = ::open( d->input.path, O_RDONLY );
}
if (d->input.fd == -1) {
qDebug("error opening %s", d->input.path );
return FALSE;
}
- if(!isStream) {
- qDebug("Print ID#tags");
- printID3Tags();
- }
+
+ printID3Tags();
#if defined(HAVE_MMAP)
struct stat stat;
if (fstat(d->input.fd, &stat) == -1) {
qDebug("error calling fstat"); return FALSE;
}
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;
}
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");
return FALSE;
}
d->input.length = 0;
}
d->input.eof = 0;
-qDebug("about to mad_stream");
mad_stream_init(&d->stream);
-qDebug("mad_frame");
mad_frame_init(&d->frame);
-qDebug("mad_synth");
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");
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);
result = FALSE;
}
d->input.fd = 0;
return result;
}
bool LibMadPlugin::isOpen() {
debugMsg( "LibMadPlugin::isOpen" );
return ( d->input.fd != 0 );
}