Use sc_ prefix for decoder
This commit is contained in:
parent
0bf7e4ddc4
commit
0080d0b0ff
3 changed files with 40 additions and 39 deletions
|
@ -9,10 +9,10 @@
|
||||||
#include "util/log.h"
|
#include "util/log.h"
|
||||||
|
|
||||||
/** Downcast packet_sink to decoder */
|
/** Downcast packet_sink to decoder */
|
||||||
#define DOWNCAST(SINK) container_of(SINK, struct decoder, packet_sink)
|
#define DOWNCAST(SINK) container_of(SINK, struct sc_decoder, packet_sink)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
decoder_close_first_sinks(struct decoder *decoder, unsigned count) {
|
sc_decoder_close_first_sinks(struct sc_decoder *decoder, unsigned count) {
|
||||||
while (count) {
|
while (count) {
|
||||||
struct sc_frame_sink *sink = decoder->sinks[--count];
|
struct sc_frame_sink *sink = decoder->sinks[--count];
|
||||||
sink->ops->close(sink);
|
sink->ops->close(sink);
|
||||||
|
@ -20,17 +20,17 @@ decoder_close_first_sinks(struct decoder *decoder, unsigned count) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
decoder_close_sinks(struct decoder *decoder) {
|
sc_decoder_close_sinks(struct sc_decoder *decoder) {
|
||||||
decoder_close_first_sinks(decoder, decoder->sink_count);
|
sc_decoder_close_first_sinks(decoder, decoder->sink_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
decoder_open_sinks(struct decoder *decoder) {
|
sc_decoder_open_sinks(struct sc_decoder *decoder) {
|
||||||
for (unsigned i = 0; i < decoder->sink_count; ++i) {
|
for (unsigned i = 0; i < decoder->sink_count; ++i) {
|
||||||
struct sc_frame_sink *sink = decoder->sinks[i];
|
struct sc_frame_sink *sink = decoder->sinks[i];
|
||||||
if (!sink->ops->open(sink)) {
|
if (!sink->ops->open(sink)) {
|
||||||
LOGE("Could not open frame sink %d", i);
|
LOGE("Could not open frame sink %d", i);
|
||||||
decoder_close_first_sinks(decoder, i);
|
sc_decoder_close_first_sinks(decoder, i);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -39,7 +39,7 @@ decoder_open_sinks(struct decoder *decoder) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
decoder_open(struct decoder *decoder, const AVCodec *codec) {
|
sc_decoder_open(struct sc_decoder *decoder, const AVCodec *codec) {
|
||||||
decoder->codec_ctx = avcodec_alloc_context3(codec);
|
decoder->codec_ctx = avcodec_alloc_context3(codec);
|
||||||
if (!decoder->codec_ctx) {
|
if (!decoder->codec_ctx) {
|
||||||
LOG_OOM();
|
LOG_OOM();
|
||||||
|
@ -62,7 +62,7 @@ decoder_open(struct decoder *decoder, const AVCodec *codec) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!decoder_open_sinks(decoder)) {
|
if (!sc_decoder_open_sinks(decoder)) {
|
||||||
LOGE("Could not open decoder sinks");
|
LOGE("Could not open decoder sinks");
|
||||||
av_frame_free(&decoder->frame);
|
av_frame_free(&decoder->frame);
|
||||||
avcodec_close(decoder->codec_ctx);
|
avcodec_close(decoder->codec_ctx);
|
||||||
|
@ -74,15 +74,15 @@ decoder_open(struct decoder *decoder, const AVCodec *codec) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
decoder_close(struct decoder *decoder) {
|
sc_decoder_close(struct sc_decoder *decoder) {
|
||||||
decoder_close_sinks(decoder);
|
sc_decoder_close_sinks(decoder);
|
||||||
av_frame_free(&decoder->frame);
|
av_frame_free(&decoder->frame);
|
||||||
avcodec_close(decoder->codec_ctx);
|
avcodec_close(decoder->codec_ctx);
|
||||||
avcodec_free_context(&decoder->codec_ctx);
|
avcodec_free_context(&decoder->codec_ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
push_frame_to_sinks(struct decoder *decoder, const AVFrame *frame) {
|
push_frame_to_sinks(struct sc_decoder *decoder, const AVFrame *frame) {
|
||||||
for (unsigned i = 0; i < decoder->sink_count; ++i) {
|
for (unsigned i = 0; i < decoder->sink_count; ++i) {
|
||||||
struct sc_frame_sink *sink = decoder->sinks[i];
|
struct sc_frame_sink *sink = decoder->sinks[i];
|
||||||
if (!sink->ops->push(sink, frame)) {
|
if (!sink->ops->push(sink, frame)) {
|
||||||
|
@ -95,7 +95,7 @@ push_frame_to_sinks(struct decoder *decoder, const AVFrame *frame) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
decoder_push(struct decoder *decoder, const AVPacket *packet) {
|
sc_decoder_push(struct sc_decoder *decoder, const AVPacket *packet) {
|
||||||
bool is_config = packet->pts == AV_NOPTS_VALUE;
|
bool is_config = packet->pts == AV_NOPTS_VALUE;
|
||||||
if (is_config) {
|
if (is_config) {
|
||||||
// nothing to do
|
// nothing to do
|
||||||
|
@ -124,39 +124,40 @@ decoder_push(struct decoder *decoder, const AVPacket *packet) {
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
decoder_packet_sink_open(struct sc_packet_sink *sink, const AVCodec *codec) {
|
sc_decoder_packet_sink_open(struct sc_packet_sink *sink, const AVCodec *codec) {
|
||||||
struct decoder *decoder = DOWNCAST(sink);
|
struct sc_decoder *decoder = DOWNCAST(sink);
|
||||||
return decoder_open(decoder, codec);
|
return sc_decoder_open(decoder, codec);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
decoder_packet_sink_close(struct sc_packet_sink *sink) {
|
sc_decoder_packet_sink_close(struct sc_packet_sink *sink) {
|
||||||
struct decoder *decoder = DOWNCAST(sink);
|
struct sc_decoder *decoder = DOWNCAST(sink);
|
||||||
decoder_close(decoder);
|
sc_decoder_close(decoder);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
decoder_packet_sink_push(struct sc_packet_sink *sink, const AVPacket *packet) {
|
sc_decoder_packet_sink_push(struct sc_packet_sink *sink,
|
||||||
struct decoder *decoder = DOWNCAST(sink);
|
const AVPacket *packet) {
|
||||||
return decoder_push(decoder, packet);
|
struct sc_decoder *decoder = DOWNCAST(sink);
|
||||||
|
return sc_decoder_push(decoder, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
decoder_init(struct decoder *decoder) {
|
sc_decoder_init(struct sc_decoder *decoder) {
|
||||||
decoder->sink_count = 0;
|
decoder->sink_count = 0;
|
||||||
|
|
||||||
static const struct sc_packet_sink_ops ops = {
|
static const struct sc_packet_sink_ops ops = {
|
||||||
.open = decoder_packet_sink_open,
|
.open = sc_decoder_packet_sink_open,
|
||||||
.close = decoder_packet_sink_close,
|
.close = sc_decoder_packet_sink_close,
|
||||||
.push = decoder_packet_sink_push,
|
.push = sc_decoder_packet_sink_push,
|
||||||
};
|
};
|
||||||
|
|
||||||
decoder->packet_sink.ops = &ops;
|
decoder->packet_sink.ops = &ops;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
decoder_add_sink(struct decoder *decoder, struct sc_frame_sink *sink) {
|
sc_decoder_add_sink(struct sc_decoder *decoder, struct sc_frame_sink *sink) {
|
||||||
assert(decoder->sink_count < DECODER_MAX_SINKS);
|
assert(decoder->sink_count < SC_DECODER_MAX_SINKS);
|
||||||
assert(sink);
|
assert(sink);
|
||||||
assert(sink->ops);
|
assert(sink->ops);
|
||||||
decoder->sinks[decoder->sink_count++] = sink;
|
decoder->sinks[decoder->sink_count++] = sink;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#ifndef DECODER_H
|
#ifndef SC_DECODER_H
|
||||||
#define DECODER_H
|
#define SC_DECODER_H
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -9,12 +9,12 @@
|
||||||
#include <libavcodec/avcodec.h>
|
#include <libavcodec/avcodec.h>
|
||||||
#include <libavformat/avformat.h>
|
#include <libavformat/avformat.h>
|
||||||
|
|
||||||
#define DECODER_MAX_SINKS 2
|
#define SC_DECODER_MAX_SINKS 2
|
||||||
|
|
||||||
struct decoder {
|
struct sc_decoder {
|
||||||
struct sc_packet_sink packet_sink; // packet sink trait
|
struct sc_packet_sink packet_sink; // packet sink trait
|
||||||
|
|
||||||
struct sc_frame_sink *sinks[DECODER_MAX_SINKS];
|
struct sc_frame_sink *sinks[SC_DECODER_MAX_SINKS];
|
||||||
unsigned sink_count;
|
unsigned sink_count;
|
||||||
|
|
||||||
AVCodecContext *codec_ctx;
|
AVCodecContext *codec_ctx;
|
||||||
|
@ -22,9 +22,9 @@ struct decoder {
|
||||||
};
|
};
|
||||||
|
|
||||||
void
|
void
|
||||||
decoder_init(struct decoder *decoder);
|
sc_decoder_init(struct sc_decoder *decoder);
|
||||||
|
|
||||||
void
|
void
|
||||||
decoder_add_sink(struct decoder *decoder, struct sc_frame_sink *sink);
|
sc_decoder_add_sink(struct sc_decoder *decoder, struct sc_frame_sink *sink);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct scrcpy {
|
||||||
struct sc_server server;
|
struct sc_server server;
|
||||||
struct sc_screen screen;
|
struct sc_screen screen;
|
||||||
struct stream stream;
|
struct stream stream;
|
||||||
struct decoder decoder;
|
struct sc_decoder decoder;
|
||||||
struct recorder recorder;
|
struct recorder recorder;
|
||||||
#ifdef HAVE_V4L2
|
#ifdef HAVE_V4L2
|
||||||
struct sc_v4l2_sink v4l2_sink;
|
struct sc_v4l2_sink v4l2_sink;
|
||||||
|
@ -371,13 +371,13 @@ scrcpy(struct scrcpy_options *options) {
|
||||||
file_pusher_initialized = true;
|
file_pusher_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct decoder *dec = NULL;
|
struct sc_decoder *dec = NULL;
|
||||||
bool needs_decoder = options->display;
|
bool needs_decoder = options->display;
|
||||||
#ifdef HAVE_V4L2
|
#ifdef HAVE_V4L2
|
||||||
needs_decoder |= !!options->v4l2_device;
|
needs_decoder |= !!options->v4l2_device;
|
||||||
#endif
|
#endif
|
||||||
if (needs_decoder) {
|
if (needs_decoder) {
|
||||||
decoder_init(&s->decoder);
|
sc_decoder_init(&s->decoder);
|
||||||
dec = &s->decoder;
|
dec = &s->decoder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -608,7 +608,7 @@ aoa_hid_end:
|
||||||
}
|
}
|
||||||
screen_initialized = true;
|
screen_initialized = true;
|
||||||
|
|
||||||
decoder_add_sink(&s->decoder, &s->screen.frame_sink);
|
sc_decoder_add_sink(&s->decoder, &s->screen.frame_sink);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_V4L2
|
#ifdef HAVE_V4L2
|
||||||
|
@ -618,7 +618,7 @@ aoa_hid_end:
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
decoder_add_sink(&s->decoder, &s->v4l2_sink.frame_sink);
|
sc_decoder_add_sink(&s->decoder, &s->v4l2_sink.frame_sink);
|
||||||
|
|
||||||
v4l2_sink_initialized = true;
|
v4l2_sink_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue