Wie kann ich AVFrame in einer FFMPEG-Anwendung Speicher zuweisen und angeben?Linux

Linux verstehen
Guest
 Wie kann ich AVFrame in einer FFMPEG-Anwendung Speicher zuweisen und angeben?

Post by Guest »

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.

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); ////

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post