Я изменяю код видеодекодера с FFMPEG. Декодированный код имеет формат YUV420. У меня 3 указатели, каждый из которых указывает на Y, U и V т.е. данных:FFMPEG: отображение данных YUV на выходной буфер функции декодирования
yPtr-> is a pointer pointing to the Luma
uPtr-> is a pointer pointing to the Chroma Cb
vPtr-> is a pointer pointing to the Chroma Cr
Однако выходной указатель на который мне нужно сопоставить мои данные YUV имеет тип пустоты. И указатель вывода - один.
i.e: void *data
- указатель на выход, для которого мне нужно указать мой yPtr, uPtr and vPtr
. Как мне это сделать?
Один из подходов, который я пробовал, создал новый буфер, размер которого равен сумме данных Y, U и V, и скопируйте содержимое yPtr, uPtr и vPtr в новый выделенный буфер, а указатель на этот буфер я выделяю *data
вывод указателя.
Однако этот подход не является предпочтительным, поскольку memcpy необходимо выполнить и другие недостатки производительности.
Может кто-нибудь предложить альтернативу для этой проблемы. Это может быть не связано непосредственно с FFMPEG, но поскольку я изменяю код декодера libvcodec FFMPEG, я помещаю его в FFMPEG.
Edit: То, что я пытаюсь сделать:
На самом деле мое понимание, если я сделаю эту точку указателя на void *data
указатель любого декодирования функции любого декодера и установки *got_frame_ptr
к 1, то структура будет принимать заботиться о том, чтобы сбросить эти данные в файл yuv. правильно ли мое понимание?
Прототип функции моего пользовательского видео декодера или любого видеодекодер в FFmpeg является, как показано ниже:
static int myCustomDec_decode_frame(AVCodecContext *avctx,
void *data, int *data_size,
uint8_t *buf, int buf_size) {
Я имею в виду этот пост FFMPEG: Explain parameters of any codecs function pointers и предполагая, что мне нужно указать * данные на мой YUV указатель данных и демпинговый материал будут учтены ffmpeg. Просьба представить предложения, исправляющие то же самое.
Спасибо за ответ.Но причина, по которой я делаю это, заключается в том, что рамка указателя ffmpeg обеспечивает только одно. Ineed, чтобы этот указатель указывал на мои данные выходного кадра. И uotput frame представляет собой комбинацию данных Y, U и V. – Zax
Ffmpeg никогда не просто «предоставляет» указатель. Вам нужно выделить структуру, содержащую одну. Какой указатель вы пытаетесь заполнить? AVPacket.data? Вам не хватает шага, и, не сказав точно, чего вы хотите достичь, на ваш вопрос ответить невозможно. – szatmary
Спасибо за совет. Пожалуйста, проверьте мой отредактированный вопрос. – Zax