Markus Rechberger / libmpeg3
 
StartSeite | MarkusRechberger/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern

Veränderung (zum vorhergehenden Autor) (Änderung, Korrektur, Normalansicht)

Verändert: 1c1,106
Beschreibe hier die neue Seite.
Kleines codeschnipsel wie ich mp3s abspielen konnte (das programm hängt in der endlosschleife da's mir von anfang an nur drauf ankam wie ich richtig dekodierte musik nach /dev/dsp schreiben konnte)
* problem: man bekommt 2 streams bei einem stereomp3, wenn man die streams nicht multiplext (was in dem fall sehr einfach ist) werden die samples zu schnell abgespielt und man bekommt chipmunksound
* XFree Support ist drinnen da libmpeg3 auch mpegs abspielen kann, was ich später mittels xvideo kurz einmal antesten möchte -- xvideo ist in der version meines laptops drinnen

[[Code]
#include <stdio.h>
#include <libmpeg3.h>
#include <sys/soundcard.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>


int main(int argc, char **argv){
mpeg3_t *file;
double time;
short *buffer2;
short *buffer3;
short *buffer4;
unsigned char output_rows[340][240];
int streams,i,audio_fd;
int depth;
int r;
int retval=0;
FILE *dsp;
XSetWindowAttributes? attr;
GC vo_gc;
Display *mDisplay;
Window vo_window;
Window mRootWin;
int screen;
screen=DefaultScreen?(mDisplay);
XSetWindowAttributes? window_attributes;
unsigned long window_mask;

mDisplay=XOpenDisplay?((char*)0);
window_attributes.border_pixel = BlackPixel? (mDisplay, screen);
window_attributes.background_pixel = BlackPixel? (mDisplay, screen);
window_attributes.override_redirect = 0;
window_mask = CWBackPixel? | CWBorderPixel?;

depth = DefaultDepth? (mDisplay,DefaultScreen?(mDisplay));
vo_window=XCreateWindow?(mDisplay,DefaultRootWindow?(mDisplay), 0, 0, 320,240, 0, depth,
InputOutput?, CopyFromParent?,window_mask ,&window_attributes);
vo_gc=XCreateGC?(mDisplay,vo_window,0,0);
XMapWindow?(mDisplay,vo_window);
XFlush(mDisplay);
// vo_gc=XCreateGC?(mDisplay, vo_window, 0L, &xgcv);
audio_fd=open("/dev/dsp",{O WRONLY}?);
// memset(buffer2,0x0,10240*sizeof(float));
printf("\n
\n");
file=mpeg3_open("test.mp3"); ///home/revenger/testing/kream204.mpg"); //test.mp3");
r=16;
ioctl(audio_fd,{SNDCTL DSP SETFMT}?, &r);
r=16;
ioctl(audio_fd,{SNDCTL DSP SETFMT}?, &r);
printf("File has audio: %s\n",mpeg3_has_audio(file)?"Yes":"No");
printf("File has video: %s\n",mpeg3_has_video(file)?"Yes":"No");
streams=1; //1; //mpeg3_total_astreams(file);
printf("Streams: %d\n",streams);
streams=1;
ioctl(audio_fd,{SNDCTL DSP STEREO}?,&streams);
printf("Sample rate: %d\n",mpeg3_sample_rate(file,streams-1));
r=mpeg3_sample_rate(file,streams-1); //22050; //44100; //44100; //mpeg3_audio_samples(file,streams-1);
buffer2=(short*)malloc(44100*2);
buffer3=(short*)malloc(44100*2);
buffer4=(short*)malloc(88200*2*2);
retval=ioctl(audio_fd,{SNDCTL DSP SPEED}?,&r);
if(retval==-1){
printf("couldn't set speed!\n");
}
printf("Length: %d\n",mpeg3_audio_samples(file,streams-1));
while(1){
// mpeg3_read_frame(file,output_rows,0,0,320,240,320,240,0,1);
mpeg3_read_audio(file,NULL,buffer2,0,44100,streams-1);
mpeg3_reread_audio(file,NULL,buffer3,1,44100,streams-1);
printf("%ld",mpeg3_tell_byte(file));
for(i=0;i<88200*2;i++){
if(i%2==0){
buffer4[i]=buffer2[i/2];
} else {
buffer4[i]=buffer3[i/2];
}
}
write(audio_fd,buffer4,88200*2);
printf("file takes: %f seconds\n",mpeg3_get_time(file));
}
fclose(dsp);
mpeg3_close(file);
return(0);
}

]

viele CFLAGS wurden bereits von libmpeg3 vorgegeben
Makefile
[[Code]
GCC=gcc
CFLAGS=-O3 -march=i686 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2 -g
CLIBS=-lmpeg3 -L/usr/X11R6?/lib/ -lX11

all:
$(GCC) main.c -o main $(CFLAGS) $(CLIBS)
]

Kleines codeschnipsel wie ich mp3s abspielen konnte (das programm hängt in der endlosschleife da's mir von anfang an nur drauf ankam wie ich richtig dekodierte musik nach /dev/dsp schreiben konnte)
 * problem: man bekommt 2 streams bei einem stereomp3, wenn man die streams nicht multiplext (was in dem fall sehr einfach ist) werden die samples zu schnell abgespielt und man bekommt chipmunksound
 * XFree Support ist drinnen da libmpeg3 auch mpegs abspielen kann, was ich später mittels xvideo kurz einmal antesten möchte -- xvideo ist in der version meines laptops drinnen 

#include <stdio.h>
#include <libmpeg3.h>
#include <sys/soundcard.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <fcntl.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>


int main(int argc, char **argv){
        mpeg3_t *file;
        double time;
        short *buffer2;
        short *buffer3;
        short *buffer4;
        unsigned char output_rows[340][240];
        int streams,i,audio_fd;
        int depth;
        int r;
        int retval=0;
        FILE *dsp;
        XSetWindowAttributes attr;
        GC vo_gc;
        Display *mDisplay;
        Window vo_window;
        Window mRootWin;
        int screen;
        screen=DefaultScreen(mDisplay);
        XSetWindowAttributes window_attributes;
        unsigned long window_mask;

        mDisplay=XOpenDisplay((char*)0);
        window_attributes.border_pixel = BlackPixel (mDisplay, screen);
        window_attributes.background_pixel = BlackPixel (mDisplay, screen);
        window_attributes.override_redirect = 0;
        window_mask = CWBackPixel | CWBorderPixel;

        depth = DefaultDepth (mDisplay,DefaultScreen(mDisplay));
        vo_window=XCreateWindow(mDisplay,DefaultRootWindow(mDisplay), 0, 0, 320,240, 0, depth,
                        InputOutput, CopyFromParent,window_mask ,&window_attributes);
        vo_gc=XCreateGC(mDisplay,vo_window,0,0);
        XMapWindow(mDisplay,vo_window);
        XFlush(mDisplay);
//      vo_gc=XCreateGC(mDisplay, vo_window, 0L, &xgcv);
        audio_fd=open("/dev/dsp",O_WRONLY);
//        memset(buffer2,0x0,10240*sizeof(float));
        printf("\n------------------\n");
        file=mpeg3_open("test.mp3"); ///home/revenger/testing/kream204.mpg"); //test.mp3");
        r=16;
        ioctl(audio_fd,SNDCTL_DSP_SETFMT, &r);
        r=16;
        ioctl(audio_fd,SNDCTL_DSP_SETFMT, &r);
        printf("File has audio:  %s\n",mpeg3_has_audio(file)?"Yes":"No");
        printf("File has video:  %s\n",mpeg3_has_video(file)?"Yes":"No");
        streams=1; //1; //mpeg3_total_astreams(file);
        printf("Streams: %d\n",streams);
        streams=1;
        ioctl(audio_fd,SNDCTL_DSP_STEREO,&streams);
        printf("Sample rate: %d\n",mpeg3_sample_rate(file,streams-1));
        r=mpeg3_sample_rate(file,streams-1); //22050; //44100; //44100; //mpeg3_audio_samples(file,streams-1);
        buffer2=(short*)malloc(44100*2);
        buffer3=(short*)malloc(44100*2);
        buffer4=(short*)malloc(88200*2*2);
        retval=ioctl(audio_fd,SNDCTL_DSP_SPEED,&r);
        if(retval==-1){
                printf("couldn't set speed!\n");
        }
        printf("Length: %d\n",mpeg3_audio_samples(file,streams-1));
        while(1){
//              mpeg3_read_frame(file,output_rows,0,0,320,240,320,240,0,1);
                mpeg3_read_audio(file,NULL,buffer2,0,44100,streams-1);
                mpeg3_reread_audio(file,NULL,buffer3,1,44100,streams-1);
                printf("%ld",mpeg3_tell_byte(file));
                for(i=0;i<88200*2;i++){
                        if(i%2==0){
                                buffer4[i]=buffer2[i/2];
                        } else {
                                buffer4[i]=buffer3[i/2];
                        }
                }
                write(audio_fd,buffer4,88200*2);
                printf("file takes: %f seconds\n",mpeg3_get_time(file));
        }
        fclose(dsp);
        mpeg3_close(file);
        return(0);
}

viele CFLAGS wurden bereits von libmpeg3 vorgegeben Makefile
GCC=gcc
CFLAGS=-O3 -march=i686 -fmessage-length=0 -funroll-all-loops -fomit-frame-pointer -falign-loops=2 -falign-jumps=2 -falign-functions=2 -g
CLIBS=-lmpeg3 -L/usr/X11R6/lib/ -lX11

all:
        $(GCC) main.c -o main $(CFLAGS) $(CLIBS)


StartSeite | MarkusRechberger/ | Neues | TestSeite | ForumSeite | Teilnehmer | Kategorien | Index | Hilfe | Einstellungen | Ändern
Text dieser Seite ändern (zuletzt geändert: 11. Oktober 2004 1:49 (diff))
Suchbegriff: gesucht wird
im Titel
im Text