diff mbox series

[FFmpeg-devel] Make Immersive Audio Model optional for MOV demuxing

Message ID 20240327235548.1062119-1-ezemtsov@google.com
State New
Headers show
Series [FFmpeg-devel] Make Immersive Audio Model optional for MOV demuxing | expand

Checks

Context Check Description
yinshiyou/commit_msg_loongarch64 warning The first line of the commit message must start with a context terminated by a colon and a space, for example "lavu/opt: " or "doc: ".
andriy/commit_msg_x86 warning The first line of the commit message must start with a context terminated by a colon and a space, for example "lavu/opt: " or "doc: ".
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Eugene Zemtsov March 27, 2024, 11:55 p.m. UTC
From: Eugene Zemtsov <eugene@chromium.org>

Signed-off-by: Eugene Zemtsov <eugene@chromium.org>
---
 libavformat/mov.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

Comments

James Almer March 27, 2024, 11:58 p.m. UTC | #1
On 3/27/2024 8:55 PM, Eugene Zemtsov via ffmpeg-devel wrote:
> From: Eugene Zemtsov <eugene@chromium.org>
> 
> Signed-off-by: Eugene Zemtsov <eugene@chromium.org>
> ---
>   libavformat/mov.c | 15 ++++++++++++++-
>   1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index c55778f3ef..662301bf67 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -839,6 +839,7 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>       return 0;
>   }
>   
> +#if CONFIG_IAMFDEC
>   static int mov_read_iacb(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>   {
>       AVStream *st;
> @@ -1015,6 +1016,7 @@ fail:
>   
>       return ret;
>   }
> +#endif
>   
>   static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>   {
> @@ -4797,6 +4799,7 @@ static void fix_timescale(MOVContext *c, MOVStreamContext *sc)
>       }
>   }
>   
> +#if CONFIG_IAMFDEC
>   static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
>   {
>       const MOVStreamContext *sc = st->priv_data;
> @@ -4840,6 +4843,7 @@ static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
>   
>       return 0;
>   }
> +#endif
>   
>   static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>   {
> @@ -4921,11 +4925,13 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>   
>       mov_build_index(c, st);
>   
> +#if CONFIG_IAMFDEC
>       if (sc->iamf) {
>           ret = mov_update_iamf_streams(c, st);
>           if (ret < 0)
>               return ret;
>       }
> +#endif
>   
>       if (sc->dref_id-1 < sc->drefs_count && sc->drefs[sc->dref_id-1].path) {
>           MOVDref *dref = &sc->drefs[sc->dref_id - 1];
> @@ -8457,7 +8463,9 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
>   { MKTAG('i','p','r','p'), mov_read_iprp },
>   { MKTAG('i','i','n','f'), mov_read_iinf },
>   { MKTAG('a','m','v','e'), mov_read_amve }, /* ambient viewing environment box */
> +#if CONFIG_IAMFDEC
>   { MKTAG('i','a','c','b'), mov_read_iacb },
> +#endif
>   { 0, NULL }
>   };
>   
> @@ -8929,8 +8937,10 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st)
>       av_freep(&sc->coll);
>       av_freep(&sc->ambient);
>   
> +#if CONFIG_IAMFDEC
>       if (sc->iamf)
>           ff_iamf_read_deinit(sc->iamf);
> +#endif
>       av_freep(&sc->iamf);
>   }
>   
> @@ -9570,6 +9580,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
>   
>           if (st->codecpar->codec_id == AV_CODEC_ID_EIA_608 && sample->size > 8)
>               ret = get_eia608_packet(sc->pb, pkt, sample->size);
> +#if CONFIG_IAMFDEC
>           else if (sc->iamf) {
>               int64_t pts, dts, pos, duration;
>               int flags, size = sample->size;
> @@ -9592,7 +9603,9 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
>               }
>               if (!ret)
>                   return FFERROR_REDO;
> -        } else
> +        }
> +#endif
> +        else
>               ret = av_get_packet(sc->pb, pkt, sample->size);
>           if (ret < 0) {
>               if (should_retry(sc->pb, ret)) {

Can you elaborate why you need this? In configure the mov demuxer 
selects iamfdec, so it will always be present and compiled.
Eugene Zemtsov March 28, 2024, 12:43 a.m. UTC | #2
> Can you elaborate why you need this? In configure the mov demuxer
> selects iamfdec, so it will always be present and compiled.

Chromium doesn't use Immersive Audio, but the code for handling it
bloats Android binaries,
that's why we disabled it.

I have a second patch that disables iamfdec by default for mov demuxer,
but I had a feeling that maintainers will be less inclined to accept
it and that's why I split it from this one.
I will still try to send it if this patch is accepted.


On Wed, Mar 27, 2024 at 4:59 PM James Almer <jamrial@gmail.com> wrote:
>
> On 3/27/2024 8:55 PM, Eugene Zemtsov via ffmpeg-devel wrote:
> > From: Eugene Zemtsov <eugene@chromium.org>
> >
> > Signed-off-by: Eugene Zemtsov <eugene@chromium.org>
> > ---
> >   libavformat/mov.c | 15 ++++++++++++++-
> >   1 file changed, 14 insertions(+), 1 deletion(-)
> >
> > diff --git a/libavformat/mov.c b/libavformat/mov.c
> > index c55778f3ef..662301bf67 100644
> > --- a/libavformat/mov.c
> > +++ b/libavformat/mov.c
> > @@ -839,6 +839,7 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> >       return 0;
> >   }
> >
> > +#if CONFIG_IAMFDEC
> >   static int mov_read_iacb(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> >   {
> >       AVStream *st;
> > @@ -1015,6 +1016,7 @@ fail:
> >
> >       return ret;
> >   }
> > +#endif
> >
> >   static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> >   {
> > @@ -4797,6 +4799,7 @@ static void fix_timescale(MOVContext *c, MOVStreamContext *sc)
> >       }
> >   }
> >
> > +#if CONFIG_IAMFDEC
> >   static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
> >   {
> >       const MOVStreamContext *sc = st->priv_data;
> > @@ -4840,6 +4843,7 @@ static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
> >
> >       return 0;
> >   }
> > +#endif
> >
> >   static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> >   {
> > @@ -4921,11 +4925,13 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> >
> >       mov_build_index(c, st);
> >
> > +#if CONFIG_IAMFDEC
> >       if (sc->iamf) {
> >           ret = mov_update_iamf_streams(c, st);
> >           if (ret < 0)
> >               return ret;
> >       }
> > +#endif
> >
> >       if (sc->dref_id-1 < sc->drefs_count && sc->drefs[sc->dref_id-1].path) {
> >           MOVDref *dref = &sc->drefs[sc->dref_id - 1];
> > @@ -8457,7 +8463,9 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
> >   { MKTAG('i','p','r','p'), mov_read_iprp },
> >   { MKTAG('i','i','n','f'), mov_read_iinf },
> >   { MKTAG('a','m','v','e'), mov_read_amve }, /* ambient viewing environment box */
> > +#if CONFIG_IAMFDEC
> >   { MKTAG('i','a','c','b'), mov_read_iacb },
> > +#endif
> >   { 0, NULL }
> >   };
> >
> > @@ -8929,8 +8937,10 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st)
> >       av_freep(&sc->coll);
> >       av_freep(&sc->ambient);
> >
> > +#if CONFIG_IAMFDEC
> >       if (sc->iamf)
> >           ff_iamf_read_deinit(sc->iamf);
> > +#endif
> >       av_freep(&sc->iamf);
> >   }
> >
> > @@ -9570,6 +9580,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
> >
> >           if (st->codecpar->codec_id == AV_CODEC_ID_EIA_608 && sample->size > 8)
> >               ret = get_eia608_packet(sc->pb, pkt, sample->size);
> > +#if CONFIG_IAMFDEC
> >           else if (sc->iamf) {
> >               int64_t pts, dts, pos, duration;
> >               int flags, size = sample->size;
> > @@ -9592,7 +9603,9 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
> >               }
> >               if (!ret)
> >                   return FFERROR_REDO;
> > -        } else
> > +        }
> > +#endif
> > +        else
> >               ret = av_get_packet(sc->pb, pkt, sample->size);
> >           if (ret < 0) {
> >               if (should_retry(sc->pb, ret)) {
>
> Can you elaborate why you need this? In configure the mov demuxer
> selects iamfdec, so it will always be present and compiled.
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
Eugene Zemtsov April 2, 2024, 10:50 p.m. UTC | #3
Is there anything I can do to get this path applied?
I can make iamfdec optional for mov demuxer in the same change if it's
something you're willing to do.

On Wed, Mar 27, 2024 at 5:43 PM Eugene Zemtsov <ezemtsov@google.com> wrote:
>
> > Can you elaborate why you need this? In configure the mov demuxer
> > selects iamfdec, so it will always be present and compiled.
>
> Chromium doesn't use Immersive Audio, but the code for handling it
> bloats Android binaries,
> that's why we disabled it.
>
> I have a second patch that disables iamfdec by default for mov demuxer,
> but I had a feeling that maintainers will be less inclined to accept
> it and that's why I split it from this one.
> I will still try to send it if this patch is accepted.
>
>
> On Wed, Mar 27, 2024 at 4:59 PM James Almer <jamrial@gmail.com> wrote:
> >
> > On 3/27/2024 8:55 PM, Eugene Zemtsov via ffmpeg-devel wrote:
> > > From: Eugene Zemtsov <eugene@chromium.org>
> > >
> > > Signed-off-by: Eugene Zemtsov <eugene@chromium.org>
> > > ---
> > >   libavformat/mov.c | 15 ++++++++++++++-
> > >   1 file changed, 14 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/libavformat/mov.c b/libavformat/mov.c
> > > index c55778f3ef..662301bf67 100644
> > > --- a/libavformat/mov.c
> > > +++ b/libavformat/mov.c
> > > @@ -839,6 +839,7 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> > >       return 0;
> > >   }
> > >
> > > +#if CONFIG_IAMFDEC
> > >   static int mov_read_iacb(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> > >   {
> > >       AVStream *st;
> > > @@ -1015,6 +1016,7 @@ fail:
> > >
> > >       return ret;
> > >   }
> > > +#endif
> > >
> > >   static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> > >   {
> > > @@ -4797,6 +4799,7 @@ static void fix_timescale(MOVContext *c, MOVStreamContext *sc)
> > >       }
> > >   }
> > >
> > > +#if CONFIG_IAMFDEC
> > >   static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
> > >   {
> > >       const MOVStreamContext *sc = st->priv_data;
> > > @@ -4840,6 +4843,7 @@ static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
> > >
> > >       return 0;
> > >   }
> > > +#endif
> > >
> > >   static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> > >   {
> > > @@ -4921,11 +4925,13 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
> > >
> > >       mov_build_index(c, st);
> > >
> > > +#if CONFIG_IAMFDEC
> > >       if (sc->iamf) {
> > >           ret = mov_update_iamf_streams(c, st);
> > >           if (ret < 0)
> > >               return ret;
> > >       }
> > > +#endif
> > >
> > >       if (sc->dref_id-1 < sc->drefs_count && sc->drefs[sc->dref_id-1].path) {
> > >           MOVDref *dref = &sc->drefs[sc->dref_id - 1];
> > > @@ -8457,7 +8463,9 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
> > >   { MKTAG('i','p','r','p'), mov_read_iprp },
> > >   { MKTAG('i','i','n','f'), mov_read_iinf },
> > >   { MKTAG('a','m','v','e'), mov_read_amve }, /* ambient viewing environment box */
> > > +#if CONFIG_IAMFDEC
> > >   { MKTAG('i','a','c','b'), mov_read_iacb },
> > > +#endif
> > >   { 0, NULL }
> > >   };
> > >
> > > @@ -8929,8 +8937,10 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st)
> > >       av_freep(&sc->coll);
> > >       av_freep(&sc->ambient);
> > >
> > > +#if CONFIG_IAMFDEC
> > >       if (sc->iamf)
> > >           ff_iamf_read_deinit(sc->iamf);
> > > +#endif
> > >       av_freep(&sc->iamf);
> > >   }
> > >
> > > @@ -9570,6 +9580,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
> > >
> > >           if (st->codecpar->codec_id == AV_CODEC_ID_EIA_608 && sample->size > 8)
> > >               ret = get_eia608_packet(sc->pb, pkt, sample->size);
> > > +#if CONFIG_IAMFDEC
> > >           else if (sc->iamf) {
> > >               int64_t pts, dts, pos, duration;
> > >               int flags, size = sample->size;
> > > @@ -9592,7 +9603,9 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
> > >               }
> > >               if (!ret)
> > >                   return FFERROR_REDO;
> > > -        } else
> > > +        }
> > > +#endif
> > > +        else
> > >               ret = av_get_packet(sc->pb, pkt, sample->size);
> > >           if (ret < 0) {
> > >               if (should_retry(sc->pb, ret)) {
> >
> > Can you elaborate why you need this? In configure the mov demuxer
> > selects iamfdec, so it will always be present and compiled.
> > _______________________________________________
> > ffmpeg-devel mailing list
> > ffmpeg-devel@ffmpeg.org
> > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> >
> > To unsubscribe, visit link above, or email
> > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>
>
>
> --
> Thanks,
> Eugene Zemtsov.
James Almer April 2, 2024, 10:59 p.m. UTC | #4
On 4/2/2024 7:50 PM, Eugene Zemtsov via ffmpeg-devel wrote:
> Is there anything I can do to get this path applied?
> I can make iamfdec optional for mov demuxer in the same change if it's
> something you're willing to do.

This change as is is not ok because CONFIG_IAMFDEC is always true when 
building the mov demuxer. It's a change that very clearly will depend on 
a custom config.h/mak as modified by projects using ffmpeg.

But yes, your suggestion is ok. Simpler way is probably how faan is 
handled in configure: Add a new iamf entry to SUBSYSTEM_LIST and make 
iamfdec and iamfenc depend on it. Also list the relevant --disable-iamf 
option to the output of configure --help, alongside --disable-faan and 
similar.

> 
> On Wed, Mar 27, 2024 at 5:43 PM Eugene Zemtsov <ezemtsov@google.com> wrote:
>>
>>> Can you elaborate why you need this? In configure the mov demuxer
>>> selects iamfdec, so it will always be present and compiled.
>>
>> Chromium doesn't use Immersive Audio, but the code for handling it
>> bloats Android binaries,
>> that's why we disabled it.
>>
>> I have a second patch that disables iamfdec by default for mov demuxer,
>> but I had a feeling that maintainers will be less inclined to accept
>> it and that's why I split it from this one.
>> I will still try to send it if this patch is accepted.
>>
>>
>> On Wed, Mar 27, 2024 at 4:59 PM James Almer <jamrial@gmail.com> wrote:
>>>
>>> On 3/27/2024 8:55 PM, Eugene Zemtsov via ffmpeg-devel wrote:
>>>> From: Eugene Zemtsov <eugene@chromium.org>
>>>>
>>>> Signed-off-by: Eugene Zemtsov <eugene@chromium.org>
>>>> ---
>>>>    libavformat/mov.c | 15 ++++++++++++++-
>>>>    1 file changed, 14 insertions(+), 1 deletion(-)
>>>>
>>>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>>>> index c55778f3ef..662301bf67 100644
>>>> --- a/libavformat/mov.c
>>>> +++ b/libavformat/mov.c
>>>> @@ -839,6 +839,7 @@ static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>>>>        return 0;
>>>>    }
>>>>
>>>> +#if CONFIG_IAMFDEC
>>>>    static int mov_read_iacb(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>>>>    {
>>>>        AVStream *st;
>>>> @@ -1015,6 +1016,7 @@ fail:
>>>>
>>>>        return ret;
>>>>    }
>>>> +#endif
>>>>
>>>>    static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>>>>    {
>>>> @@ -4797,6 +4799,7 @@ static void fix_timescale(MOVContext *c, MOVStreamContext *sc)
>>>>        }
>>>>    }
>>>>
>>>> +#if CONFIG_IAMFDEC
>>>>    static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
>>>>    {
>>>>        const MOVStreamContext *sc = st->priv_data;
>>>> @@ -4840,6 +4843,7 @@ static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
>>>>
>>>>        return 0;
>>>>    }
>>>> +#endif
>>>>
>>>>    static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>>>>    {
>>>> @@ -4921,11 +4925,13 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
>>>>
>>>>        mov_build_index(c, st);
>>>>
>>>> +#if CONFIG_IAMFDEC
>>>>        if (sc->iamf) {
>>>>            ret = mov_update_iamf_streams(c, st);
>>>>            if (ret < 0)
>>>>                return ret;
>>>>        }
>>>> +#endif
>>>>
>>>>        if (sc->dref_id-1 < sc->drefs_count && sc->drefs[sc->dref_id-1].path) {
>>>>            MOVDref *dref = &sc->drefs[sc->dref_id - 1];
>>>> @@ -8457,7 +8463,9 @@ static const MOVParseTableEntry mov_default_parse_table[] = {
>>>>    { MKTAG('i','p','r','p'), mov_read_iprp },
>>>>    { MKTAG('i','i','n','f'), mov_read_iinf },
>>>>    { MKTAG('a','m','v','e'), mov_read_amve }, /* ambient viewing environment box */
>>>> +#if CONFIG_IAMFDEC
>>>>    { MKTAG('i','a','c','b'), mov_read_iacb },
>>>> +#endif
>>>>    { 0, NULL }
>>>>    };
>>>>
>>>> @@ -8929,8 +8937,10 @@ static void mov_free_stream_context(AVFormatContext *s, AVStream *st)
>>>>        av_freep(&sc->coll);
>>>>        av_freep(&sc->ambient);
>>>>
>>>> +#if CONFIG_IAMFDEC
>>>>        if (sc->iamf)
>>>>            ff_iamf_read_deinit(sc->iamf);
>>>> +#endif
>>>>        av_freep(&sc->iamf);
>>>>    }
>>>>
>>>> @@ -9570,6 +9580,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
>>>>
>>>>            if (st->codecpar->codec_id == AV_CODEC_ID_EIA_608 && sample->size > 8)
>>>>                ret = get_eia608_packet(sc->pb, pkt, sample->size);
>>>> +#if CONFIG_IAMFDEC
>>>>            else if (sc->iamf) {
>>>>                int64_t pts, dts, pos, duration;
>>>>                int flags, size = sample->size;
>>>> @@ -9592,7 +9603,9 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
>>>>                }
>>>>                if (!ret)
>>>>                    return FFERROR_REDO;
>>>> -        } else
>>>> +        }
>>>> +#endif
>>>> +        else
>>>>                ret = av_get_packet(sc->pb, pkt, sample->size);
>>>>            if (ret < 0) {
>>>>                if (should_retry(sc->pb, ret)) {
>>>
>>> Can you elaborate why you need this? In configure the mov demuxer
>>> selects iamfdec, so it will always be present and compiled.
>>> _______________________________________________
>>> ffmpeg-devel mailing list
>>> ffmpeg-devel@ffmpeg.org
>>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>>
>>> To unsubscribe, visit link above, or email
>>> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
>>
>>
>>
>> --
>> Thanks,
>> Eugene Zemtsov.
> 
> 
>
diff mbox series

Patch

diff --git a/libavformat/mov.c b/libavformat/mov.c
index c55778f3ef..662301bf67 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -839,6 +839,7 @@  static int mov_read_dac3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
     return 0;
 }
 
+#if CONFIG_IAMFDEC
 static int mov_read_iacb(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
     AVStream *st;
@@ -1015,6 +1016,7 @@  fail:
 
     return ret;
 }
+#endif
 
 static int mov_read_dec3(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
@@ -4797,6 +4799,7 @@  static void fix_timescale(MOVContext *c, MOVStreamContext *sc)
     }
 }
 
