#include "libavutil/pixdesc.h"
#include "metadata.h"
#include "id3v2.h"
-#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/internal.h"
#include "libavutil/mathematics.h"
if ((ret = av_opt_set_dict(s, &tmp)) < 0)
goto fail;
-#if FF_API_LAVF_BITEXACT
-FF_DISABLE_DEPRECATION_WARNINGS
- if (s->nb_streams && s->streams[0]->codec->flags & AV_CODEC_FLAG_BITEXACT)
- s->flags |= AVFMT_FLAG_BITEXACT;
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
-
// some sanity checks
if (s->nb_streams == 0 && !(of->flags & AVFMT_NOSTREAMS)) {
av_log(s, AV_LOG_ERROR, "no streams\n");
st = s->streams[i];
par = st->codecpar;
-#if FF_API_LAVF_CODEC_TB
-FF_DISABLE_DEPRECATION_WARNINGS
- if (!st->time_base.num && st->codec->time_base.num) {
- av_log(s, AV_LOG_WARNING, "Using AVStream.codec.time_base as a "
- "timebase hint to the muxer is deprecated. Set "
- "AVStream.time_base instead.\n");
- avpriv_set_pts_info(st, 64, st->codec->time_base.num, st->codec->time_base.den);
- }
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
-
#if FF_API_LAVF_AVCTX
FF_DISABLE_DEPRECATION_WARNINGS
if (st->codecpar->codec_type == AVMEDIA_TYPE_UNKNOWN &&
char tagbuf[32];
av_get_codec_tag_string(tagbuf, sizeof(tagbuf), par->codec_tag);
av_log(s, AV_LOG_ERROR,
- "Tag %s/0x%08x incompatible with output codec id '%d'\n",
+ "Tag %s/0x%08"PRIx32" incompatible with output codec id '%d'\n",
tagbuf, par->codec_tag, par->codec_id);
ret = AVERROR_INVALIDDATA;
goto fail;
if (ret = init_muxer(s, options))
return ret;
+ if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
+ avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_HEADER);
if (s->oformat->write_header) {
ret = s->oformat->write_header(s);
if (ret < 0)
return ret;
}
+ if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
+ avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_UNKNOWN);
if (s->avoid_negative_ts == AVFMT_AVOID_NEG_TS_AUTO) {
if (s->oformat->flags & (AVFMT_TS_NEGATIVE | AVFMT_NOTIMESTAMPS)) {
return 0;
}
-#if FF_API_COMPUTE_PKT_FIELDS2
+#if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
FF_DISABLE_DEPRECATION_WARNINGS
//FIXME merge with compute_pkt_fields
static int compute_pkt_fields2(AVFormatContext *s, AVStream *st, AVPacket *pkt)
static int write_packet(AVFormatContext *s, AVPacket *pkt)
{
int ret;
+ // If the timestamp offsetting below is adjusted, adjust
+ // ff_interleaved_peek similarly.
if (s->avoid_negative_ts > 0) {
AVRational time_base = s->streams[pkt->stream_index]->time_base;
int64_t offset = 0;
if (ret < 0)
return ret;
-#if !FF_API_COMPUTE_PKT_FIELDS2
+#if !FF_API_COMPUTE_PKT_FIELDS2 || !FF_API_LAVF_AVCTX
/* sanitize the timestamps */
if (!(s->oformat->flags & AVFMT_NOTIMESTAMPS)) {
AVStream *st = s->streams[pkt->stream_index];
return 1;
}
-#if FF_API_COMPUTE_PKT_FIELDS2
+#if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
ret = compute_pkt_fields2(s, s->streams[pkt->stream_index], pkt);
if (ret < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
}
}
+int ff_interleaved_peek(AVFormatContext *s, int stream,
+ AVPacket *pkt, int add_offset)
+{
+ AVPacketList *pktl = s->internal->packet_buffer;
+ while (pktl) {
+ if (pktl->pkt.stream_index == stream) {
+ *pkt = pktl->pkt;
+ if (add_offset && s->internal->offset != AV_NOPTS_VALUE) {
+ int64_t offset = av_rescale_q(s->internal->offset,
+ s->internal->offset_timebase,
+ s->streams[stream]->time_base);
+ if (pkt->dts != AV_NOPTS_VALUE)
+ pkt->dts += offset;
+ if (pkt->pts != AV_NOPTS_VALUE)
+ pkt->pts += offset;
+ }
+ return 0;
+ }
+ pktl = pktl->next;
+ }
+ return AVERROR(ENOENT);
+}
+
/**
* Interleave an AVPacket correctly so it can be muxed.
* @param out the interleaved packet will be output here
goto fail;
if (pkt) {
+#if FF_API_COMPUTE_PKT_FIELDS2 && FF_API_LAVF_AVCTX
AVStream *st = s->streams[pkt->stream_index];
av_log(s, AV_LOG_TRACE, "av_interleaved_write_frame size:%d dts:%" PRId64 " pts:%" PRId64 "\n",
pkt->size, pkt->dts, pkt->pts);
-#if FF_API_COMPUTE_PKT_FIELDS2
if ((ret = compute_pkt_fields2(s, st, pkt)) < 0 && !(s->oformat->flags & AVFMT_NOTIMESTAMPS))
goto fail;
#endif
goto fail;
}
+ if (!(s->oformat->flags & AVFMT_NOFILE) && s->pb)
+ avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER);
if (s->oformat->write_trailer)
ret = s->oformat->write_trailer(s);