aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorVignesh Venkatasubramanian <vigneshv-at-google.com@ffmpeg.org>2022-05-02 14:36:28 -0700
committerGyan Doshi <ffmpeg@gyani.pro>2022-05-13 12:45:17 +0530
commit98ec4261fd75b47a18cedf9f5340c4e94ad9b274 (patch)
tree3b9b46b37777a1109b390a26e30f52aff2b91d34 /libavformat
parentab05e9a7f277b3eb47b23d2b0a1a90d972b404bd (diff)
downloadffmpeg-98ec4261fd75b47a18cedf9f5340c4e94ad9b274.tar.gz
avformat/av1: Add a parameter to av1c to omit seq header
Add a parameter to omit seq header when generating the av1C atom. For now, this does not change any behavior. This will be used by a follow-up patch to add AVIF support. Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/av1.c7
-rw-r--r--libavformat/av1.h4
-rw-r--r--libavformat/matroskaenc.c4
-rw-r--r--libavformat/movenc.c2
4 files changed, 11 insertions, 6 deletions
diff --git a/libavformat/av1.c b/libavformat/av1.c
index 79065d0c9f..b6eaf50627 100644
--- a/libavformat/av1.c
+++ b/libavformat/av1.c
@@ -395,7 +395,8 @@ int ff_av1_parse_seq_header(AV1SequenceParameters *seq, const uint8_t *buf, int
return is_av1c ? 0 : AVERROR_INVALIDDATA;
}
-int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size)
+int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size,
+ int write_seq_header)
{
AVIOContext *meta_pb;
AV1SequenceParameters seq_params;
@@ -485,7 +486,9 @@ int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size)
flush_put_bits(&pbc);
avio_write(pb, header, sizeof(header));
- avio_write(pb, seq, seq_size);
+ if (write_seq_header) {
+ avio_write(pb, seq, seq_size);
+ }
meta_size = avio_get_dyn_buf(meta_pb, &meta);
if (meta_size)
diff --git a/libavformat/av1.h b/libavformat/av1.h
index f57dabe986..a393fbb78f 100644
--- a/libavformat/av1.h
+++ b/libavformat/av1.h
@@ -96,9 +96,11 @@ int ff_av1_parse_seq_header(AV1SequenceParameters *seq, const uint8_t *buf, int
* @param pb pointer to the AVIOContext where the av1C box shall be written
* @param buf input data buffer
* @param size size in bytes of the input data buffer
+ * @param write_seq_header If 1, Sequence Header OBU will be written inside the
+ * av1C box. Otherwise, Sequence Header OBU will be omitted.
*
* @return >= 0 in case of success, a negative AVERROR code in case of failure
*/
-int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size);
+int ff_isom_write_av1c(AVIOContext *pb, const uint8_t *buf, int size, int write_seq_header);
#endif /* AVFORMAT_AV1_H */
diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index c30584949a..482b5812e5 100644
--- a/libavformat/matroskaenc.c
+++ b/libavformat/matroskaenc.c
@@ -1089,7 +1089,7 @@ static int mkv_write_native_codecprivate(AVFormatContext *s, AVIOContext *pb,
case AV_CODEC_ID_AV1:
if (par->extradata_size)
return ff_isom_write_av1c(dyn_cp, par->extradata,
- par->extradata_size);
+ par->extradata_size, 1);
else
put_ebml_void(pb, 4 + 3);
break;
@@ -2665,7 +2665,7 @@ static int mkv_check_new_extra_data(AVFormatContext *s, const AVPacket *pkt)
ret = avio_open_dyn_buf(&dyn_cp);
if (ret < 0)
return ret;
- ff_isom_write_av1c(dyn_cp, side_data, side_data_size);
+ ff_isom_write_av1c(dyn_cp, side_data, side_data_size, 1);
codecpriv_size = avio_get_dyn_buf(dyn_cp, &codecpriv);
if ((ret = dyn_cp->error) < 0 ||
!codecpriv_size && (ret = AVERROR_INVALIDDATA)) {
diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index c720fd742d..8cb352a0f9 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1337,7 +1337,7 @@ static int mov_write_av1c_tag(AVIOContext *pb, MOVTrack *track)
avio_wb32(pb, 0);
ffio_wfourcc(pb, "av1C");
- ff_isom_write_av1c(pb, track->vos_data, track->vos_len);
+ ff_isom_write_av1c(pb, track->vos_data, track->vos_len, 1);
return update_size(pb, pos);
}