Mercurial > mplayer.hg
annotate libmpdemux/demux_rawaudio.c @ 13395:07708ec98d87
New MD5 sum video output driver. For every frame, it calculates the MD5 sum
and writes a list of those sums to an, optionally specified, output file.
It does not rely on external programs to be installed. The MD5 sum code is
borrowed from the uCIFS library, written by Christopher R. Hertel in 2004
and released under the LGPL license.
Note: This driver is not yet activated and will not be compiled and linked
to libvo. A separate patch will take care of that. This is just for adding
the files to the repository.
author | ivo |
---|---|
date | Mon, 20 Sep 2004 01:01:08 +0000 |
parents | e6f6dac5d77b |
children | 6b86089c2edd |
rev | line source |
---|---|
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
1 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
2 #include "config.h" |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
3 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
4 #include <stdlib.h> |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
5 #include <stdio.h> |
8165 | 6 #include <unistd.h> |
8451 | 7 #include <string.h> |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
8 |
9707
53e738a54064
Fix a 100L bug wich killed mencoder timing and switch to the new
albeu
parents:
8524
diff
changeset
|
9 #include "../m_option.h" |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
10 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
11 #include "stream.h" |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
12 #include "demuxer.h" |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
13 #include "stheader.h" |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
14 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
15 |
9750
0d4904611455
Set deuxer_type instead of using our own global var.
albeu
parents:
9707
diff
changeset
|
16 extern int demuxer_type; |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
17 static int channels = 2; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
18 static int samplerate = 44100; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
19 static int samplesize = 2; |
12281
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
20 static int bitrate = 0; |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
21 static int format = 0x1; // Raw PCM |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
22 |
10594
57bdcdb061d7
Removed the historic cfgparser and switched full to the new config parser (altought some macros still remain for compatibility). As a side effect 90% of the warning messages are gone from the core. Things should be cleaner now and less confusing for newbies.
alex
parents:
9800
diff
changeset
|
23 m_option_t demux_rawaudio_opts[] = { |
9750
0d4904611455
Set deuxer_type instead of using our own global var.
albeu
parents:
9707
diff
changeset
|
24 { "on", &demuxer_type, CONF_TYPE_FLAG, 0,0, DEMUXER_TYPE_RAWAUDIO, NULL }, |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
25 { "channels", &channels, CONF_TYPE_INT,CONF_RANGE,1,8, NULL }, |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
26 { "rate", &samplerate, CONF_TYPE_INT,CONF_RANGE,1000,8*48000, NULL }, |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
27 { "samplesize", &samplesize, CONF_TYPE_INT,CONF_RANGE,1,8, NULL }, |
12281
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
28 { "bitrate", &bitrate, CONF_TYPE_INT,CONF_MIN,0,0, NULL }, |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
29 { "format", &format, CONF_TYPE_INT, CONF_MIN, 0 , 0, NULL }, |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
30 {NULL, NULL, 0, 0, 0, 0, NULL} |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
31 }; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
32 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
33 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
34 extern void resync_audio_stream(sh_audio_t *sh_audio); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
35 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
36 int demux_rawaudio_open(demuxer_t* demuxer) { |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
37 sh_audio_t* sh_audio; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
38 WAVEFORMATEX* w; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
39 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
40 sh_audio = new_sh_audio(demuxer,0); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
41 sh_audio->wf = w = (WAVEFORMATEX*)malloc(sizeof(WAVEFORMATEX)); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
42 w->wFormatTag = sh_audio->format = format; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
43 w->nChannels = sh_audio->channels = channels; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
44 w->nSamplesPerSec = sh_audio->samplerate = samplerate; |
12281
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
45 if (bitrate > 999) |
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
46 w->nAvgBytesPerSec = bitrate/8; |
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
47 else if (bitrate > 0) |
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
48 w->nAvgBytesPerSec = bitrate*125; |
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
49 else |
e6f6dac5d77b
needed for a/v sync with compressed audio (e.g. raw .mp2 or .ac3 file)
rfelker
parents:
10891
diff
changeset
|
50 w->nAvgBytesPerSec = samplerate*samplesize*channels; |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
51 w->nBlockAlign = channels*samplesize; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
52 sh_audio->samplesize = samplesize; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
53 w->wBitsPerSample = 8*samplesize; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
54 w->cbSize = 0; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
55 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
56 demuxer->movi_start = demuxer->stream->start_pos; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
57 demuxer->movi_end = demuxer->stream->end_pos; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
58 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
59 demuxer->audio->sh = sh_audio; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
60 sh_audio->ds = demuxer->audio; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
61 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
62 return 1; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
63 } |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
64 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
65 int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds) { |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
66 sh_audio_t* sh_audio = demuxer->audio->sh; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
67 int l = sh_audio->wf->nAvgBytesPerSec; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
68 off_t spos = stream_tell(demuxer->stream); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
69 demux_packet_t* dp; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
70 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
71 if(demuxer->stream->eof) |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
72 return 0; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
73 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
74 dp = new_demux_packet(l); |
9707
53e738a54064
Fix a 100L bug wich killed mencoder timing and switch to the new
albeu
parents:
8524
diff
changeset
|
75 dp->pts = (spos - demuxer->movi_start) / (float)(sh_audio->wf->nAvgBytesPerSec); |
53e738a54064
Fix a 100L bug wich killed mencoder timing and switch to the new
albeu
parents:
8524
diff
changeset
|
76 dp->pos = (spos - demuxer->movi_start); |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
77 |
10891
65ed62e138fa
Fixed 'reading after EOF'. demuxers didn't check, how many they've read!
lumag
parents:
10594
diff
changeset
|
78 l = stream_read(demuxer->stream,dp->buffer,l); |
65ed62e138fa
Fixed 'reading after EOF'. demuxers didn't check, how many they've read!
lumag
parents:
10594
diff
changeset
|
79 resize_demux_packet(dp, l); |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
80 ds_add_packet(ds,dp); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
81 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
82 return 1; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
83 } |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
84 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
85 void demux_rawaudio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){ |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
86 stream_t* s = demuxer->stream; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
87 sh_audio_t* sh_audio = demuxer->audio->sh; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
88 off_t base,pos; |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
89 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
90 base = (flags & 1) ? demuxer->movi_start : stream_tell(s); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
91 if(flags & 2) |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
92 pos = base + ((demuxer->movi_end - demuxer->movi_start)*rel_seek_secs); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
93 else |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
94 pos = base + (rel_seek_secs*sh_audio->i_bps); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
95 |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
96 pos -= (pos % (sh_audio->channels * sh_audio->samplesize) ); |
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
97 stream_seek(s,pos); |
9800 | 98 sh_audio->delay= (pos-ds_tell_pts(demuxer->audio)-sh_audio->a_in_buffer_len) / (float)(sh_audio->wf->nAvgBytesPerSec); |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
99 resync_audio_stream(sh_audio); |
8524 | 100 // printf("demux_rawaudio: streamtell=%d\n",(int)stream_tell(demuxer->stream)); |
6384
f0b933918a22
Support for playing audio cds using cdparanoia. Include a raw audio
albeu
parents:
diff
changeset
|
101 } |