move error message for undecrytped video into video_renderers_gstreamer.c

This commit is contained in:
fduncanh
2021-12-08 13:38:12 -05:00
parent f10e7494dd
commit 815ba2ccdd
3 changed files with 28 additions and 30 deletions

View File

@@ -78,7 +78,6 @@ struct raop_rtp_mirror_s {
unsigned short mirror_data_lport;
bool broken_video;
};
static int
@@ -337,7 +336,6 @@ raop_rtp_mirror_thread(void *arg)
break;
}
}
if (nalu_size != payload_size) valid = false;
// int nalu_type = payload[4] & 0x1f;
// logger_log(raop_rtp_mirror->logger, LOGGER_DEBUG, "nalutype = %d", nalu_type);
@@ -347,20 +345,15 @@ raop_rtp_mirror_thread(void *arg)
#ifdef DUMP_H264
fwrite(payload_decrypted, payload_size, 1, file);
#endif
if (valid) {
raop_rtp_mirror->broken_video = false;
h264_decode_struct h264_data;
h264_data.data_len = payload_size;
h264_data.data = payload_decrypted;
h264_data.frame_type = 1;
h264_data.pts = ntp_timestamp;
raop_rtp_mirror->callbacks.video_process(raop_rtp_mirror->callbacks.cls, raop_rtp_mirror->ntp, &h264_data);
} else {
if (!raop_rtp_mirror->broken_video) {
logger_log(raop_rtp_mirror->logger, LOGGER_ERR, "*** ERROR decryption of video failed");
}
raop_rtp_mirror->broken_video = true;
}
if (!valid || nalu_size != payload_size) payload_decrypted[0] = 1; /* mark as invalid */
h264_decode_struct h264_data;
h264_data.data_len = payload_size;
h264_data.data = payload_decrypted;
h264_data.frame_type = 1;
h264_data.pts = ntp_timestamp;
raop_rtp_mirror->callbacks.video_process(raop_rtp_mirror->callbacks.cls, raop_rtp_mirror->ntp, &h264_data);
free(payload_decrypted);
} else if ((payload_type & 255) == 1) {
// The information in the payload contains an SPS and a PPS NAL
@@ -482,7 +475,6 @@ raop_rtp_start_mirror(raop_rtp_mirror_t *raop_rtp_mirror, int use_udp, unsigned
/* Create the thread and initialize running values */
raop_rtp_mirror->running = 1;
raop_rtp_mirror->joined = 0;
raop_rtp_mirror->broken_video = false;
THREAD_CREATE(raop_rtp_mirror->thread_mirror, raop_rtp_mirror_thread, raop_rtp_mirror);
MUTEX_UNLOCK(raop_rtp_mirror->run_mutex);

View File

@@ -209,7 +209,7 @@ void audio_renderer_render_buffer(raop_ntp_t *ntp, unsigned char* data, int data
if (counter == 2) broken_audio = false;
if (!broken_audio) gst_app_src_push_buffer(GST_APP_SRC(renderer->appsrc), buffer);
} else {
if(!broken_audio) logger_log(logger, LOGGER_ERR, "*** ERROR decryption of audio (compression_type %d) failed ", renderer->ct);
if (!broken_audio) logger_log(logger, LOGGER_ERR, "*** ERROR decryption of audio (compression_type %d) failed ", renderer->ct);
broken_audio = true;
counter = 0;
}

View File

@@ -94,6 +94,7 @@ static void append_videoflip (GString *launch, const videoflip_t *flip, const vi
static video_renderer_t *renderer = NULL;
static logger_t *logger = NULL;
static bool broken_video;
void video_renderer_init(logger_t *render_logger, const char *server_name, videoflip_t videoflip[2], const char *videosink) {
GError *error = NULL;
@@ -143,28 +144,33 @@ void video_renderer_init(logger_t *render_logger, const char *server_name, vide
}
void video_renderer_start() {
broken_video = false;
gst_element_set_state (renderer->pipeline, GST_STATE_PLAYING);
renderer->bus = gst_element_get_bus(renderer->pipeline);
}
void video_renderer_render_buffer(raop_ntp_t *ntp, unsigned char* data, int data_len, uint64_t pts, int type) {
GstBuffer *buffer;
assert(data_len != 0);
buffer = gst_buffer_new_and_alloc(data_len);
assert(buffer != NULL);
GST_BUFFER_DTS(buffer) = (GstClockTime)pts;
gst_buffer_fill(buffer, 0, data, data_len);
gst_app_src_push_buffer (GST_APP_SRC(renderer->appsrc), buffer);
/* first four bytes of valid video data are 0x0, 0x0, 0x0, 0x1 */
/* first byte of invalid data (decryption failed) is 0x1 */
if (data[0]) {
if (!broken_video) logger_log(logger, LOGGER_ERR, "*** ERROR decryption of video failed ");
broken_video = true;
} else {
broken_video = false;
buffer = gst_buffer_new_and_alloc(data_len);
assert(buffer != NULL);
GST_BUFFER_DTS(buffer) = (GstClockTime)pts;
gst_buffer_fill(buffer, 0, data, data_len);
gst_app_src_push_buffer (GST_APP_SRC(renderer->appsrc), buffer);
#ifdef X_DISPLAY_FIX
if(renderer->gst_window && !(renderer->gst_window->window)) {
fix_x_window_name(renderer->gst_window, renderer->server_name);
}
if (renderer->gst_window && !(renderer->gst_window->window)) {
fix_x_window_name(renderer->gst_window, renderer->server_name);
}
#endif
}
}
void video_renderer_flush(video_renderer_t *renderer) {
}