comparison libmpdemux/demux_ogg.c @ 11004:d48eccbbb984

FLAC decoding support via imported libmpflac. TODO: fix FLAC-in-ogg decoding.
author lumag
date Sat, 04 Oct 2003 22:00:25 +0000
parents 6e35326c742f
children db9ced943496
comparison
equal deleted inserted replaced
11003:6111db8a76b5 11004:d48eccbbb984
110 // Logical stream state 110 // Logical stream state
111 ogg_stream_state stream; 111 ogg_stream_state stream;
112 int hdr_packets; 112 int hdr_packets;
113 int vorbis; 113 int vorbis;
114 int theora; 114 int theora;
115 int flac;
115 } ogg_stream_t; 116 } ogg_stream_t;
116 117
117 typedef struct ogg_demuxer { 118 typedef struct ogg_demuxer {
118 /// Physical stream state 119 /// Physical stream state
119 ogg_sync_state sync; 120 ogg_sync_state sync;
360 os->lastpos++; 361 os->lastpos++;
361 *pts = (double)os->lastpos / (double)os->samplerate; 362 *pts = (double)os->lastpos / (double)os->samplerate;
362 } 363 }
363 } 364 }
364 #endif /* HAVE_OGGTHEORA */ 365 #endif /* HAVE_OGGTHEORA */
366 # ifdef HAVE_FLAC
367 } else if (os->flac) {
368 /* we pass complete packets to flac, mustn't strip the header! */
369 data = pack->packet;
370 #endif /* HAVE_FLAC */
365 } else { 371 } else {
366 // Find data start 372 // Find data start
367 int16_t hdrlen = (*pack->packet & PACKET_LEN_BITS01)>>6; 373 int16_t hdrlen = (*pack->packet & PACKET_LEN_BITS01)>>6;
368 hdrlen |= (*pack->packet & PACKET_LEN_BITS2) <<1; 374 hdrlen |= (*pack->packet & PACKET_LEN_BITS2) <<1;
369 data = pack->packet + 1 + hdrlen; 375 data = pack->packet + 1 + hdrlen;
677 sh_v->fps, 683 sh_v->fps,
678 inf.aspect_numerator, inf.aspect_denominator); 684 inf.aspect_numerator, inf.aspect_denominator);
679 if(verbose>0) print_video_header(sh_v->bih); 685 if(verbose>0) print_video_header(sh_v->bih);
680 } 686 }
681 # endif /* HAVE_OGGTHEORA */ 687 # endif /* HAVE_OGGTHEORA */
688 # ifdef HAVE_FLAC
689 } else if (pack.bytes >= 4 && !strncmp (&pack.packet[0], "fLaC", 4)) {
690 sh_a = new_sh_audio(demuxer,ogg_d->num_sub);
691 sh_a->format = mmioFOURCC('f', 'L', 'a', 'C');
692 n_audio++;
693 ogg_d->subs[ogg_d->num_sub].flac = 1;
694 sh_a->wf = NULL;
695 mp_msg(MSGT_DEMUX,MSGL_V,"OGG : stream %d is FLAC\n",ogg_d->num_sub);
696 # endif /* HAVE_FLAC */
697
682 /// Check for old header 698 /// Check for old header
683 } else if(pack.bytes >= 142 && ! strncmp(&pack.packet[1],"Direct Show Samples embedded in Ogg",35) ) { 699 } else if(pack.bytes >= 142 && ! strncmp(&pack.packet[1],"Direct Show Samples embedded in Ogg",35) ) {
684 700
685 // Old video header 701 // Old video header
686 if(get_uint32 (pack.packet+96) == 0x05589f80 && pack.bytes >= 184) { 702 if(get_uint32 (pack.packet+96) == 0x05589f80 && pack.bytes >= 184) {