alsa-project / alsa-plugins

The Advanced Linux Sound Architecture (ALSA) - plugins
GNU Lesser General Public License v2.1
41 stars 28 forks source link

Compatibility with FFMPEG 7.0 #58

Closed eclipseo closed 4 months ago

eclipseo commented 6 months ago

channel_layout has been replace with ch_layout

avcodec_close has been deprecated in favor of avcodec_free_context

Fix #57

fhloston commented 6 months ago

This breaks the a52 encoder profile for me:

ALSA device open 'plug:SLAVE='a52:0'' playback: 0x5610a26b99d0
[ac3_fixed @ 0x5610a26af040] Specified channel layout '6 channels' is not supported by the ac3_fixed encoder
[ac3_fixed @ 0x5610a26af040] Supported channel layouts:
[ac3_fixed @ 0x5610a26af040]   mono
[ac3_fixed @ 0x5610a26af040]   stereo
[ac3_fixed @ 0x5610a26af040]   3.0(back)
[ac3_fixed @ 0x5610a26af040]   3.0
[ac3_fixed @ 0x5610a26af040]   quad(side)
[ac3_fixed @ 0x5610a26af040]   quad
[ac3_fixed @ 0x5610a26af040]   4.0
[ac3_fixed @ 0x5610a26af040]   5.0(side)
[ac3_fixed @ 0x5610a26af040]   5.0
[ac3_fixed @ 0x5610a26af040]   2 channels (FC+LFE)
[ac3_fixed @ 0x5610a26af040]   2.1
[ac3_fixed @ 0x5610a26af040]   4 channels (FL+FR+LFE+BC)
[ac3_fixed @ 0x5610a26af040]   3.1
[ac3_fixed @ 0x5610a26af040]   4.1
[ac3_fixed @ 0x5610a26af040]   5.1(side)
[ac3_fixed @ 0x5610a26af040]   5.1
eclipseo commented 6 months ago

@fhloston This seems unrelated to this patch, ac3_fixed has always only supported this.

https://github.com/FFmpeg/FFmpeg/commit/65ddc74988245a01421a63c5cffa4d900c47117c

/**
 * List of supported channel layouts.
 */
const AVChannelLayout ff_ac3_ch_layouts[19] = {
    AV_CHANNEL_LAYOUT_MONO,
    AV_CHANNEL_LAYOUT_STEREO,
    AV_CHANNEL_LAYOUT_2_1,
    AV_CHANNEL_LAYOUT_SURROUND,
    AV_CHANNEL_LAYOUT_2_2,
    AV_CHANNEL_LAYOUT_QUAD,
    AV_CHANNEL_LAYOUT_4POINT0,
    AV_CHANNEL_LAYOUT_5POINT0,
    AV_CHANNEL_LAYOUT_5POINT0_BACK,
    {
        .nb_channels = 2,
        .order       = AV_CHANNEL_ORDER_NATIVE,
        .u.mask      = AV_CH_LAYOUT_MONO | AV_CH_LOW_FREQUENCY,
    },
    {
        .nb_channels = 3,
        .order       = AV_CHANNEL_ORDER_NATIVE,
        .u.mask      = AV_CH_LAYOUT_STEREO | AV_CH_LOW_FREQUENCY,
    },
    {
        .nb_channels = 4,
        .order       = AV_CHANNEL_ORDER_NATIVE,
        .u.mask      = AV_CH_LAYOUT_2_1 | AV_CH_LOW_FREQUENCY,
    },
    {
        .nb_channels = 4,
        .order       = AV_CHANNEL_ORDER_NATIVE,
        .u.mask      = AV_CH_LAYOUT_SURROUND | AV_CH_LOW_FREQUENCY,
    },
    {
        .nb_channels = 5,
        .order       = AV_CHANNEL_ORDER_NATIVE,
        .u.mask      = AV_CH_LAYOUT_4POINT0 | AV_CH_LOW_FREQUENCY,
    },
    AV_CHANNEL_LAYOUT_5POINT1,
    AV_CHANNEL_LAYOUT_5POINT1_BACK,
    { 0 },
};

Though it should probably use the avcodec codec, but nothing I have changed should impact this.

fhloston commented 6 months ago

I cannot tell... previous version with ffmpeg6 just works though.

eclipseo commented 6 months ago

I cannot tell... previous version with ffmpeg6 just works though.

Could you try with last push? Maybe it is an issue with mapping the channels with the new layout.

fhloston commented 6 months ago

That seems to have done the trick!

I have a working a52 profile.

:tada: