summaryrefslogtreecommitdiff
path: root/src/bimu/handlers
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-04-09 11:24:01 -0400
committerAndrew Opalach <andrew@akon.city> 2024-04-09 11:24:01 -0400
commit02f3d3565602146bbbfce85b2719246f24036cb9 (patch)
treec6588ffe297b777e36260effa4fa42b958ca6ba3 /src/bimu/handlers
parentbbf3314165182e402ff25acccddc004a87f81ef0 (diff)
downloadcamu-02f3d3565602146bbbfce85b2719246f24036cb9.tar.gz
camu-02f3d3565602146bbbfce85b2719246f24036cb9.tar.bz2
camu-02f3d3565602146bbbfce85b2719246f24036cb9.zip
Massive restructure and many changes
- The server-side list concept is still a wip Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/bimu/handlers')
-rw-r--r--src/bimu/handlers/cdio.h17
-rw-r--r--src/bimu/handlers/cdio_server.c21
-rw-r--r--src/bimu/handlers/codec.h20
-rw-r--r--src/bimu/handlers/codec_client.c104
-rw-r--r--src/bimu/handlers/codec_server.c140
-rw-r--r--src/bimu/handlers/dvd.h14
-rw-r--r--src/bimu/handlers/dvd_server.c21
7 files changed, 0 insertions, 337 deletions
diff --git a/src/bimu/handlers/cdio.h b/src/bimu/handlers/cdio.h
deleted file mode 100644
index 0f614af..0000000
--- a/src/bimu/handlers/cdio.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#include <cdio/paranoia/cdda.h>
-#include <cdio/cd_types.h>
-
-#include "../handler.h"
-
-struct bmu_cdio_server {
- struct bmu_server_handler handler;
-};
-
-struct bmu_cdio_client {
- struct bmu_client_handler handler;
-};
-
-struct bmu_server_handler *bmu_cdio_server_create(void);
-struct bmu_client_handler *bmu_cdio_client_create(void);
diff --git a/src/bimu/handlers/cdio_server.c b/src/bimu/handlers/cdio_server.c
deleted file mode 100644
index 151b94f..0000000
--- a/src/bimu/handlers/cdio_server.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "cdio.h"
-
-static bool cdio_server_init(struct bmu_server_handler *handler, struct cch_handle *handle,
- struct aki_packet_pool *pool)
-{
- struct bmu_cdio_server *cdio = (struct bmu_cdio_server *)handler;
- return true;
-}
-
-struct bmu_server_handler *bmu_cdio_server_create(void)
-{
- struct bmu_cdio_server *cdio = al_alloc_object(struct bmu_cdio_server);
- cdio->handler.init = cdio_server_init;
-// cdio->handler.write_info = cdio_server_write_info;
-// cdio->handler.subscribe = cdio_server_subscribe;
-// cdio->handler.get_duration = cdio_server_get_duration;
-// cdio->handler.seek = cdio_server_seek;
-// cdio->handler.step = cdio_server_step;
-// cdio->handler.free = cdio_server_free;
- return (struct bmu_server_handler *)cdio;
-}
diff --git a/src/bimu/handlers/codec.h b/src/bimu/handlers/codec.h
deleted file mode 100644
index a8031b1..0000000
--- a/src/bimu/handlers/codec.h
+++ /dev/null
@@ -1,20 +0,0 @@
-#pragma once
-
-#include "../handler.h"
-
-#include "../../codec/codec.h"
-
-struct bmu_codec_server {
- struct bmu_server_handler handler;
- struct camu_demuxer *demux;
- struct camu_packet packet;
- struct aki_packet_pool *pool;
-};
-
-struct bmu_codec_client {
- struct bmu_client_handler handler;
- struct camu_decoder *dec;
-};
-
-struct bmu_server_handler *bmu_codec_server_create(void);
-struct bmu_client_handler *bmu_codec_client_create(void);
diff --git a/src/bimu/handlers/codec_client.c b/src/bimu/handlers/codec_client.c
deleted file mode 100644
index 79ef27d..0000000
--- a/src/bimu/handlers/codec_client.c
+++ /dev/null
@@ -1,104 +0,0 @@
-#include "../../codec/codec.h"
-#include "../../codec/libav/decoder.h"
-#include "../../codec/libav/packet_ext.h"
-
-#include "../../bimu/vcr.h"
-
-#include "codec.h"
-
-static void data_callback(void *userdata, struct camu_frame *frame)
-{
- struct bmu_codec_client *codec = (struct bmu_codec_client *)userdata;
- codec->handler.callback(codec->handler.userdata, BIMU_CLIENT_DATA, codec->handler.stream, frame);
-}
-
-static bool codec_client_init(struct bmu_client_handler *handler, struct camu_renderer *renderer,
- struct bmu_vcr_stream *stream)
-{
- struct bmu_codec_client *codec = (struct bmu_codec_client *)handler;
- codec->dec = camu_lav_decoder_create();
- codec->handler.stream = stream;
- if (!codec->dec->init(codec->dec, renderer, &stream->stream)) {
- return false;
- }
- codec->dec->stream = &stream->stream;
- codec->handler.callback(codec->handler.userdata, BIMU_CLIENT_CONFIGURE, codec->handler.stream, NULL);
- codec->dec->set_callback(codec->dec, data_callback, codec);
- return true;
-}
-
-#ifdef HAVE_FFMPEG
-static void push_av_packet(struct bmu_codec_client *codec, AVPacket *pkt)
-{
- struct camu_packet packet;
- packet.av.pkt = pkt;
- s32 ret = codec->dec->push(codec->dec, &packet);
- av_packet_unref(pkt);
- av_packet_free(&pkt);
- al_assert(ret == CAMU_OK);
-}
-#endif
-
-static void push_packet(struct bmu_codec_client *codec, struct aki_buffer *buffer)
-{
- struct camu_packet packet;
- packet.buffer = buffer;
- s32 ret = codec->dec->push(codec->dec, &packet);
- al_assert(ret == CAMU_OK);
-}
-
-static void codec_client_handle_data_packet(struct bmu_client_handler *handler, struct aki_packet *packet)
-{
- struct bmu_codec_client *codec = (struct bmu_codec_client *)handler;
- switch (aki_packet_read_u8(packet)) {
- case CAMU_NORMAL: {
- struct aki_buffer buffer;
- aki_packet_read_buffer(packet, &buffer);
- push_packet(codec, &buffer);
- break;
- }
-#ifdef HAVE_FFMPEG
- case CAMU_FFMPEG_COMPAT: {
- push_av_packet(codec, aki_packet_read_av_packet(packet));
- break;
- }
-#endif
- }
- s32 ret = codec->dec->process(codec->dec);
- al_assert(ret == CAMU_ERR_AGAIN || ret == CAMU_ERR_EOF);
-}
-
-static void codec_client_handle_eof(struct bmu_client_handler *handler)
-{
- struct bmu_codec_client *codec = (struct bmu_codec_client *)handler;
- s32 ret = codec->dec->push(codec->dec, NULL);
- // Flush returns success.
- ret = codec->dec->process(codec->dec);
- al_assert(ret == CAMU_ERR_EOF);
- codec->handler.callback(codec->handler.userdata, BIMU_CLIENT_EOF, codec->handler.stream, NULL);
-}
-
-static void codec_client_flush(struct bmu_client_handler *handler)
-{
- struct bmu_codec_client *codec = (struct bmu_codec_client *)handler;
- codec->dec->flush(codec->dec);
-}
-
-static void codec_client_free(struct bmu_client_handler **handler)
-{
- struct bmu_codec_client *codec = (struct bmu_codec_client *)*handler;
- codec->dec->free(&codec->dec);
- al_free(codec);
- *handler = NULL;
-}
-
-struct bmu_client_handler *bmu_codec_client_create(void)
-{
- struct bmu_codec_client *codec = al_alloc_object(struct bmu_codec_client);
- codec->handler.init = codec_client_init;
- codec->handler.handle_data_packet = codec_client_handle_data_packet;
- codec->handler.handle_eof = codec_client_handle_eof;
- codec->handler.flush = codec_client_flush;
- codec->handler.free = codec_client_free;
- return (struct bmu_client_handler *)codec;
-}
diff --git a/src/bimu/handlers/codec_server.c b/src/bimu/handlers/codec_server.c
deleted file mode 100644
index a30ce68..0000000
--- a/src/bimu/handlers/codec_server.c
+++ /dev/null
@@ -1,140 +0,0 @@
-#include "../../codec/codec.h"
-#include "../../codec/libav/demuxer.h"
-#include "../../codec/libav/packet_ext.h"
-
-#include "../handler.h"
-
-#include "codec.h"
-
-static bool codec_server_init(struct bmu_server_handler *handler, struct cch_handle *handle,
- struct aki_packet_pool *pool)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)handler;
- codec->demux = camu_lav_demuxer_create();
- if (!codec->demux->init(codec->demux, handle)) {
- return false;
- }
- switch (codec->demux->type) {
- case CAMU_NORMAL:
- break;
-#ifdef HAVE_FFMPEG
- case CAMU_FFMPEG_COMPAT:
- codec->packet.av.pkt = av_packet_alloc();
- break;
-#endif
- }
- codec->pool = pool;
- return true;
-}
-
-static void codec_server_write_info(struct bmu_server_handler *handler, struct aki_packet *packet)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)handler;
- aki_packet_write_u64(packet, codec->demux->get_duration(codec->demux));
- aki_packet_write_u32(packet, codec->demux->streams.size);
- struct camu_stream *stream;
- al_array_foreach_ptr(codec->demux->streams, i, stream) {
- aki_packet_write_u8(packet, stream->type);
- switch (stream->type) {
- case CAMU_NORMAL:
- aki_packet_write_s32(packet, stream->video.width);
- aki_packet_write_s32(packet, stream->video.height);
- break;
-#ifdef HAVE_FFMPEG
- case CAMU_FFMPEG_COMPAT:
- aki_packet_write_av_codec_id(packet, stream->av.stream->codecpar->codec_id);
- aki_packet_write_av_stream(packet, stream->av.stream);
- break;
-#endif
- }
- }
-}
-
-static void codec_server_subscribe(struct bmu_server_handler *handler, s32 index, bool subscribe)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)handler;
- if (subscribe) {
- al_array_push(codec->demux->subscribed, index);
- }
-}
-
-static u64 codec_server_get_duration(struct bmu_server_handler *handler)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)handler;
- return codec->demux->get_duration(codec->demux);
-}
-
-static bool codec_server_seek(struct bmu_server_handler *handler, u64 pos)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)handler;
- return codec->demux->seek(codec->demux, pos);
-}
-
-static bool codec_server_step(struct bmu_server_handler *handler)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)handler;
- struct aki_packet *packet = aki_packet_pool_get(codec->pool);
- if (!packet) return false;
- s32 ret = codec->demux->get_packet(codec->demux, &codec->packet);
- if (ret == CAMU_OK) {
- aki_packet_write_u8(packet, 0);
- switch (codec->packet.type) {
- case CAMU_NORMAL: {
- aki_packet_write_s32(packet, BIMU_PACKET_DATA);
- aki_packet_write_u8(packet, codec->packet.type);
- aki_packet_write_buffer(packet, codec->packet.buffer);
- break;
- }
-#ifdef HAVE_FFMPEG
- case CAMU_FFMPEG_COMPAT: {
- AVPacket *pkt = codec->packet.av.pkt;
- aki_packet_write_s32(packet, pkt->stream_index);
- aki_packet_write_u8(packet, codec->packet.type);
- aki_packet_write_av_packet(packet, pkt);
- av_packet_unref(pkt);
- break;
- }
-#endif
- }
- aki_packet_pool_submit(codec->pool, packet);
- } else if (ret == CAMU_ERR_EOF) {
- aki_packet_write_u8(packet, BIMU_PACKET_EOF);
- aki_packet_pool_submit(codec->pool, packet);
- return false;
- } else {
- aki_packet_write_u8(packet, BIMU_PACKET_ERROR);
- aki_packet_pool_submit(codec->pool, packet);
- return false;
- }
- return true;
-}
-
-static void codec_server_free(struct bmu_server_handler **handler)
-{
- struct bmu_codec_server *codec = (struct bmu_codec_server *)*handler;
- switch (codec->demux->type) {
- case CAMU_NORMAL:
- break;
-#ifdef HAVE_FFMPEG
- case CAMU_FFMPEG_COMPAT:
- av_packet_free(&codec->packet.av.pkt);
- break;
-#endif
- }
- codec->demux->free(&codec->demux);
- al_free(codec);
- *handler = NULL;
-}
-
-struct bmu_server_handler *bmu_codec_server_create(void)
-{
- struct bmu_codec_server *codec = al_alloc_object(struct bmu_codec_server);
- codec->handler.init = codec_server_init;
- codec->handler.write_info = codec_server_write_info;
- codec->handler.subscribe = codec_server_subscribe;
- codec->handler.get_duration = codec_server_get_duration;
- codec->handler.seek = codec_server_seek;
- codec->handler.step = codec_server_step;
- codec->handler.free = codec_server_free;
- return (struct bmu_server_handler *)codec;
-}
diff --git a/src/bimu/handlers/dvd.h b/src/bimu/handlers/dvd.h
deleted file mode 100644
index db9bfe9..0000000
--- a/src/bimu/handlers/dvd.h
+++ /dev/null
@@ -1,14 +0,0 @@
-#pragma once
-
-#include "../handler.h"
-
-struct bmu_dvd_server {
- struct bmu_server_handler handler;
-};
-
-struct bmu_dvd_client {
- struct bmu_client_handler handler;
-};
-
-struct bmu_server_handler *bmu_dvd_server_create(void);
-struct bmu_client_handler *bmu_dvd_client_create(void);
diff --git a/src/bimu/handlers/dvd_server.c b/src/bimu/handlers/dvd_server.c
deleted file mode 100644
index ea3a9d9..0000000
--- a/src/bimu/handlers/dvd_server.c
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "dvd.h"
-
-static bool dvd_server_init(struct bmu_server_handler *handler, struct cch_handle *handle,
- struct aki_packet_pool *pool)
-{
- struct bmu_dvd_server *dvd = (struct bmu_dvd_server *)handler;
- return true;
-}
-
-struct bmu_server_handler *bmu_dvd_server_create(void)
-{
- struct bmu_dvd_server *dvd = al_alloc_object(struct bmu_dvd_server);
- dvd->handler.init = dvd_server_init;
-// dvd->handler.write_info = dvd_server_write_info;
-// dvd->handler.subscribe = dvd_server_subscribe;
-// dvd->handler.get_duration = dvd_server_get_duration;
-// dvd->handler.seek = dvd_server_seek;
-// dvd->handler.step = dvd_server_step;
-// dvd->handler.free = dvd_server_free;
- return (struct bmu_server_handler *)dvd;
-}