}
}
- av_free_packet (&_packet);
+ av_packet_unref (&_packet);
if (_first_video && got_all_audio && _subtitle_streams.empty ()) {
/* All done */
if (avcodec_decode_subtitle2 (context, &sub, &frame_finished, &_packet) >= 0 && frame_finished) {
string id = subtitle_id (sub);
FFmpegSubtitlePeriod const period = subtitle_period (sub);
- bool const image = subtitle_is_image (sub);
+ bool const starts_image = subtitle_starts_image (sub);
LastSubtitleMap::iterator last = _last_subtitle_start.find (stream);
if (last != _last_subtitle_start.end() && last->second) {
/* We have seen the start of a subtitle but not yet the end. Whatever this is
finishes the previous subtitle, so add it */
- if (image) {
+ if (last->second->image) {
stream->add_image_subtitle (last->second->id, ContentTimePeriod (last->second->time, period.from));
} else {
stream->add_text_subtitle (last->second->id, ContentTimePeriod (last->second->time, period.from));
_last_subtitle_start[stream] = optional<SubtitleStart> ();
} else {
/* This is just another subtitle, so we start again */
- _last_subtitle_start[stream] = SubtitleStart (id, image, period.from);
+ _last_subtitle_start[stream] = SubtitleStart (id, starts_image, period.from);
}
} else if (sub.num_rects == 1) {
if (period.to) {
- if (image) {
+ if (starts_image) {
stream->add_image_subtitle (id, ContentTimePeriod (period.from, period.to.get ()));
} else {
stream->add_text_subtitle (id, ContentTimePeriod (period.from, period.to.get ()));
}
} else {
- _last_subtitle_start[stream] = SubtitleStart (id, image, period.from);
+ _last_subtitle_start[stream] = SubtitleStart (id, starts_image, period.from);
}
}
for (unsigned int i = 0; i < sub.num_rects; ++i) {
if (sub.rects[i]->type == SUBTITLE_BITMAP) {
+#ifdef DCPOMATIC_HAVE_AVSUBTITLERECT_PICT
uint32_t* palette = (uint32_t *) sub.rects[i]->pict.data[1];
for (int j = 0; j < sub.rects[i]->nb_colors; ++j) {
RGBA rgba (
stream->set_colour (rgba, rgba);
}
+#else
+ uint32_t* palette = (uint32_t *) sub.rects[i]->data[1];
+ for (int j = 0; j < sub.rects[i]->nb_colors; ++j) {
+ RGBA rgba (
+ (palette[j] & 0x00ff0000) >> 16,
+ (palette[j] & 0x0000ff00) >> 8,
+ (palette[j] & 0x000000ff) >> 0,
+ (palette[j] & 0xff000000) >> 24
+ );
+
+ stream->set_colour (rgba, rgba);
+ }
+#endif
}
}
case AV_PIX_FMT_YUV444P10LE:
case AV_PIX_FMT_YUV422P9BE:
case AV_PIX_FMT_YUV422P9LE:
- case AV_PIX_FMT_YUVA422P_LIBAV:
- case AV_PIX_FMT_YUVA444P_LIBAV:
case AV_PIX_FMT_YUVA420P9BE:
case AV_PIX_FMT_YUVA420P9LE:
case AV_PIX_FMT_YUVA422P9BE: