Почему libyuv: i420ToARGb работает так медленно - PullRequest
0 голосов
/ 14 апреля 2020

Я использую FFMPEG для декодирования данных H264. Почему libyuv: i420ToARGb работает так медленно. Для преобразования кадра требуется 4.5MS , 40000-450000 микросекунд. Нативное преобразование функции Sws_scale в FLMPEG составляет около 3000 микросекунд. Это мой код.

      if (av_read_frame(pFormatCtx, vPacket) >= 0) {
                if ((vPacket)->stream_index != videoindex) {
                    continue;
                }
                avcodec_send_packet(pCodecCtx, vPacket);
                int ret = avcodec_receive_frame(pCodecCtx, vFrame);
                if (ret < 0 && ret != AVERROR_EOF) {
                    av_packet_unref(vPacket);
                    continue;
                }
                long thisTime = getTime();
//                sws_scale(img_convert_ctx, vFrame->data, vFrame->linesize,
//                          0,
//                          pCodecCtx->height,
//                          pFrameRGBA->data, pFrameRGBA->linesize);
                    int re = libyuv::I420ToARGB(vFrame->data[0], vFrame->linesize[0],
                                                vFrame->data[2], vFrame->linesize[2],
                                                vFrame->data[1], vFrame->linesize[1],
                                                pFrameRGBA->data[0], pFrameRGBA->linesize[0],
                                                pCodecCtx->width, pCodecCtx->height);
                long newTime = getTime();
                LOGE("runing Time:%d", newTime - thisTime);
                if (ANativeWindow_lock(nativeWindow, &windowBuffer, nullptr) < 0) {
                } else {
                    av_image_fill_arrays(pFrameRGBA->data, pFrameRGBA->linesize,
                                         (const uint8_t *) windowBuffer.bits, AV_PIX_FMT_RGBA,
                                         pCodecCtx->width, pCodecCtx->height, 1);
                    ANativeWindow_unlockAndPost(nativeWindow);

                }

            };
...