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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
388263fa5a11 FreeBSD fix
nexus
parents: 7867
diff changeset
6 #include <unistd.h>
8451
fb88ccbc5ccc compiler warning fixes
arpi
parents: 8165
diff changeset
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
2865ea4eca4b *** empty log message ***
albeu
parents: 9750
diff changeset
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
fe542f0201ea CDDA seeking fixed
arpi
parents: 8451
diff changeset
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 }