mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-03-12 05:25:23 -07:00
69 lines
2.2 KiB
C
69 lines
2.2 KiB
C
// SPDX-License-Identifier: LicenseRef-AGPL-3.0-only-OpenSSL
|
|
|
|
#ifndef CHIAKI_VIDEORECEIVER_H
|
|
#define CHIAKI_VIDEORECEIVER_H
|
|
|
|
#include "common.h"
|
|
#include "log.h"
|
|
#include "video.h"
|
|
#include "takion.h"
|
|
#include "frameprocessor.h"
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#define CHIAKI_VIDEO_PROFILES_MAX 8
|
|
|
|
typedef struct chiaki_video_receiver_t
|
|
{
|
|
struct chiaki_session_t *session;
|
|
ChiakiLog *log;
|
|
ChiakiVideoProfile profiles[CHIAKI_VIDEO_PROFILES_MAX];
|
|
size_t profiles_count;
|
|
int profile_cur; // < 1 if no profile selected yet, else index in profiles
|
|
|
|
int32_t frame_index_cur; // frame that is currently being filled
|
|
int32_t frame_index_prev; // last frame that has been at least partially decoded
|
|
int32_t frame_index_prev_complete; // last frame that has been completely decoded
|
|
ChiakiFrameProcessor frame_processor;
|
|
ChiakiPacketStats *packet_stats;
|
|
} ChiakiVideoReceiver;
|
|
|
|
CHIAKI_EXPORT void chiaki_video_receiver_init(ChiakiVideoReceiver *video_receiver, struct chiaki_session_t *session, ChiakiPacketStats *packet_stats);
|
|
CHIAKI_EXPORT void chiaki_video_receiver_fini(ChiakiVideoReceiver *video_receiver);
|
|
|
|
/**
|
|
* Called after receiving the Stream Info Packet.
|
|
*
|
|
* @param video_receiver
|
|
* @param profiles Array of profiles. Ownership of the contained header buffers will be transferred to the ChiakiVideoReceiver!
|
|
* @param profiles_count must be <= CHIAKI_VIDEO_PROFILES_MAX
|
|
*/
|
|
CHIAKI_EXPORT void chiaki_video_receiver_stream_info(ChiakiVideoReceiver *video_receiver, ChiakiVideoProfile *profiles, size_t profiles_count);
|
|
|
|
CHIAKI_EXPORT void chiaki_video_receiver_av_packet(ChiakiVideoReceiver *video_receiver, ChiakiTakionAVPacket *packet);
|
|
|
|
static inline ChiakiVideoReceiver *chiaki_video_receiver_new(struct chiaki_session_t *session, ChiakiPacketStats *packet_stats)
|
|
{
|
|
ChiakiVideoReceiver *video_receiver = CHIAKI_NEW(ChiakiVideoReceiver);
|
|
if(!video_receiver)
|
|
return NULL;
|
|
chiaki_video_receiver_init(video_receiver, session, packet_stats);
|
|
return video_receiver;
|
|
}
|
|
|
|
static inline void chiaki_video_receiver_free(ChiakiVideoReceiver *video_receiver)
|
|
{
|
|
if(!video_receiver)
|
|
return;
|
|
chiaki_video_receiver_fini(video_receiver);
|
|
free(video_receiver);
|
|
}
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // CHIAKI_VIDEORECEIVER_H
|