+#if CONFIG_IAMFDEC
 static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
 {
     const MOVStreamContext *sc = st->priv_data;
@@ -4840,6 +4843,7 @@  static int mov_update_iamf_streams(MOVContext *c, const AVStream *st)
 
     return 0;
 }
+#endif
 
 static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 {
@@ -4921,11 +4925,13 @@  static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom)
 
     mov_build_index(c, st);
 
+#if CONFIG_IAMFDEC
     if (sc->iamf) {
         ret = mov_update_iamf_streams(c, st);
         if (ret < 0)
             return ret;
     }
+#endif
 
     if (sc->dref_id-1 < sc->drefs_count && sc->drefs[sc->dref_id-1].path) {
         MOVDref *dref = &sc->drefs[sc->dref_id - 1];
@@ -8457,7 +8463,9 @@  static const MOVParseTableEntry mov_default_parse_table[] = {
 { MKTAG('i','p','r','p'), mov_read_iprp },
 { MKTAG('i','i','n','f'), mov_read_iinf },
 { MKTAG('a','m','v','e'), mov_read_amve }, /* ambient viewing environment box */
+#if CONFIG_IAMFDEC
 { MKTAG('i','a','c','b'), mov_read_iacb },
+#endif
 { 0, NULL }
 };
 
@@ -8929,8 +8937,10 @@  static void mov_free_stream_context(AVFormatContext *s, AVStream *st)
     av_freep(&sc->coll);
     av_freep(&sc->ambient);
 
+#if CONFIG_IAMFDEC
     if (sc->iamf)
         ff_iamf_read_deinit(sc->iamf);
+#endif
     av_freep(&sc->iamf);
 }
 
@@ -9570,6 +9580,7 @@  static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
 
         if (st->codecpar->codec_id == AV_CODEC_ID_EIA_608 && sample->size > 8)
             ret = get_eia608_packet(sc->pb, pkt, sample->size);
+#if CONFIG_IAMFDEC
         else if (sc->iamf) {
             int64_t pts, dts, pos, duration;
             int flags, size = sample->size;
@@ -9592,7 +9603,9 @@  static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
             }
             if (!ret)
                 return FFERROR_REDO;
-        } else
+        }
+#endif
+        else
             ret = av_get_packet(sc->pb, pkt, sample->size);
         if (ret < 0) {
             if (should_retry(sc->pb, ret)) {