typedef struct SimbiosisIMXDemuxContext {
uint8_t pal[AVPALETTE_SIZE];
int pal_changed;
+ int64_t first_video_packet_pos;
} SimbiosisIMXDemuxContext;
static int simbiosis_imx_probe(const AVProbeData *p)
vst->codecpar->format = AV_PIX_FMT_PAL8;
vst->codecpar->codec_id = AV_CODEC_ID_SIMBIOSIS_IMX;
vst->start_time = 0;
+ vst->duration =
vst->nb_frames = avio_rl32(pb);
rate = avio_rl16(pb);
avio_skip(pb, 12);
break;
case 0xAA97:
idx = 0;
+ if (!imx->first_video_packet_pos)
+ imx->first_video_packet_pos = pos;
break;
case 0xAA98:
+ if (chunk_size > 256 * 3)
+ return AVERROR_INVALIDDATA;
for (int i = 0; i < chunk_size / 3; i++) {
unsigned r = avio_r8(pb) << 18;
unsigned g = avio_r8(pb) << 10;
return AVERROR(ENOMEM);
memcpy(pal, imx->pal, AVPALETTE_SIZE);
imx->pal_changed = 0;
+ if (pos <= imx->first_video_packet_pos)
+ pkt->flags |= AV_PKT_FLAG_KEY;
+ } else if (idx == 1) {
pkt->flags |= AV_PKT_FLAG_KEY;
}
return ret;
}
-AVInputFormat ff_simbiosis_imx_demuxer = {
+const AVInputFormat ff_simbiosis_imx_demuxer = {
.name = "simbiosis_imx",
.long_name = NULL_IF_CONFIG_SMALL("Simbiosis Interactive IMX"),
.priv_data_size = sizeof(SimbiosisIMXDemuxContext),