comparison libmpdemux/demux_mkv.cpp @ 11276:ec45f2106ec6

* fix my 100l from before * SSA is also ASS * avoid multiple segfaults when there are more then SUB_MAX_TEXT-1 lines at the same time
author attila
date Sun, 26 Oct 2003 21:09:37 +0000
parents c367751bd7cb
children ef36cd5b757e
comparison
equal deleted inserted replaced
11275:3ef7b4402c6c 11276:ec45f2106ec6
489 ((unsigned int)(s1 - buffer) <= data.Size())) 489 ((unsigned int)(s1 - buffer) <= data.Size()))
490 s1++; 490 s1++;
491 491
492 line = 0; 492 line = 0;
493 mkv_d->subs.lines++; 493 mkv_d->subs.lines++;
494 if (mkv_d->subs.lines> SUB_MAX_TEXT - 1 )
495 {
496 mp_msg(MSGT_DEMUX, MSGL_WARN,"[mkv] Warning: too many sublines to render, skipping\n");
497 mkv_d->subs.lines--;
498 return;
499 }
494 s2 = mkv_d->subs.text[mkv_d->subs.lines - 1]; 500 s2 = mkv_d->subs.text[mkv_d->subs.lines - 1];
495 state = 0; 501 state = 0;
496 502
497 if (mkv_d->subtitle_type == MKV_SUBTYPE_SSA) { 503 if (mkv_d->subtitle_type == MKV_SUBTYPE_SSA) {
498 /* Matroska's SSA format does not have timecodes embedded into 504 /* Matroska's SSA format does not have timecodes embedded into
2355 mkv_d->subtitle_type = MKV_SUBTYPE_VOBSUB; 2361 mkv_d->subtitle_type = MKV_SUBTYPE_VOBSUB;
2356 demuxer->sub->sh = (mkv_sh_sub_t *)safememdup(&track->sh_sub, 2362 demuxer->sub->sh = (mkv_sh_sub_t *)safememdup(&track->sh_sub,
2357 sizeof(mkv_sh_sub_t)); 2363 sizeof(mkv_sh_sub_t));
2358 demuxer->sub->id = track->xid; 2364 demuxer->sub->id = track->xid;
2359 2365
2360 } else if (!(strcmp(track->codec_id, MKV_S_TEXTASCII) && 2366 } else if (strcmp(track->codec_id, MKV_S_TEXTASCII) &&
2361 strcmp(track->codec_id, MKV_S_TEXTUTF8) && 2367 strcmp(track->codec_id, MKV_S_TEXTUTF8) &&
2362 strcmp(track->codec_id, MKV_S_TEXTSSA) && 2368 strcmp(track->codec_id, MKV_S_TEXTSSA) &&
2363 strcmp(track->codec_id, "S_SSA"))) 2369 strcmp(track->codec_id, "S_SSA") &&
2370 strcmp(track->codec_id, "S_TEXT/ASS"))
2364 mp_msg(MSGT_DEMUX, MSGL_ERR, "[mkv] Subtitle type '%s' is not " 2371 mp_msg(MSGT_DEMUX, MSGL_ERR, "[mkv] Subtitle type '%s' is not "
2365 "supported. Track will not be displayed.\n", track->codec_id); 2372 "supported. Track will not be displayed.\n", track->codec_id);
2366 else { 2373 else {
2367 mp_msg(MSGT_DEMUX, MSGL_INFO, "[mkv] Will display subtitle track %u\n", 2374 mp_msg(MSGT_DEMUX, MSGL_INFO, "[mkv] Will display subtitle track %u\n",
2368 track->tnum); 2375 track->tnum);
2372 mkv_d->subs.text[i] = (char *)safemalloc(256); 2379 mkv_d->subs.text[i] = (char *)safemalloc(256);
2373 2380
2374 if (!strcmp(track->codec_id, MKV_S_TEXTUTF8)) 2381 if (!strcmp(track->codec_id, MKV_S_TEXTUTF8))
2375 sub_utf8 = 1; // Force UTF-8 conversion. 2382 sub_utf8 = 1; // Force UTF-8 conversion.
2376 if (!strcmp(track->codec_id, MKV_S_TEXTSSA) || 2383 if (!strcmp(track->codec_id, MKV_S_TEXTSSA) ||
2377 !strcmp(track->codec_id, "S_SSA")) { 2384 !strcmp(track->codec_id, "S_SSA") ||
2385 !strcmp(track->codec_id, "S_TEXT/ASS")) {
2378 mkv_d->subtitle_type = MKV_SUBTYPE_SSA; 2386 mkv_d->subtitle_type = MKV_SUBTYPE_SSA;
2379 sub_utf8 = 1; 2387 sub_utf8 = 1;
2380 } else 2388 } else
2381 mkv_d->subtitle_type = MKV_SUBTYPE_TEXT; 2389 mkv_d->subtitle_type = MKV_SUBTYPE_TEXT;
2382 } else 2390 } else