| @@ -855,8 +855,10 @@ get_sync_ipts(const OutputStream *ost) | |||||
| return (double)(ist->pts - of->start_time) / AV_TIME_BASE; | return (double)(ist->pts - of->start_time) / AV_TIME_BASE; | ||||
| } | } | ||||
| static void write_frame(AVFormatContext *s, AVPacket *pkt, AVCodecContext *avctx, AVBitStreamFilterContext *bsfc) | |||||
| static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost) | |||||
| { | { | ||||
| AVBitStreamFilterContext *bsfc = ost->bitstream_filters; | |||||
| AVCodecContext *avctx = ost->st->codec; | |||||
| int ret; | int ret; | ||||
| while (bsfc) { | while (bsfc) { | ||||
| @@ -886,6 +888,7 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, AVCodecContext *avctx | |||||
| print_error("av_interleaved_write_frame()", ret); | print_error("av_interleaved_write_frame()", ret); | ||||
| exit_program(1); | exit_program(1); | ||||
| } | } | ||||
| ost->frame_number++; | |||||
| } | } | ||||
| static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size) | static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size) | ||||
| @@ -1100,7 +1103,7 @@ need_realloc: | |||||
| if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) | if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) | ||||
| pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | ||||
| pkt.flags |= AV_PKT_FLAG_KEY; | pkt.flags |= AV_PKT_FLAG_KEY; | ||||
| write_frame(s, &pkt, enc, ost->bitstream_filters); | |||||
| write_frame(s, &pkt, ost); | |||||
| ost->sync_opts += enc->frame_size; | ost->sync_opts += enc->frame_size; | ||||
| } | } | ||||
| @@ -1135,7 +1138,7 @@ need_realloc: | |||||
| if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) | if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) | ||||
| pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | ||||
| pkt.flags |= AV_PKT_FLAG_KEY; | pkt.flags |= AV_PKT_FLAG_KEY; | ||||
| write_frame(s, &pkt, enc, ost->bitstream_filters); | |||||
| write_frame(s, &pkt, ost); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1237,7 +1240,7 @@ static void do_subtitle_out(AVFormatContext *s, | |||||
| else | else | ||||
| pkt.pts += 90 * sub->end_display_time; | pkt.pts += 90 * sub->end_display_time; | ||||
| } | } | ||||
| write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); | |||||
| write_frame(s, &pkt, ost); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1378,7 +1381,7 @@ static void do_video_out(AVFormatContext *s, | |||||
| pkt.pts = av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); | pkt.pts = av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); | ||||
| pkt.flags |= AV_PKT_FLAG_KEY; | pkt.flags |= AV_PKT_FLAG_KEY; | ||||
| write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); | |||||
| write_frame(s, &pkt, ost); | |||||
| } else { | } else { | ||||
| AVFrame big_picture; | AVFrame big_picture; | ||||
| @@ -1426,7 +1429,7 @@ static void do_video_out(AVFormatContext *s, | |||||
| if (enc->coded_frame->key_frame) | if (enc->coded_frame->key_frame) | ||||
| pkt.flags |= AV_PKT_FLAG_KEY; | pkt.flags |= AV_PKT_FLAG_KEY; | ||||
| write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); | |||||
| write_frame(s, &pkt, ost); | |||||
| *frame_size = ret; | *frame_size = ret; | ||||
| video_size += ret; | video_size += ret; | ||||
| // fprintf(stderr,"\nFrame: %3d size: %5d type: %d", | // fprintf(stderr,"\nFrame: %3d size: %5d type: %d", | ||||
| @@ -1438,7 +1441,6 @@ static void do_video_out(AVFormatContext *s, | |||||
| } | } | ||||
| } | } | ||||
| ost->sync_opts++; | ost->sync_opts++; | ||||
| ost->frame_number++; | |||||
| } | } | ||||
| } | } | ||||
| @@ -1687,7 +1689,7 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams) | |||||
| pkt.size = ret; | pkt.size = ret; | ||||
| if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) | if (enc->coded_frame && enc->coded_frame->pts != AV_NOPTS_VALUE) | ||||
| pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | ||||
| write_frame(os, &pkt, ost->st->codec, ost->bitstream_filters); | |||||
| write_frame(os, &pkt, ost); | |||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| @@ -1763,9 +1765,8 @@ static void do_streamcopy(InputStream *ist, OutputStream *ost, const AVPacket *p | |||||
| opkt.size = pkt->size; | opkt.size = pkt->size; | ||||
| } | } | ||||
| write_frame(of->ctx, &opkt, ost->st->codec, ost->bitstream_filters); | |||||
| write_frame(of->ctx, &opkt, ost); | |||||
| ost->st->codec->frame_number++; | ost->st->codec->frame_number++; | ||||
| ost->frame_number++; | |||||
| av_free_packet(&opkt); | av_free_packet(&opkt); | ||||
| } | } | ||||