mirror of
https://github.com/Genymobile/scrcpy.git
synced 2026-02-12 01:14:28 +01:00
The video buffer took ownership of the producer frame (so that it could swap frames quickly). In order to support multiple sinks plugged to the decoder, the decoded frame must not be consumed by the display video buffer. Therefore, move the producer and consumer frames out of the video buffer, and use FFmpeg AVFrame refcounting to share ownership while avoiding copies.
31 lines
507 B
C
31 lines
507 B
C
#ifndef DECODER_H
|
|
#define DECODER_H
|
|
|
|
#include "common.h"
|
|
|
|
#include <stdbool.h>
|
|
#include <libavformat/avformat.h>
|
|
|
|
struct video_buffer;
|
|
|
|
struct decoder {
|
|
struct video_buffer *video_buffer;
|
|
|
|
AVCodecContext *codec_ctx;
|
|
AVFrame *frame;
|
|
};
|
|
|
|
void
|
|
decoder_init(struct decoder *decoder, struct video_buffer *vb);
|
|
|
|
bool
|
|
decoder_open(struct decoder *decoder, const AVCodec *codec);
|
|
|
|
void
|
|
decoder_close(struct decoder *decoder);
|
|
|
|
bool
|
|
decoder_push(struct decoder *decoder, const AVPacket *packet);
|
|
|
|
#endif
|