Hello all,
I have been trying to output video (from my webcam) simultaneously to both a
file ('out.mkv') and pipe: The file gets filtered frames packets, and the pipe:
gets ufiltered rawvideo.My frame rate is 30 fps. However, I am getting a far
lower framerate in my file output.
Attached is the while loop which reads packets and writes them to output:
while (1) { av_read_frame(ifmt_ctx, packet); stream_index =
packet->stream_index; StreamContext *stream =
&file_stream_ctx[stream_index]; av_packet_rescale_ts(packet,
ifmt_ctx->streams[stream_index]->time_base,
stream->dec_ctx->time_base); avcodec_send_packet(stream->dec_ctx, packet);
while (ret >= 0) { avcodec_receive_frame(stream->dec_ctx,
stream->dec_frame); stream->dec_frame->pts =
stream->dec_frame->best_effort_timestamp; ret =
filter_encode_write_frame(stream->dec_frame, stream_index, file_stream_ctx,
file_filter_ctx, file_ofmt_ctx);
ret = av_interleaved_write_frame(pipe_ofmt_ctx, packet); }}
'ifmt_ctx' is the AVFormatContext for the webcam.'file_ofmt_ctx', is the
AVFormatContext for the pipe for the output file, and pipe_ofmt_ctx is the
AVFormatContext.'file_stream_ctx' and 'file_filter_ctx' are the stream and
filter contexts used for filtering and encoding the file output.
My guess is that writing to the pipe is taking too long and not allowing the
next packet to be read on time - causing a lower frame rate. Does that make
sense? If so - any suggestions on how to fix it? (I tried using
AVFMT_FLAG_NONBLOCK but it doesn't seem to help).
Thanks
Hillel
_______________________________________________
Libav-user mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/libav-user
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".