Интересная часть:
Код: Выделить всё
//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;
}
Код: Выделить всё
(AVPixelFormat)frame->formatЯ понимаю, что у меня есть два массива: кадр- >data[0] и Frame->data[1].
- Что представляет собой каждый из них?
Я хотел бы перевести данные в собственная структура cuda, например:
Код: Выделить всё
cudaPitchedPtr CUdeviceptr{};
CUdeviceptr.ptr = frame->data[0];
CUdeviceptr.ysize = frame->height;
CUdeviceptr.xsize = frame->width;
- Как узнать формат данных (RGB, BGR, YUV, 8/10/12 бит на канал и т. д.) и размер массива?
- Если это так не RGB8 (или 10-12), могу ли я получить это с помощью какой-нибудь реализации ffmpeg, возможно, с помощью функции на основе nvdec?
- Каковы правильные собственные данные cuda? cudaPitchedPtr (я так думаю, посколькуframe->linesize[0] больше, чем Frame->width и степень 2) или что-то еще? если да, то как получить доступ к разным каналам?
- — это uint8_t, но в общем случае массив, вероятно, представляет собой что-то другое; так что же это такое (как избыточность или расширение «какого формата данных»)?
Код: Выделить всё
frame->data[0]
Подробнее здесь: https://stackoverflow.com/questions/791 ... -to-use-it