From a9474b0b39b999ef17163bec9337a96a72ddb458 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Thu, 29 Oct 2009 22:13:04 +0000 Subject: Move teletext specific code from stream into libmpcodecs. Patch by Francesco Lavra, francescolavra interfree it git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29801 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mpcommon.c | 1 + 1 file changed, 1 insertion(+) (limited to 'mpcommon.c') diff --git a/mpcommon.c b/mpcommon.c index 162dbbf26e..6df406922f 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -12,6 +12,7 @@ #include "version.h" #include "vobsub.h" #include "stream/tv.h" +#include "libmpcodecs/dec_teletext.h" #include "libavutil/intreadwrite.h" #include "m_option.h" #include "mpcommon.h" -- cgit v1.2.3 From 9df11ee8bf234aebcea76ef8c919fb68229c7308 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Thu, 29 Oct 2009 22:39:00 +0000 Subject: Add MSGT_TELETEXT, rename TVI_CONTROL as VBI_CONTROL and fix some paths in comments. Based on a patch by Francesco Lavra, francescolavra interfree it git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29802 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mpcommon.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'mpcommon.c') diff --git a/mpcommon.c b/mpcommon.c index 6df406922f..442fba9560 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -211,19 +211,19 @@ void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset) if (demuxer->type != DEMUXER_TYPE_TV || !tvh) return; //Also forcing page update when such ioctl is not supported or call error occured - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_IS_CHANGED,&page_changed)!=TVI_CONTROL_TRUE) + if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_IS_CHANGED,&page_changed)!=VBI_CONTROL_TRUE) page_changed=1; if(!page_changed) return; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=TVI_CONTROL_TRUE) + if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=VBI_CONTROL_TRUE) vo_osd_teletext_page=NULL; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=TVI_CONTROL_TRUE) + if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=VBI_CONTROL_TRUE) vo_osd_teletext_half=0; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=TVI_CONTROL_TRUE) + if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=VBI_CONTROL_TRUE) vo_osd_teletext_mode=0; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=TVI_CONTROL_TRUE) + if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=VBI_CONTROL_TRUE) vo_osd_teletext_format=0; vo_osd_changed(OSDTYPE_TELETEXT); -- cgit v1.2.3 From 1280614c9f3dd85ba1fa2f19f0b4d40f011bb8ee Mon Sep 17 00:00:00 2001 From: reimar Date: Sun, 1 Nov 2009 09:48:34 +0000 Subject: Unbreak the demuxer-specific code in video.c with e.g. -audiofile by moving the code to manually interleave subtitles to mp_common.c. video.c should still be changed to not be demuxer-specific anymore, it is bad practice but fully fixing it is non-trivial. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29810 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mpcommon.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'mpcommon.c') diff --git a/mpcommon.c b/mpcommon.c index 442fba9560..ed0c11e725 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -145,6 +145,8 @@ void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvd } else if (dvdsub_id >= 0 && (type == 't' || type == 'm' || type == 'a')) { double curpts = refpts + sub_delay; double endpts; + if (d_dvdsub->non_interleaved) + ds_get_next_pts(d_dvdsub); while (d_dvdsub->first) { double subpts = ds_get_next_pts(d_dvdsub); if (subpts > curpts) @@ -195,6 +197,8 @@ void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvd sub_add_text(&subs, packet, len, endpts); set_osd_subtitle(&subs); } + if (d_dvdsub->non_interleaved) + ds_get_next_pts(d_dvdsub); } if (sub_clear_text(&subs, curpts)) set_osd_subtitle(&subs); -- cgit v1.2.3 From 423c415534f7393c07247b87ab4d95f6d0635474 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Sat, 7 Nov 2009 12:31:05 +0000 Subject: Separate teletext from tv support. Path by Francesco Lavra, francescolavra interfree it git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29848 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mpcommon.c | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'mpcommon.c') diff --git a/mpcommon.c b/mpcommon.c index ed0c11e725..575ddd0425 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -11,7 +11,6 @@ #include "spudec.h" #include "version.h" #include "vobsub.h" -#include "stream/tv.h" #include "libmpcodecs/dec_teletext.h" #include "libavutil/intreadwrite.h" #include "m_option.h" @@ -209,29 +208,29 @@ void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvd void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset) { #ifdef CONFIG_TV_TELETEXT - tvi_handle_t* tvh=demuxer->priv; int page_changed; - if (demuxer->type != DEMUXER_TYPE_TV || !tvh) return; + if (!demuxer->teletext) + return; //Also forcing page update when such ioctl is not supported or call error occured - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_IS_CHANGED,&page_changed)!=VBI_CONTROL_TRUE) + if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_IS_CHANGED,&page_changed)!=VBI_CONTROL_TRUE) page_changed=1; if(!page_changed) return; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=VBI_CONTROL_TRUE) + if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_VBIPAGE,&vo_osd_teletext_page)!=VBI_CONTROL_TRUE) vo_osd_teletext_page=NULL; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=VBI_CONTROL_TRUE) + if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_HALF_PAGE,&vo_osd_teletext_half)!=VBI_CONTROL_TRUE) vo_osd_teletext_half=0; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=VBI_CONTROL_TRUE) + if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_MODE,&vo_osd_teletext_mode)!=VBI_CONTROL_TRUE) vo_osd_teletext_mode=0; - if(tvh->functions->control(tvh->priv,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=VBI_CONTROL_TRUE) + if(teletext_control(demuxer->teletext,TV_VBI_CONTROL_GET_FORMAT,&vo_osd_teletext_format)!=VBI_CONTROL_TRUE) vo_osd_teletext_format=0; vo_osd_changed(OSDTYPE_TELETEXT); - tvh->functions->control(tvh->priv,TV_VBI_CONTROL_MARK_UNCHANGED,NULL); + teletext_control(demuxer->teletext,TV_VBI_CONTROL_MARK_UNCHANGED,NULL); #endif } -- cgit v1.2.3 From 2a5611473cb3696597240be15b0e1e662c1c79b8 Mon Sep 17 00:00:00 2001 From: cehoyos Date: Sat, 7 Nov 2009 16:40:42 +0000 Subject: Remove CONFIG_TV_TELETEXT. DVB teletext support is nearly finished, it will be possible to read teletext from file, it will not be depending on reception any more. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29851 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mpcommon.c | 2 -- 1 file changed, 2 deletions(-) (limited to 'mpcommon.c') diff --git a/mpcommon.c b/mpcommon.c index 575ddd0425..5e2f85a606 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -207,7 +207,6 @@ void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvd void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset) { -#ifdef CONFIG_TV_TELETEXT int page_changed; if (!demuxer->teletext) @@ -231,7 +230,6 @@ void update_teletext(sh_video_t *sh_video, demuxer_t *demuxer, int reset) vo_osd_changed(OSDTYPE_TELETEXT); teletext_control(demuxer->teletext,TV_VBI_CONTROL_MARK_UNCHANGED,NULL); -#endif } int select_audio(demuxer_t* demuxer, int audio_id, char* audio_lang) -- cgit v1.2.3 From 9a8a73e547dd662bce82cfe52fde37dd7409f1d2 Mon Sep 17 00:00:00 2001 From: reimar Date: Tue, 10 Nov 2009 11:31:47 +0000 Subject: Add support for DVB teletext. Patch by Francesco Lavra [francescolavra interfree it] with modifications by me. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@29875 b3059339-0415-0410-9bf9-f77b7e298cf2 --- mpcommon.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'mpcommon.c') diff --git a/mpcommon.c b/mpcommon.c index 5e2f85a606..ba5e20db89 100644 --- a/mpcommon.c +++ b/mpcommon.c @@ -141,9 +141,15 @@ void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvd if (spudec_changed(vo_spudec)) vo_osd_changed(OSDTYPE_SPU); - } else if (dvdsub_id >= 0 && (type == 't' || type == 'm' || type == 'a')) { + } else if (dvdsub_id >= 0 && (type == 't' || type == 'm' || type == 'a' || type == 'd')) { double curpts = refpts + sub_delay; double endpts; + if (type == 'd' && !d_dvdsub->demuxer->teletext) { + tt_stream_props tsp = {0}; + void *ptr = &tsp; + if (teletext_control(NULL, TV_VBI_CONTROL_START, &ptr) == VBI_CONTROL_TRUE) + d_dvdsub->demuxer->teletext = ptr; + } if (d_dvdsub->non_interleaved) ds_get_next_pts(d_dvdsub); while (d_dvdsub->first) { @@ -157,6 +163,22 @@ void update_subtitles(sh_video_t *sh_video, double refpts, demux_stream_t *d_dvd len = FFMIN(len - 2, AV_RB16(packet)); packet += 2; } + if (type == 'd') { + if (d_dvdsub->demuxer->teletext) { + uint8_t *p = packet; + p++; + len--; + while (len >= 46) { + int sublen = p[1]; + if (p[0] == 2 || p[0] == 3) + teletext_control(d_dvdsub->demuxer->teletext, + TV_VBI_CONTROL_DECODE_DVB, p + 2); + p += sublen + 2; + len -= sublen + 2; + } + } + continue; + } #ifdef CONFIG_ASS if (ass_enabled) { sh_sub_t* sh = d_dvdsub->sh; -- cgit v1.2.3