diff options
| author | 2024-04-09 11:24:01 -0400 | |
|---|---|---|
| committer | 2024-04-09 11:24:01 -0400 | |
| commit | 02f3d3565602146bbbfce85b2719246f24036cb9 (patch) | |
| tree | c6588ffe297b777e36260effa4fa42b958ca6ba3 /src/bimu/handlers | |
| parent | bbf3314165182e402ff25acccddc004a87f81ef0 (diff) | |
| download | camu-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.h | 17 | ||||
| -rw-r--r-- | src/bimu/handlers/cdio_server.c | 21 | ||||
| -rw-r--r-- | src/bimu/handlers/codec.h | 20 | ||||
| -rw-r--r-- | src/bimu/handlers/codec_client.c | 104 | ||||
| -rw-r--r-- | src/bimu/handlers/codec_server.c | 140 | ||||
| -rw-r--r-- | src/bimu/handlers/dvd.h | 14 | ||||
| -rw-r--r-- | src/bimu/handlers/dvd_server.c | 21 |
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; -} |