gst_buffer_map(buffer, &mapinfo, GST_MAP_READ);
text = mapinfo.data;
text_size = mapinfo.size;
- duration = GST_BUFFER_DURATION(buffer);
if (player->set_mode.subtitle_off) {
LOGD("subtitle is OFF.");
}
msg.data = (void *)text;
+
+ duration = GST_BUFFER_DURATION(buffer);
+
+ if (!GST_CLOCK_TIME_IS_VALID(duration)) {
+ if (player->duration > GST_BUFFER_PTS(buffer))
+ duration = player->duration - GST_BUFFER_PTS(buffer);
+ else
+ duration = 0;
+ LOGI("subtitle duration is invalid, subtitle duration change "
+ "GST_CLOCK_TIME_NONE -> %" GST_TIME_FORMAT, GST_TIME_ARGS(duration));
+ }
msg.subtitle.duration = GST_TIME_AS_MSECONDS(duration);
LOGD("update subtitle : [%ld msec] %s", msg.subtitle.duration, (char *)msg.data);