typedef struct R3DContext {
unsigned video_offsets_count;
- unsigned *video_offsets;
unsigned rdvo_offset;
int audio_channels;
R3DContext *r3d = s->priv_data;
char filename[258];
int tmp;
+ int ret;
int av_unused tmp2;
AVRational framerate;
r3d->audio_channels = avio_r8(s->pb); // audio channels
av_log(s, AV_LOG_TRACE, "audio channels %d\n", tmp);
- avio_read(s->pb, filename, 257);
+ ret = avio_read(s->pb, filename, 257);
+ if (ret < 257)
+ return ret < 0 ? ret : AVERROR_EOF;
filename[sizeof(filename)-1] = 0;
av_dict_set(&st->metadata, "filename", filename, 0);
int i;
r3d->video_offsets_count = (atom->size - 8) / 4;
- r3d->video_offsets = av_malloc(atom->size);
- if (!r3d->video_offsets)
- return AVERROR(ENOMEM);
for (i = 0; i < r3d->video_offsets_count; i++) {
- r3d->video_offsets[i] = avio_rb32(s->pb);
- if (!r3d->video_offsets[i]) {
+ unsigned video_offset = avio_rb32(s->pb);
+ if (!video_offset) {
r3d->video_offsets_count = i;
break;
}
- av_log(s, AV_LOG_TRACE, "video offset %d: %#x\n", i, r3d->video_offsets[i]);
+ av_log(s, AV_LOG_TRACE, "video offset %d: %#x\n", i, video_offset);
}
if (st->avg_frame_rate.num)
pkt->stream_index = 1;
pkt->dts = dts;
- if (st->codecpar->sample_rate)
+
+ if (st->codecpar->sample_rate && samples > 0)
pkt->duration = av_rescale(samples, st->time_base.den, st->codecpar->sample_rate);
av_log(s, AV_LOG_TRACE, "pkt dts %"PRId64" duration %"PRId64" samples %d sample rate %d\n",
pkt->dts, pkt->duration, samples, st->codecpar->sample_rate);
return err;
}
-static int r3d_probe(AVProbeData *p)
+static int r3d_probe(const AVProbeData *p)
{
if (AV_RL32(p->buf + 4) == MKTAG('R','E','D','1'))
return AVPROBE_SCORE_MAX;
return 0;
}
-static int r3d_close(AVFormatContext *s)
-{
- R3DContext *r3d = s->priv_data;
-
- av_freep(&r3d->video_offsets);
-
- return 0;
-}
-
-AVInputFormat ff_r3d_demuxer = {
+const AVInputFormat ff_r3d_demuxer = {
.name = "r3d",
.long_name = NULL_IF_CONFIG_SMALL("REDCODE R3D"),
.priv_data_size = sizeof(R3DContext),
.read_probe = r3d_probe,
.read_header = r3d_read_header,
.read_packet = r3d_read_packet,
- .read_close = r3d_close,
.read_seek = r3d_seek,
};