Mercurial > mplayer.hg
view libmpdemux/demux_rawaudio.c @ 7256:ec6dd0a29d93
Add the code that chooses a good X11 truecolor visual to the vo_x11 config()
function. This is useful for framebuffers on Sun hardware, where we have
multiple truecolor visuals of different depths available, and the root
window typically runs at depth 8, yet there are 24 bit true color visuals
available as well.
author | jkeil |
---|---|
date | Tue, 03 Sep 2002 18:10:42 +0000 |
parents | f0b933918a22 |
children | 3dc0b71630ff |
line wrap: on
line source
#include "config.h" #include <stdlib.h> #include <stdio.h> #include "../cfgparser.h" #include "stream.h" #include "demuxer.h" #include "stheader.h" int use_rawaudio = 0; static int channels = 2; static int samplerate = 44100; static int samplesize = 2; static int format = 0x1; // Raw PCM static config_t demux_rawaudio_opts[] = { { "on", &use_rawaudio, CONF_TYPE_FLAG, 0,0, 1, NULL }, { "channels", &channels, CONF_TYPE_INT,CONF_RANGE,1,8, NULL }, { "rate", &samplerate, CONF_TYPE_INT,CONF_RANGE,1000,8*48000, NULL }, { "samplesize", &samplesize, CONF_TYPE_INT,CONF_RANGE,1,8, NULL }, { "format", &format, CONF_TYPE_INT, CONF_MIN, 0 , 0, NULL }, {NULL, NULL, 0, 0, 0, 0, NULL} }; static config_t demux_rawaudio_conf[] = { { "rawaudio", &demux_rawaudio_opts, CONF_TYPE_SUBCONFIG, 0, 0, 0, NULL}, { NULL,NULL, 0, 0, 0, 0, NULL} }; void demux_rwaudio_register_options(m_config_t* cfg) { m_config_register_options(cfg,demux_rawaudio_conf); } extern void resync_audio_stream(sh_audio_t *sh_audio); int demux_rawaudio_open(demuxer_t* demuxer) { sh_audio_t* sh_audio; WAVEFORMATEX* w; sh_audio = new_sh_audio(demuxer,0); sh_audio->wf = w = (WAVEFORMATEX*)malloc(sizeof(WAVEFORMATEX)); w->wFormatTag = sh_audio->format = format; w->nChannels = sh_audio->channels = channels; w->nSamplesPerSec = sh_audio->samplerate = samplerate; w->nAvgBytesPerSec = samplerate*samplesize*channels; w->nBlockAlign = channels*samplesize; sh_audio->samplesize = samplesize; w->wBitsPerSample = 8*samplesize; w->cbSize = 0; demuxer->movi_start = demuxer->stream->start_pos; demuxer->movi_end = demuxer->stream->end_pos; demuxer->audio->sh = sh_audio; sh_audio->ds = demuxer->audio; return 1; } int demux_rawaudio_fill_buffer(demuxer_t* demuxer, demux_stream_t *ds) { sh_audio_t* sh_audio = demuxer->audio->sh; int l = sh_audio->wf->nAvgBytesPerSec; off_t spos = stream_tell(demuxer->stream); demux_packet_t* dp; if(demuxer->stream->eof) return 0; dp = new_demux_packet(l); ds->pts = spos / (float)(sh_audio->wf->nAvgBytesPerSec); ds->pos = spos; stream_read(demuxer->stream,dp->buffer,l); ds_add_packet(ds,dp); return 1; } void demux_rawaudio_seek(demuxer_t *demuxer,float rel_seek_secs,int flags){ stream_t* s = demuxer->stream; sh_audio_t* sh_audio = demuxer->audio->sh; off_t base,pos; base = (flags & 1) ? demuxer->movi_start : stream_tell(s); if(flags & 2) pos = base + ((demuxer->movi_end - demuxer->movi_start)*rel_seek_secs); else pos = base + (rel_seek_secs*sh_audio->i_bps); pos -= (pos % (sh_audio->channels * sh_audio->samplesize) ); stream_seek(s,pos); resync_audio_stream(sh_audio); }