diff options
Diffstat (limited to 'libmpdemux')
-rw-r--r-- | libmpdemux/demux_ogg.c | 10 | ||||
-rw-r--r-- | libmpdemux/open.c | 19 | ||||
-rw-r--r-- | libmpdemux/stream.h | 2 |
3 files changed, 30 insertions, 1 deletions
diff --git a/libmpdemux/demux_ogg.c b/libmpdemux/demux_ogg.c index 5b3a656519..530a920fe8 100644 --- a/libmpdemux/demux_ogg.c +++ b/libmpdemux/demux_ogg.c @@ -655,12 +655,18 @@ void demux_ogg_scan_stream(demuxer_t* demuxer) { extern void print_wave_header(WAVEFORMATEX *h); extern void print_video_header(BITMAPINFOHEADER *h); +static int n_text = 0; +static int *text_ids = NULL; + +int demux_ogg_num_subs() { return n_text; } +int demux_ogg_sub_id(int index) { return (index < 0) ? index : text_ids[index]; } + /// Open an ogg physical stream int demux_ogg_open(demuxer_t* demuxer) { ogg_demuxer_t* ogg_d; stream_t *s; char* buf; - int np,s_no, n_audio = 0, n_video = 0, n_text = 0; + int np,s_no, n_audio = 0, n_video = 0; int audio_id = -1, video_id = -1, text_id = -1; ogg_sync_state* sync; ogg_page* page; @@ -902,6 +908,8 @@ int demux_ogg_open(demuxer_t* demuxer) { if (demuxer->sub->id == n_text) text_id = ogg_d->num_sub; n_text++; + text_ids = (int *)realloc(text_ids, sizeof(int) * n_text); + text_ids[n_text - 1] = ogg_d->num_sub; demux_ogg_init_sub(); //// Unknown header type } else diff --git a/libmpdemux/open.c b/libmpdemux/open.c index 064f5616d3..300acb87a8 100644 --- a/libmpdemux/open.c +++ b/libmpdemux/open.c @@ -636,6 +636,25 @@ if(lang){ return d->nr_of_channels ? d->audio_streams[0].id : -1; } +int dvd_number_of_subs(stream_t *stream) +{ + dvd_priv_t *d; + if (!stream) return -1; + d = stream->priv; + if (!d) return -1; + return d->nr_of_subtitles; +} + +int dvd_lang_from_sid(stream_t *stream, int id) +{ + dvd_priv_t *d; + if (!stream) return 0; + d = stream->priv; + if (!d) return 0; + if (id >= d->nr_of_subtitles) return 0; + return d->subtitles[id].language; +} + int dvd_sid_from_lang(stream_t *stream, unsigned char* lang){ dvd_priv_t *d=stream->priv; int code,i; diff --git a/libmpdemux/stream.h b/libmpdemux/stream.h index df0df18afb..a9f9241d76 100644 --- a/libmpdemux/stream.h +++ b/libmpdemux/stream.h @@ -321,6 +321,8 @@ typedef struct { stream_language_t subtitles[32]; } dvd_priv_t; +int dvd_number_of_subs(stream_t *stream); +int dvd_lang_from_sid(stream_t *stream, int id); int dvd_aid_from_lang(stream_t *stream, unsigned char* lang); int dvd_sid_from_lang(stream_t *stream, unsigned char* lang); int dvd_chapter_from_cell(dvd_priv_t *dvd,int title,int cell); |