Я использую код, почти точно https://github.com/FFmpeg/FFmpeg/blob/m ... w_decode.c, но я не передаю декодированные данные на хост, я оставляю их включенными устройство для последующего использования с кодом cuda (моей целью будет использование данных RGB 8–12 бит на канал).
Интересная часть:
переводится как: «Аппаратное ускорение через CUDA. data содержат указатели CUdeviceptr точно так же, как и для кадров системной памяти».)
Я понимаю, что у меня есть два массива: кадр- >data[0] и Frame->data[1].
Что представляет собой каждый из них?
Я хотел бы перевести данные в собственная структура cuda, например:
Что, вероятно, неверно, поскольку ширина == 1920 высота == 1080 и должна содержать цвета или данные YUV.
Как узнать формат данных (RGB, BGR, YUV, 8/10/12 бит на канал и т. д.) и размер массива?
Если это так не RGB8 (или 10-12), могу ли я получить это с помощью какой-нибудь реализации ffmpeg, возможно, с помощью функции на основе nvdec?
Каковы правильные собственные данные cuda? cudaPitchedPtr (я так думаю, посколькуframe->linesize[0] больше, чем Frame->width и степень 2) или что-то еще? если да, то как получить доступ к разным каналам?
— это uint8_t, но в общем случае массив, вероятно, представляет собой что-то другое; так что же это такое (как избыточность или расширение «какого формата данных»)?
Я использую код, почти точно https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/hw_decode.c, но я не передаю декодированные данные на хост, я оставляю их включенными устройство для последующего использования с кодом cuda (моей целью будет использование данных RGB 8–12 бит на канал). Интересная часть: [code]//after decoding/encoding status = avcodec_receive_frame(avctx, frame); if (status != AVERROR(EAGAIN) && status != AVERROR_EOF) LogMessage(L"frame timestamp: %i\n", (int)frame->best_effort_timestamp); if (status == AVERROR(EAGAIN) || status == AVERROR_EOF) { av_frame_free(&frame); return 0; } if (status < 0) { LogMessage(L"Error while decoding\n"); goto finish; } { auto descr = AVPixelFormatMap[(AVPixelFormat)frame->format]; std::wstring dsdescr(descr.begin(), descr.end()); LogMessage(L"Pixelformat: %s", dsdescr.c_str());
cudaPitchedPtr CUdeviceptr0{}; // !! hypothetical usage of cudaPitchedPtr !! CUdeviceptr0.ptr = frame->data[0]; CUdeviceptr0.pitch = frame->linesize[0]; //2048 == pitch ? CUdeviceptr0.ysize = frame->height; //1080 CUdeviceptr0.xsize = frame->width; //1920 cudaPitchedPtr CUdeviceptr1{}; CUdeviceptr1.ptr = frame->data[1]; CUdeviceptr1.pitch = frame->linesize[1]; CUdeviceptr1.ysize = frame->height; CUdeviceptr1.xsize = frame->width; } [/code] Мне не удалось найти способ получить формат данных ([code](AVPixelFormat)frame->format[/code] переводится как: «Аппаратное ускорение через CUDA. data[i] содержат указатели CUdeviceptr точно так же, как и для кадров системной памяти».) Я понимаю, что у меня есть два массива: кадр- >data[0] и Frame->data[1]. [list] [*]Что представляет собой каждый из них? [/list] Я хотел бы перевести данные в собственная структура cuda, например: [code]cudaPitchedPtr CUdeviceptr{}; CUdeviceptr.ptr = frame->data[0]; CUdeviceptr.ysize = frame->height; CUdeviceptr.xsize = frame->width; [/code] Что, вероятно, неверно, поскольку ширина == 1920 высота == 1080 и должна содержать цвета или данные YUV. [list][*]Как узнать формат данных (RGB, BGR, YUV, 8/10/12 бит на канал и т. д.) и размер массива? [*]Если это так не RGB8 (или 10-12), могу ли я получить это с помощью какой-нибудь реализации ffmpeg, возможно, с помощью функции на основе nvdec? [*]Каковы правильные собственные данные cuda? cudaPitchedPtr (я так думаю, посколькуframe->linesize[0] больше, чем Frame->width и степень 2) или что-то еще? если да, то как получить доступ к разным каналам? [*][code]frame->data[0][/code] — это uint8_t, но в общем случае массив, вероятно, представляет собой что-то другое; так что же это такое (как избыточность или расширение «какого формата данных»)? [/list]
Я использую код, почти точно но я не передаю декодированные данные на хост, я оставляю их включенными устройство для последующего использования с кодом cuda (моей целью будет использование данных RGB 8–12 бит на канал).
Интересная часть:
//after...
Я использую код, почти точно но я не передаю декодированные данные на хост, я оставляю их включенными устройство для последующего использования с кодом cuda (моей целью будет использование данных RGB 8–12 бит на канал).
Интересная часть:
//after...
Версия FFmpeg.AutoGen: 7.0
Далее аналогично файлу Program.cs в каталоге «FFmpeg.AutoGen.Example».
var sourceSize = vsd.FrameSize;
var sourcePixelFormat = AVPixelFormat.AV_PIX_FMT_CUDA;
var destinationSize = sourceSize;
var destinationPixelFormat =...
Я пытался сделать повторную выборку с FFMPEG, но я все время обнаруживал проблемы в своем коде. /> Поэтому я поместил код повторной выборки вручную, потому что я знаю, что стерео. av_opt_set_sample_fmt(swr_ctx, in_sample_fmt , codec_ctx->sample_fmt,...