Skip to content

Commit

Permalink
tmp
Browse files Browse the repository at this point in the history
  • Loading branch information
MartinPulec committed Sep 4, 2023
1 parent ba3cead commit 22612cd
Showing 1 changed file with 27 additions and 19 deletions.
46 changes: 27 additions & 19 deletions src/video_display/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,6 @@ display_file_getf(void *state)
frame->format = get_ug_to_av_pixfmt(s->video_desc.color_spec);
frame->width = (int) s->video_desc.width;
frame->height = (int) s->video_desc.height;
frame->pts = s->video.cur_pts++;
int ret = av_frame_get_buffer(frame, 0);
if (ret < 0) {
error_msg(MOD_NAME "Could not allocate frame data: %s.\n",
Expand Down Expand Up @@ -322,6 +321,11 @@ initialize(struct state_file *s, struct video_desc *saved_vid_desc,
const struct video_frame *vid_frm, struct audio_desc *saved_aud_desc,
const AVFrame *aud_frm)
{
if (!vid_frm || (s->audio.st != NULL && !aud_frm)) {
log_msg(LOG_LEVEL_INFO, "Waiting for all streams to init.\n");
return false;
}

const struct video_desc vid_desc = video_desc_from_frame(vid_frm);

// video
Expand Down Expand Up @@ -376,29 +380,32 @@ initialize(struct state_file *s, struct video_desc *saved_vid_desc,
}

static void
write_video_frame(struct state_file *s, AVFrame *frame)
write_frame(AVFormatContext *format_ctx, struct output_stream *ost,
AVFrame *frame)
{
int ret = avcodec_send_frame(s->video.enc, frame);
frame->pts = ost->cur_pts;
int ret = avcodec_send_frame(ost->enc, frame);
if (ret < 0) {
error_msg(MOD_NAME "avcodec_send_frame: %s\n", av_err2str(ret));
error_msg(MOD_NAME "avcodec_send_frame: %s\n",
av_err2str(ret));
return;
}
while (ret >= 0) {
ret = avcodec_receive_packet(s->video.enc, s->video.pkt);
ret = avcodec_receive_packet(ost->enc, ost->pkt);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
error_msg(MOD_NAME "avcodec_receive_frame: %s\n",
error_msg(MOD_NAME "video avcodec_receive_frame: %s\n",
av_err2str(ret));
return;
}
av_packet_rescale_ts(s->video.pkt, s->video.enc->time_base,
s->video.st->time_base);
s->video.pkt->stream_index = s->video.st->index;
ret = av_interleaved_write_frame(s->format_ctx, s->video.pkt);
av_packet_rescale_ts(ost->pkt, ost->enc->time_base,
ost->st->time_base);
ost->pkt->stream_index = ost->st->index;
ret = av_interleaved_write_frame(format_ctx, ost->pkt);
if (ret < 0) {
error_msg(MOD_NAME "error writting packet: %s\n",
error_msg(MOD_NAME "error writting video packet: %s\n",
av_err2str(ret));
}
}
Expand Down Expand Up @@ -458,15 +465,8 @@ worker(void *arg)
pthread_mutex_unlock(&s->lock);

if (!s->initialized) {
if (!vid_frm || (s->audio.st != NULL && !aud_frm)) {
log_msg(
LOG_LEVEL_INFO,
"Waiting for all streams to init.\n");
continue;
}
if (!initialize(s, &saved_vid_desc, vid_frm,
&saved_aud_desc, aud_frm)) {
exit_uv(1);
continue;
}
}
Expand All @@ -479,10 +479,18 @@ worker(void *arg)
}

if (vid_frm) {
write_video_frame(s, vid_frm->callbacks.dispose_udata);
AVFrame *frame = vid_frm->callbacks.dispose_udata;
write_frame(s->format_ctx, &s->video, frame);
s->video.cur_pts += 1;
vf_free(vid_frm);
vid_frm = NULL;
}
if (aud_frm) {
write_frame(s->format_ctx, &s->audio,
aud_frm);
s->audio.cur_pts += aud_frm->nb_samples;
av_frame_free(&aud_frm);
}
}
vf_free(vid_frm);

Expand Down

0 comments on commit 22612cd

Please sign in to comment.