Wie kann ich AVFrame in einer FFMPEG-Anwendung Speicher zuweisen und angeben?
Posted: 23 Jan 2025, 04:21
Ich arbeite an einem Videoplayer in einem eingebetteten Linux-System (5.10.200) und verwende FFMPEG-4.4.4-Bibliotheken, um den Player zu erstellen.
Jetzt möchte ich um AVFrame vorab zugewiesenen Puffer zuzuweisen, um die dekodierten Daten zu erfassen. Also habe ich Folgendes getan.
Jetzt möchte ich um AVFrame vorab zugewiesenen Puffer zuzuweisen, um die dekodierten Daten zu erfassen. Also habe ich Folgendes getan.
Code: Select all
#define FRM_WIDTH 1920
#define FRM_HEIGHT 1080
AVFrame myframe;
uint8_t *buffer;
int init_frame_buffer(void)
{
int num_bytes = av_image_get_buffer_size(AV_PIX_FMT_RGB32, FRM_WIDTH, FRM_HEIGHT, 1);
buffer = (uint8_t *)av_malloc(num_bytes * sizeof(uint8_t));
av_image_fill_arrays(myframe.data, myframe.linesize, buffer, AV_PIX_FMT_RGB32, FRM_WIDTH, FRM_HEIGHT, 1);
....
}
int process_decoded_frame(AVFrame *pframe)
{
// Can use buffer to process the decoded frame?
}
int process_packet(AVCodecContext *codectx, AVPacket *pkt)
{
int ret = avcodec_send_packet(codectx, pkt);
AVFrame *pframe = &myframe;
if (ret < 0) {
fprintf(stderr, "Error sending packet for decoding\n");
return ret;
}
while (ret >= 0) {
ret = avcodec_receive_frame(codectx, pframe);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
fprintf(stderr, "Error during decoding\n");
goto out;
}
process_decoded_frame(pframe); ////