aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Härdin <git@haerdin.se>2024-10-29 16:13:04 +0100
committerTomas Härdin <git@haerdin.se>2024-11-08 10:52:04 +0100
commit733d891bdf4e8befa9356de113bcf9979e4895a7 (patch)
treecbefe79fc2cb0a85e37d075b68f203f5ddfdd10a
parentf4ba5b083c95b618603394a210c113a24968d68f (diff)
downloadffmpeg-733d891bdf4e8befa9356de113bcf9979e4895a7.tar.gz
lavf/mxfenc: Use nb_components, not av_pix_fmt_count_planes()
Also check that pix_desc != NULL, thanks James Almer This fixes https://trac.ffmpeg.org/ticket/11267
-rw-r--r--libavformat/mxfenc.c24
1 files changed, 17 insertions, 7 deletions
diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 57be9e6ef6..664e8ca743 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -1488,7 +1488,12 @@ static void mxf_write_jpeg2000_subdesc(AVFormatContext *s, AVStream *st)
MXFStreamContext *sc = st->priv_data;
AVIOContext *pb = s->pb;
int64_t pos;
- int component_count = av_pix_fmt_count_planes(st->codecpar->format);
+ const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(st->codecpar->format);
+
+ if (!pix_desc) {
+ av_log(s, AV_LOG_ERROR, "Pixel format not set - not writing JPEG2000SubDescriptor\n");
+ return;
+ }
/* JPEG2000 subdescriptor key */
avio_write(pb, mxf_jpeg2000_subdescriptor_key, 16);
@@ -1527,15 +1532,15 @@ static void mxf_write_jpeg2000_subdesc(AVFormatContext *s, AVStream *st)
avio_wb32(pb, sc->j2k_info.j2k_yt0siz);
/* Image components number (Csiz) */
mxf_write_local_tag(s, 2, 0x840A);
- avio_wb16(pb, component_count);
+ avio_wb16(pb, pix_desc->nb_components);
/* Array of picture components where each component comprises 3 bytes named Ssiz(i) (Pixel bitdepth - 1),
XRSiz(i) (Horizontal sampling), YRSiz(i) (Vertical sampling). The array of 3-byte groups is preceded
by the array header comprising a 4-byte value of the number of components followed by a 4-byte
value of 3. */
- mxf_write_local_tag(s, 8 + 3*component_count, 0x840B);
- avio_wb32(pb, component_count);
+ mxf_write_local_tag(s, 8 + 3*pix_desc->nb_components, 0x840B);
+ avio_wb32(pb, pix_desc->nb_components);
avio_wb32(pb, 3);
- avio_write(pb, sc->j2k_info.j2k_comp_desc, 3*component_count);
+ avio_write(pb, sc->j2k_info.j2k_comp_desc, 3*pix_desc->nb_components);
mxf_update_klv_size(pb, pos);
}
@@ -2638,10 +2643,15 @@ static int mxf_parse_jpeg2000_frame(AVFormatContext *s, AVStream *st, AVPacket *
{
MXFContext *mxf = s->priv_data;
MXFStreamContext *sc = st->priv_data;
- int component_count = av_pix_fmt_count_planes(st->codecpar->format);
+ const AVPixFmtDescriptor *pix_desc = av_pix_fmt_desc_get(st->codecpar->format);
GetByteContext g;
uint32_t j2k_ncomponents;
+ if (!pix_desc) {
+ av_log(s, AV_LOG_ERROR, "Pixel format not set\n");
+ return AVERROR(EINVAL);
+ }
+
if (mxf->header_written)
return 1;
@@ -2671,7 +2681,7 @@ static int mxf_parse_jpeg2000_frame(AVFormatContext *s, AVStream *st, AVPacket *
sc->j2k_info.j2k_xt0siz = bytestream2_get_be32u(&g);
sc->j2k_info.j2k_yt0siz = bytestream2_get_be32u(&g);
j2k_ncomponents = bytestream2_get_be16u(&g);
- if (j2k_ncomponents != component_count) {
+ if (j2k_ncomponents != pix_desc->nb_components) {
av_log(s, AV_LOG_ERROR, "Incoherence about components image number.\n");
return AVERROR_INVALIDDATA;
}