Concernant le problème de l'erreur -1094995529 lors du décodage de l'encodage H264 dans d3dva11

Le décodeur dur d3dva11 est utilisé dans le projet pour décoder, et les paramètres sont tous normaux.

int ret = avcodec_send_packet(decoder_ctx_, avpkt);

Cette fonction a signalé une erreur, code d'erreur :

AVERROR_INVALIDDATA

Il s'agit de l'erreur -1094995529.

Après avoir vérifié le code source, nous avons constaté que lorsque cette fonction est exécutée au niveau inférieur, elle effectuera une détection de l'espace colorimétrique. Bar


#if CONFIG_LCMS2
static int detect_colorspace(AVCodecContext *avctx, AVFrame *frame)
{
    AVCodecInternal *avci = avctx->internal;
    enum AVColorTransferCharacteristic trc;
    AVColorPrimariesDesc coeffs;
    enum AVColorPrimaries prim;
    cmsHPROFILE profile;
    AVFrameSideData *sd;
    int ret;
    if (!(avctx->flags2 & AV_CODEC_FLAG2_ICC_PROFILES))
        return 0;

    sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE);
    if (!sd || !sd->size)
        return 0;

    if (!avci->icc.avctx) {
        ret = ff_icc_context_init(&avci->icc, avctx);
        if (ret < 0)
            return ret;
    }

    profile = cmsOpenProfileFromMemTHR(avci->icc.ctx, sd->data, sd->size);
    if (!profile)
        return AVERROR_INVALIDDATA;

    ........
}

 Autrement dit, la fonction cmsOpenProfileFromMemTHR a signalé une erreur. Après Chatgpt, cette fonction précharge l'espace colorimétrique et l'assemble avec l'espace mémoire couleur entrant réel. Ce problème se produit lorsque la relecture échoue.

Pourquoi exactement a-t-il échoué ? La configuration du décodeur était correcte, après quelques opérations, j'ai constaté qu'il s'agissait d'un problème au niveau du profil H264.

H264 a plusieurs profils

Profil de base

Profil principal

Haut profil 

Appelé BP, MP et HiP, le profil de base est utilisé pour décoder certains appareils relativement médiocres. Certainement moins d’espace colorimétrique et moins de fonctionnalités.

La racine du problème est que le décodeur dur D3Dva11 ne prend pas en charge BP. Il a certaines exigences pour l'espace colorimétrique H264. J'ai donc modifié la configuration d'encodage de la caméra et tout a bien fonctionné.

Guess you like

Origin blog.csdn.net/zanglengyu/article/details/132559116