by Guest » 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.
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); ////
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]#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); ////