<html><head></head><body><div class="yahoo-style-wrap" style="font-family:Helvetica Neue, Helvetica, Arial, sans-serif;font-size:16px;"><div dir="ltr" data-setdir="false">Hello all, </div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">I have been trying to output video (from my webcam) simultaneously to both a file ('out.mkv') and pipe: </div><div dir="ltr" data-setdir="false">The file gets filtered frames packets, and the pipe: gets ufiltered rawvideo.</div><div dir="ltr" data-setdir="false">My frame rate is 30 fps. However, I am getting a far lower framerate in my file output.</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Attached is the while loop which reads packets and writes them to output:</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div>while (1) {</div><div> av_read_frame(ifmt_ctx, packet);</div><div> stream_index = packet->stream_index;</div><div> </div><div> StreamContext *stream = &file_stream_ctx[stream_index];</div><div> </div><div> av_packet_rescale_ts(packet,</div><div> ifmt_ctx->streams[stream_index]->time_base,</div><div> stream->dec_ctx->time_base);</div><div> avcodec_send_packet(stream->dec_ctx, packet);</div><div> </div><div> while (ret >= 0) {</div><div> avcodec_receive_frame(stream->dec_ctx, stream->dec_frame);</div><div> </div><div> stream->dec_frame->pts = stream->dec_frame->best_effort_timestamp;</div><div> ret = filter_encode_write_frame(stream->dec_frame, stream_index, file_stream_ctx,</div><div> file_filter_ctx, file_ofmt_ctx);</div><div> ret = av_interleaved_write_frame(pipe_ofmt_ctx, packet);</div><div> }</div><div dir="ltr" data-setdir="false">}</div></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false"><div><div dir="ltr" data-setdir="false">'ifmt_ctx' is the AVFormatContext for the webcam.</div><div dir="ltr" data-setdir="false">'file_ofmt_ctx', is the AVFormatContext for the pipe for the output file, and pipe_ofmt_ctx is the AVFormatContext.</div><div dir="ltr" data-setdir="false">'file_stream_ctx' and 'file_filter_ctx' are the stream and filter contexts used for filtering and encoding the file output.</div><div dir="ltr" data-setdir="false"><br></div></div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">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).</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Thanks</div><div dir="ltr" data-setdir="false"><br></div><div dir="ltr" data-setdir="false">Hillel</div></div></div></div></body></html>