summaryrefslogtreecommitdiffstats
path: root/libmpdemux/demux_audio.c
diff options
context:
space:
mode:
authorlumag <lumag@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-10-04 22:00:25 +0000
committerlumag <lumag@b3059339-0415-0410-9bf9-f77b7e298cf2>2003-10-04 22:00:25 +0000
commit1e880aa659cc8d82357c175d6142cfd0606eea22 (patch)
treee85a5a66e08f6ad71f8638470e19539c26a6bb54 /libmpdemux/demux_audio.c
parent31235dd9a42beb26105918190af7cffc2f20ff07 (diff)
downloadmpv-1e880aa659cc8d82357c175d6142cfd0606eea22.tar.bz2
mpv-1e880aa659cc8d82357c175d6142cfd0606eea22.tar.xz
FLAC decoding support via imported libmpflac.
TODO: fix FLAC-in-ogg decoding. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@11005 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpdemux/demux_audio.c')
-rw-r--r--libmpdemux/demux_audio.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/libmpdemux/demux_audio.c b/libmpdemux/demux_audio.c
index e8fdde5e80..390df643f6 100644
--- a/libmpdemux/demux_audio.c
+++ b/libmpdemux/demux_audio.c
@@ -17,6 +17,7 @@
#define MP3 1
#define WAV 2
+#define fLaC 3
#define HDR_SIZE 4
@@ -79,6 +80,10 @@ int demux_audio_open(demuxer_t* demuxer) {
} else if((n = mp_get_mp3_header(hdr,&mp3_chans,&mp3_freq)) > 0) {
frmt = MP3;
break;
+ } else if( hdr[0] == 'f' && hdr[1] == 'L' && hdr[2] == 'a' && hdr[3] == 'C' ) {
+ frmt = fLaC;
+ stream_skip(s,-4);
+ break;
}
// Add here some other audio format detection
if(step < HDR_SIZE)
@@ -202,6 +207,11 @@ int demux_audio_open(demuxer_t* demuxer) {
demuxer->movi_end = s->end_pos;
// printf("wav: %X .. %X\n",(int)demuxer->movi_start,(int)demuxer->movi_end);
} break;
+ case fLaC:
+ sh_audio->format = mmioFOURCC('f', 'L', 'a', 'C');
+ demuxer->movi_start = stream_tell(s);
+ demuxer->movi_end = s->end_pos;
+ break;
}
priv = (da_priv_t*)malloc(sizeof(da_priv_t));
@@ -272,6 +282,16 @@ int demux_audio_fill_buffer(demux_stream_t *ds) {
ds_add_packet(ds,dp);
return 1;
}
+ case fLaC: {
+ int l = 65535;
+ demux_packet_t* dp = new_demux_packet(l);
+ l = stream_read(s,dp->buffer,l);
+ resize_demux_packet(dp, l);
+ priv->last_pts = priv->last_pts < 0 ? 0 : priv->last_pts + l/(float)sh_audio->i_bps;
+ ds->pts = priv->last_pts - (ds_tell_pts(demux->audio)-sh_audio->a_in_buffer_len)/(float)sh_audio->i_bps;
+ ds_add_packet(ds,dp);
+ return 1;
+ }
default:
printf("Audio demuxer : unknown format %d\n",priv->frmt);
}