Ошибка при декодировании (-1094995529) При обработке ввода обнаружены неверные данные - PullRequest
0 голосов
/ 08 мая 2018

Я хочу аппаратное ускорение с использованием dxva2. В моем коде программное декодирование работает нормально, но с аппаратным ускорением avcodec_send_packet возвращает отрицательное значение (-1094995529). Помогите мне это исправить?

Инициализация оборудования dxva2:

enum AVHWDeviceType type = av_hwdevice_find_type_by_name("dxva2");

if (type == AV_HWDEVICE_TYPE_NONE) {
fprintf(fp, "Hardware Device type is not supported.\n");
return -1;
}

 for (int i = 0;; i++) {

        const AVCodecHWConfig *config = avcodec_get_hw_config(sChannelInfo[chNum].codec, i);

        if (!config) {
            fprintf(fp, "Failed to get Hardware Configuartion\n");
            return -1;
        }

        if (config->methods & AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX &&
            config->device_type == type) {
            hw_pix_fmt = config->pix_fmt;
            fprintf(fp, "config->pix_fmt  %d\n", (int)hw_pix_fmt);
            break;
        }

    }

    sChannelInfo[chNum].pCodecContext->pix_fmt = AV_PIX_FMT_DXVA2_VLD;
    sChannelInfo[chNum].pCodecContext->get_format = get_hw_format;
    av_opt_set_int(sChannelInfo[chNum].pCodecContext, "refcounted_frames", 1, 0);

    if (hw_decoder_init(sChannelInfo[chNum].pCodecContext, type) < 0)
    {
        fprintf(fp, "hardware decoder initilisation Failed\n");
        return -1;
    }

Декодирование:

int ret = avcodec_send_packet(sChannelInfo[chNum].pCodecContext, &pkt);
if (ret < 0) {
    char buffer[64];
    av_make_error_string(buffer, 64, ret);
    fprintf(fp, "Error during decoding %d %s\n",ret,buffer);
    return ret;
    }

Почему API avcodec_send_packet возвращает значение -1094995529? Чего не хватает в инициализации dxva2?

...