[MPlayer-dev-eng] [PATCH] some embedded subtitle cleanups
Reimar Döffinger
Reimar.Doeffinger at stud.uni-karlsruhe.de
Sun Nov 12 15:23:02 CET 2006
Hello,
this patch is a first step to cleanup subtitle stream handling by
handling it more similar to other streams.
Many more changes will be needed in the future, but we have to start
somewhere.
Okay to apply?
Greetings,
Reimar Döffinger
-------------- next part --------------
Index: libmpdemux/demux_mkv.c
===================================================================
--- libmpdemux/demux_mkv.c (revision 20861)
+++ libmpdemux/demux_mkv.c (working copy)
@@ -1766,6 +1766,8 @@
demux_mkv_open_video (demuxer_t *demuxer, mkv_track_t *track, int vid);
static int
demux_mkv_open_audio (demuxer_t *demuxer, mkv_track_t *track, int aid);
+static int
+demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track, int sid);
static void
display_create_tracks (demuxer_t *demuxer)
@@ -1796,7 +1798,7 @@
break;
case MATROSKA_TRACK_SUBTITLE:
type = "subtitles";
- mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SUBTITLE_ID=%d\n", sid);
+ demux_mkv_open_sub(demuxer, mkv_d->tracks[i], sid);
if (mkv_d->tracks[i]->name)
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_NAME=%s\n", sid, mkv_d->tracks[i]->name);
mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SID_%d_LANG=%s\n", sid, mkv_d->tracks[i]->language);
@@ -2408,18 +2410,18 @@
#endif
static int
-demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track)
+demux_mkv_open_sub (demuxer_t *demuxer, mkv_track_t *track, int sid)
{
if (track->subtitle_type != MATROSKA_SUBTYPE_UNKNOWN)
{
+ sh_sub_t *sh = new_sh_sub_sid(demuxer, track->tnum, sid);
if ((track->subtitle_type == MATROSKA_SUBTYPE_VOBSUB) ||
(track->subtitle_type == MATROSKA_SUBTYPE_SSA))
{
if (track->private_data != NULL)
{
- demuxer->sub->sh = malloc(sizeof(sh_sub_t));
- if (demuxer->sub->sh != NULL)
- memcpy(demuxer->sub->sh, &track->sh_sub, sizeof(sh_sub_t));
+ if (sh)
+ memcpy(sh, &track->sh_sub, sizeof(sh_sub_t));
}
}
}
@@ -2680,7 +2682,7 @@
track = demux_mkv_find_track_by_language (mkv_d, dvdsub_lang,
MATROSKA_TRACK_SUBTITLE);
- if (track && !demux_mkv_open_sub (demuxer, track))
+ if (track)
{
mp_msg (MSGT_DEMUX, MSGL_INFO,
MSGTR_MPDEMUX_MKV_WillDisplaySubtitleTrack, track->tnum);
Index: libmpdemux/demuxer.c
===================================================================
--- libmpdemux/demuxer.c (revision 20861)
+++ libmpdemux/demuxer.c (working copy)
@@ -201,6 +201,22 @@
return d;
}
+sh_sub_t *new_sh_sub_sid(demuxer_t *demuxer, int id, int sid) {
+ if (id > MAX_S_STREAMS - 1 || id < 0) {
+ mp_msg(MSGT_DEMUXER,MSGL_WARN,"Requested sub stream id overflow (%d > %d)\n",
+ id, MAX_S_STREAMS);
+ return NULL;
+ }
+ if (demuxer->s_streams[id])
+ mp_msg(MSGT_DEMUXER, MSGL_WARN, "Sub stream %i redefined\n", id);
+ else {
+ sh_sub_t *sh = calloc(1, sizeof(sh_sub_t));
+ demuxer->s_streams[id] = sh;
+ sh->sid = sid;
+ mp_msg(MSGT_IDENTIFY, MSGL_INFO, "ID_SUBTITLE_ID=%d\n", sid);
+ }
+}
+
sh_audio_t* new_sh_audio_aid(demuxer_t *demuxer,int id,int aid){
if(id > MAX_A_STREAMS-1 || id < 0)
{
Index: libmpdemux/demuxer.h
===================================================================
--- libmpdemux/demuxer.h (revision 20861)
+++ libmpdemux/demuxer.h (working copy)
@@ -138,10 +138,12 @@
#ifdef USE_ASS
ass_track_t* ass_track; // for SSA/ASS streams (type == 'a')
#endif
+ int sid;
} sh_sub_t;
#define MAX_A_STREAMS 256
#define MAX_V_STREAMS 256
+#define MAX_S_STREAMS 32
struct demuxer_st;
@@ -199,7 +201,7 @@
// stream headers:
void* a_streams[MAX_A_STREAMS]; // audio streams (sh_audio_t)
void* v_streams[MAX_V_STREAMS]; // video sterams (sh_video_t)
- char s_streams[32]; // dvd subtitles (flag)
+ char s_streams[MAX_S_STREAMS]; // dvd subtitles (flag)
demux_chapter_t* chapters;
int num_chapters;
More information about the MPlayer-dev-eng
mailing list