|
|
|
@ -60,42 +60,41 @@ static int srt_write_packet(AVFormatContext *avf, AVPacket *pkt) |
|
|
|
|
{ |
|
|
|
|
SRTContext *srt = avf->priv_data; |
|
|
|
|
|
|
|
|
|
// TODO: reindent
|
|
|
|
|
int64_t s = pkt->pts, e, d = pkt->duration; |
|
|
|
|
int size, x1 = -1, y1 = -1, x2 = -1, y2 = -1; |
|
|
|
|
const uint8_t *p; |
|
|
|
|
int64_t s = pkt->pts, e, d = pkt->duration; |
|
|
|
|
int size, x1 = -1, y1 = -1, x2 = -1, y2 = -1; |
|
|
|
|
const uint8_t *p; |
|
|
|
|
|
|
|
|
|
p = av_packet_get_side_data(pkt, AV_PKT_DATA_SUBTITLE_POSITION, &size); |
|
|
|
|
if (p && size == 16) { |
|
|
|
|
x1 = AV_RL32(p ); |
|
|
|
|
y1 = AV_RL32(p + 4); |
|
|
|
|
x2 = AV_RL32(p + 8); |
|
|
|
|
y2 = AV_RL32(p + 12); |
|
|
|
|
} |
|
|
|
|
p = av_packet_get_side_data(pkt, AV_PKT_DATA_SUBTITLE_POSITION, &size); |
|
|
|
|
if (p && size == 16) { |
|
|
|
|
x1 = AV_RL32(p ); |
|
|
|
|
y1 = AV_RL32(p + 4); |
|
|
|
|
x2 = AV_RL32(p + 8); |
|
|
|
|
y2 = AV_RL32(p + 12); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if FF_API_CONVERGENCE_DURATION |
|
|
|
|
FF_DISABLE_DEPRECATION_WARNINGS |
|
|
|
|
if (d <= 0) |
|
|
|
|
/* For backward compatibility, fallback to convergence_duration. */ |
|
|
|
|
d = pkt->convergence_duration; |
|
|
|
|
if (d <= 0) |
|
|
|
|
/* For backward compatibility, fallback to convergence_duration. */ |
|
|
|
|
d = pkt->convergence_duration; |
|
|
|
|
FF_ENABLE_DEPRECATION_WARNINGS |
|
|
|
|
#endif |
|
|
|
|
if (s == AV_NOPTS_VALUE || d < 0) { |
|
|
|
|
av_log(avf, AV_LOG_WARNING, |
|
|
|
|
"Insufficient timestamps in event number %d.\n", srt->index); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
e = s + d; |
|
|
|
|
avio_printf(avf->pb, "%d\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d", |
|
|
|
|
srt->index, |
|
|
|
|
(int)(s / 3600000), (int)(s / 60000) % 60, |
|
|
|
|
(int)(s / 1000) % 60, (int)(s % 1000), |
|
|
|
|
(int)(e / 3600000), (int)(e / 60000) % 60, |
|
|
|
|
(int)(e / 1000) % 60, (int)(e % 1000)); |
|
|
|
|
if (p) |
|
|
|
|
avio_printf(avf->pb, " X1:%03d X2:%03d Y1:%03d Y2:%03d", |
|
|
|
|
x1, x2, y1, y2); |
|
|
|
|
avio_printf(avf->pb, "\n"); |
|
|
|
|
if (s == AV_NOPTS_VALUE || d < 0) { |
|
|
|
|
av_log(avf, AV_LOG_WARNING, |
|
|
|
|
"Insufficient timestamps in event number %d.\n", srt->index); |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
e = s + d; |
|
|
|
|
avio_printf(avf->pb, "%d\n%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d", |
|
|
|
|
srt->index, |
|
|
|
|
(int)(s / 3600000), (int)(s / 60000) % 60, |
|
|
|
|
(int)(s / 1000) % 60, (int)(s % 1000), |
|
|
|
|
(int)(e / 3600000), (int)(e / 60000) % 60, |
|
|
|
|
(int)(e / 1000) % 60, (int)(e % 1000)); |
|
|
|
|
if (p) |
|
|
|
|
avio_printf(avf->pb, " X1:%03d X2:%03d Y1:%03d Y2:%03d", |
|
|
|
|
x1, x2, y1, y2); |
|
|
|
|
avio_printf(avf->pb, "\n"); |
|
|
|
|
|
|
|
|
|
avio_write(avf->pb, pkt->data, pkt->size); |
|
|
|
|
avio_write(avf->pb, "\n\n", 2); |
|
|
|
|