mirror of
https://git.sr.ht/~thestr4ng3r/chiaki
synced 2025-08-14 18:57:07 -07:00
Push Samples into Video Receiver
This commit is contained in:
parent
ef106073d9
commit
7d448cc8b3
4 changed files with 44 additions and 7 deletions
|
@ -91,6 +91,7 @@ typedef struct chiaki_event_t
|
|||
|
||||
typedef void (*ChiakiEventCallback)(ChiakiEvent *event, void *user);
|
||||
typedef void (*ChiakiAudioFrameCallback)(int16_t *buf, size_t samples_count, void *user);
|
||||
typedef void (*ChiakiVideoSampleCallback)(uint8_t *buf, size_t buf_size, void *user);
|
||||
|
||||
|
||||
|
||||
|
@ -122,6 +123,8 @@ typedef struct chiaki_session_t
|
|||
void *event_cb_user;
|
||||
ChiakiAudioFrameCallback audio_frame_cb;
|
||||
void *audio_frame_cb_user;
|
||||
ChiakiVideoSampleCallback video_sample_cb;
|
||||
void *video_sample_cb_user;
|
||||
|
||||
ChiakiThread session_thread;
|
||||
|
||||
|
@ -154,6 +157,12 @@ static inline void chiaki_session_set_audio_frame_cb(ChiakiSession *session, Chi
|
|||
session->audio_frame_cb_user = user;
|
||||
}
|
||||
|
||||
static inline void chiaki_session_set_video_sample_cb(ChiakiSession *session, ChiakiVideoSampleCallback cb, void *user)
|
||||
{
|
||||
session->video_sample_cb = cb;
|
||||
session->video_sample_cb_user = user;
|
||||
}
|
||||
|
||||
static inline void chiaki_session_set_quit_reason(ChiakiSession *session, ChiakiQuitReason reason)
|
||||
{
|
||||
if(session->quit_reason != CHIAKI_QUIT_REASON_NONE)
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include "common.h"
|
||||
#include "log.h"
|
||||
#include "video.h"
|
||||
#include "takion.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
@ -48,6 +49,8 @@ CHIAKI_EXPORT void chiaki_video_receiver_fini(ChiakiVideoReceiver *video_receive
|
|||
*/
|
||||
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 *header, uint8_t *buf, size_t buf_size);
|
||||
|
||||
static inline ChiakiVideoReceiver *chiaki_video_receiver_new(struct chiaki_session_t *session)
|
||||
{
|
||||
ChiakiVideoReceiver *video_receiver = CHIAKI_NEW(ChiakiVideoReceiver);
|
||||
|
|
|
@ -556,18 +556,26 @@ static void nagare_takion_av(ChiakiTakionAVPacket *header, uint8_t *buf, size_t
|
|||
|
||||
chiaki_gkcrypt_decrypt(nagare->gkcrypt_remote, key_pos + CHIAKI_GKCRYPT_BLOCK_SIZE, buf, buf_size);
|
||||
|
||||
//CHIAKI_LOGD(nagare->log, "AV: index: %u,%u; b@0x1a: %d; is_video: %d; 0xa: %u; 0xc: %u; 0xe: %u; codec: %u; 0x18: %u; adaptive_stream: %u, 0x2c: %u\n",
|
||||
// header->packet_index, header->frame_index, header->byte_at_0x1a, header->is_video ? 1 : 0, header->word_at_0xa, header->word_at_0xc, header->word_at_0xe, header->codec,
|
||||
// header->word_at_0x18, header->adaptive_stream_index, header->byte_at_0x2c);
|
||||
/*CHIAKI_LOGD(nagare->log, "AV: index: %u,%u; b@0x1a: %d; is_video: %d; 0xa: %u; 0xc: %u; 0xe: %u; codec: %u; 0x18: %u; adaptive_stream: %u, 0x2c: %u\n",
|
||||
header->packet_index, header->frame_index, header->byte_at_0x1a, header->is_video ? 1 : 0, header->word_at_0xa, header->word_at_0xc, header->word_at_0xe, header->codec,
|
||||
header->word_at_0x18, header->adaptive_stream_index, header->byte_at_0x2c);
|
||||
chiaki_log_hexdump(nagare->log, CHIAKI_LOG_DEBUG, buf, buf_size);*/
|
||||
|
||||
if(header->codec == 5/*buf[0] == 0xf4 && buf_size >= 0x50*/)
|
||||
if(header->is_video)
|
||||
{
|
||||
//CHIAKI_LOGD(nagare->log, "audio!\n");
|
||||
chiaki_audio_receiver_frame_packet(nagare->session->audio_receiver, buf, 0x50);
|
||||
chiaki_video_receiver_av_packet(nagare->session->video_receiver, header, buf, buf_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
//CHIAKI_LOGD(nagare->log, "NON-audio\n");
|
||||
if(header->codec == 5/*buf[0] == 0xf4 && buf_size >= 0x50*/)
|
||||
{
|
||||
//CHIAKI_LOGD(nagare->log, "audio!\n");
|
||||
chiaki_audio_receiver_frame_packet(nagare->session->audio_receiver, buf, 0x50); // TODO: why 0x50?
|
||||
}
|
||||
else
|
||||
{
|
||||
//CHIAKI_LOGD(nagare->log, "NON-audio\n");
|
||||
}
|
||||
}
|
||||
|
||||
/*else if(base_type == 2 && buf[0] != 0xf4)
|
||||
|
|
|
@ -52,4 +52,21 @@ CHIAKI_EXPORT void chiaki_video_receiver_stream_info(ChiakiVideoReceiver *video_
|
|||
CHIAKI_LOGI(video_receiver->log, " %zu: %ux%u\n", i, profile->width, profile->height);
|
||||
chiaki_log_hexdump(video_receiver->log, CHIAKI_LOG_DEBUG, profile->header, profile->header_sz);
|
||||
}
|
||||
|
||||
// TODO: should happen deferred, depending on content of av packets
|
||||
if(video_receiver->session->video_sample_cb && video_receiver->profiles_count > 0)
|
||||
{
|
||||
video_receiver->session->video_sample_cb(video_receiver->profiles[0].header, video_receiver->profiles[0].header_sz, video_receiver->session->video_sample_cb_user);
|
||||
}
|
||||
}
|
||||
|
||||
CHIAKI_EXPORT void chiaki_video_receiver_av_packet(ChiakiVideoReceiver *video_receiver, ChiakiTakionAVPacket *header, uint8_t *buf, size_t buf_size)
|
||||
{
|
||||
if(video_receiver->session->video_sample_cb)
|
||||
{
|
||||
if(header->adaptive_stream_index == 0)
|
||||
{
|
||||
video_receiver->session->video_sample_cb(buf, buf_size, video_receiver->session->video_sample_cb_user);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue