Mercurial > mplayer.hg
comparison libmpdemux/demux_ogg.c @ 16175:6b86089c2edd
Demuxer modularization
Demuxer selection by name with -demuxer command (bakward compatible)
author | rtognimp |
---|---|
date | Fri, 05 Aug 2005 19:57:47 +0000 |
parents | 79008c38fcd9 |
children | 6ff303d2876b |
comparison
equal
deleted
inserted
replaced
16174:b118c000ddd2 | 16175:6b86089c2edd |
---|---|
732 char *demux_ogg_sub_lang(demuxer_t *demuxer, int index) { | 732 char *demux_ogg_sub_lang(demuxer_t *demuxer, int index) { |
733 ogg_demuxer_t *ogg_d = (ogg_demuxer_t *)demuxer->priv; | 733 ogg_demuxer_t *ogg_d = (ogg_demuxer_t *)demuxer->priv; |
734 return (index < 0) ? NULL : (index >= ogg_d->n_text) ? NULL : ogg_d->text_langs[index]; | 734 return (index < 0) ? NULL : (index >= ogg_d->n_text) ? NULL : ogg_d->text_langs[index]; |
735 } | 735 } |
736 | 736 |
737 void demux_close_ogg(demuxer_t* demuxer); | 737 static void demux_close_ogg(demuxer_t* demuxer); |
738 | 738 |
739 static inline unsigned int store_ughvlc(unsigned char *s, unsigned int v) | 739 static inline unsigned int store_ughvlc(unsigned char *s, unsigned int v) |
740 { | 740 { |
741 unsigned int n = 0; | 741 unsigned int n = 0; |
742 | 742 |
817 free(buf[0]); | 817 free(buf[0]); |
818 } | 818 } |
819 | 819 |
820 | 820 |
821 /// Open an ogg physical stream | 821 /// Open an ogg physical stream |
822 // Not static because it's used also in demuxer_avi.c | |
822 int demux_ogg_open(demuxer_t* demuxer) { | 823 int demux_ogg_open(demuxer_t* demuxer) { |
823 ogg_demuxer_t* ogg_d; | 824 ogg_demuxer_t* ogg_d; |
824 stream_t *s; | 825 stream_t *s; |
825 char* buf; | 826 char* buf; |
826 int np,s_no, n_audio = 0, n_video = 0; | 827 int np,s_no, n_audio = 0, n_video = 0; |
1192 sh_a = demuxer->audio->sh; | 1193 sh_a = demuxer->audio->sh; |
1193 if(sh_a) | 1194 if(sh_a) |
1194 if(sh_a->format == FOURCC_VORBIS) | 1195 if(sh_a->format == FOURCC_VORBIS) |
1195 fixup_vorbis_wf(sh_a); | 1196 fixup_vorbis_wf(sh_a); |
1196 | 1197 |
1197 return 1; | 1198 return DEMUXER_TYPE_OGG; |
1198 | 1199 |
1199 err_out: | 1200 err_out: |
1200 return 0; | 1201 return 0; |
1201 } | 1202 } |
1202 | 1203 |
1203 | 1204 |
1204 int demux_ogg_fill_buffer(demuxer_t *d) { | 1205 static int demux_ogg_fill_buffer(demuxer_t *d, demux_stream_t *dsds) { |
1205 ogg_demuxer_t* ogg_d; | 1206 ogg_demuxer_t* ogg_d; |
1206 stream_t *s; | 1207 stream_t *s; |
1207 demux_stream_t *ds; | 1208 demux_stream_t *ds; |
1208 ogg_sync_state* sync; | 1209 ogg_sync_state* sync; |
1209 ogg_stream_state* os; | 1210 ogg_stream_state* os; |
1342 // Write the page | 1343 // Write the page |
1343 ogg_stream_pagein(&ogg_d->subs[0].stream,&ogg_d->page); | 1344 ogg_stream_pagein(&ogg_d->subs[0].stream,&ogg_d->page); |
1344 | 1345 |
1345 // Create the ds_stream and the ogg demuxer | 1346 // Create the ds_stream and the ogg demuxer |
1346 s = new_ds_stream(demuxer->audio); | 1347 s = new_ds_stream(demuxer->audio); |
1347 od = new_demuxer(s,DEMUXER_TYPE_OGG,0,-2,-2); | 1348 od = new_demuxer(s,DEMUXER_TYPE_OGG,0,-2,-2,NULL); |
1348 | 1349 |
1349 /// Add the header packets in the ogg demuxer audio stream | 1350 /// Add the header packets in the ogg demuxer audio stream |
1350 // Initial header | 1351 // Initial header |
1351 dp = new_demux_packet(hdrsizes[0]); | 1352 dp = new_demux_packet(hdrsizes[0]); |
1352 memcpy(dp->buffer,((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t),hdrsizes[0]); | 1353 memcpy(dp->buffer,((unsigned char*)sh_audio->wf)+22+sizeof(WAVEFORMATEX)+3*sizeof(uint32_t),hdrsizes[0]); |
1378 | 1379 |
1379 } | 1380 } |
1380 | 1381 |
1381 extern void resync_audio_stream(sh_audio_t *sh_audio); | 1382 extern void resync_audio_stream(sh_audio_t *sh_audio); |
1382 | 1383 |
1383 void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) { | 1384 static void demux_ogg_seek(demuxer_t *demuxer,float rel_seek_secs,int flags) { |
1384 ogg_demuxer_t* ogg_d = demuxer->priv; | 1385 ogg_demuxer_t* ogg_d = demuxer->priv; |
1385 ogg_sync_state* sync = &ogg_d->sync; | 1386 ogg_sync_state* sync = &ogg_d->sync; |
1386 ogg_page* page= &ogg_d->page; | 1387 ogg_page* page= &ogg_d->page; |
1387 ogg_stream_state* oss; | 1388 ogg_stream_state* oss; |
1388 ogg_stream_t* os; | 1389 ogg_stream_t* os; |
1555 | 1556 |
1556 mp_msg(MSGT_DEMUX,MSGL_ERR,"Can't find the good packet :(\n"); | 1557 mp_msg(MSGT_DEMUX,MSGL_ERR,"Can't find the good packet :(\n"); |
1557 | 1558 |
1558 } | 1559 } |
1559 | 1560 |
1560 void demux_close_ogg(demuxer_t* demuxer) { | 1561 static void demux_close_ogg(demuxer_t* demuxer) { |
1561 ogg_demuxer_t* ogg_d = demuxer->priv; | 1562 ogg_demuxer_t* ogg_d = demuxer->priv; |
1562 int i; | 1563 int i; |
1563 | 1564 |
1564 if(!ogg_d) | 1565 if(!ogg_d) |
1565 return; | 1566 return; |
1585 free(ogg_d->text_langs); | 1586 free(ogg_d->text_langs); |
1586 } | 1587 } |
1587 free(ogg_d); | 1588 free(ogg_d); |
1588 } | 1589 } |
1589 | 1590 |
1590 int demux_ogg_control(demuxer_t *demuxer,int cmd, void *arg){ | 1591 static int demux_ogg_control(demuxer_t *demuxer,int cmd, void *arg){ |
1591 ogg_demuxer_t* ogg_d = demuxer->priv; | 1592 ogg_demuxer_t* ogg_d = demuxer->priv; |
1592 ogg_stream_t* os; | 1593 ogg_stream_t* os; |
1593 float rate; | 1594 float rate; |
1594 | 1595 |
1595 if(demuxer->video->id >= 0) { | 1596 if(demuxer->video->id >= 0) { |
1615 default: | 1616 default: |
1616 return DEMUXER_CTRL_NOTIMPL; | 1617 return DEMUXER_CTRL_NOTIMPL; |
1617 } | 1618 } |
1618 } | 1619 } |
1619 | 1620 |
1621 | |
1622 | |
1623 demuxer_desc_t demuxer_desc_ogg = { | |
1624 "Ogg demuxer", | |
1625 "ogg", | |
1626 "Ogg", | |
1627 "?", | |
1628 "", | |
1629 DEMUXER_TYPE_OGG, | |
1630 1, // safe autodetect | |
1631 demux_ogg_open, | |
1632 demux_ogg_fill_buffer, | |
1633 NULL, | |
1634 demux_close_ogg, | |
1635 demux_ogg_seek, | |
1636 demux_ogg_control | |
1637 }; | |
1638 | |
1620 #endif | 1639 #endif |