| @@ -1292,9 +1292,6 @@ static void do_subtitle_out(AVFormatContext *s, | |||
| } | |||
| } | |||
| static int bit_buffer_size = 1024 * 256; | |||
| static uint8_t *bit_buffer = NULL; | |||
| #if !CONFIG_AVFILTER | |||
| static void do_video_resample(OutputStream *ost, | |||
| InputStream *ist, | |||
| @@ -1412,6 +1409,8 @@ static void do_video_out(AVFormatContext *s, | |||
| for (i = 0; i < nb_frames; i++) { | |||
| AVPacket pkt; | |||
| av_init_packet(&pkt); | |||
| pkt.data = NULL; | |||
| pkt.size = 0; | |||
| if (!check_recording_time(ost)) | |||
| return; | |||
| @@ -1430,6 +1429,7 @@ static void do_video_out(AVFormatContext *s, | |||
| write_frame(s, &pkt, ost); | |||
| } else { | |||
| int got_packet; | |||
| AVFrame big_picture; | |||
| big_picture = *final_picture; | |||
| @@ -1454,22 +1454,18 @@ static void do_video_out(AVFormatContext *s, | |||
| big_picture.pict_type = AV_PICTURE_TYPE_I; | |||
| ost->forced_kf_index++; | |||
| } | |||
| ret = avcodec_encode_video(enc, | |||
| bit_buffer, bit_buffer_size, | |||
| &big_picture); | |||
| ret = avcodec_encode_video2(enc, &pkt, &big_picture, &got_packet); | |||
| if (ret < 0) { | |||
| av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n"); | |||
| exit_program(1); | |||
| } | |||
| if (ret > 0) { | |||
| pkt.data = bit_buffer; | |||
| pkt.size = ret; | |||
| if (enc->coded_frame->pts != AV_NOPTS_VALUE) | |||
| pkt.pts = av_rescale_q(enc->coded_frame->pts, enc->time_base, ost->st->time_base); | |||
| if (got_packet) { | |||
| if (pkt.pts != AV_NOPTS_VALUE) | |||
| pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base); | |||
| if (pkt.dts != AV_NOPTS_VALUE) | |||
| pkt.dts = av_rescale_q(pkt.dts, enc->time_base, ost->st->time_base); | |||
| if (enc->coded_frame->key_frame) | |||
| pkt.flags |= AV_PKT_FLAG_KEY; | |||
| write_frame(s, &pkt, ost); | |||
| *frame_size = ret; | |||
| video_size += ret; | |||
| @@ -1675,7 +1671,7 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams) | |||
| for (;;) { | |||
| AVPacket pkt; | |||
| int fifo_bytes; | |||
| int fifo_bytes, got_packet; | |||
| av_init_packet(&pkt); | |||
| pkt.data = NULL; | |||
| pkt.size = 0; | |||
| @@ -1708,25 +1704,23 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams) | |||
| } | |||
| break; | |||
| case AVMEDIA_TYPE_VIDEO: | |||
| ret = avcodec_encode_video(enc, bit_buffer, bit_buffer_size, NULL); | |||
| ret = avcodec_encode_video2(enc, &pkt, NULL, &got_packet); | |||
| if (ret < 0) { | |||
| av_log(NULL, AV_LOG_FATAL, "Video encoding failed\n"); | |||
| exit_program(1); | |||
| } | |||
| video_size += ret; | |||
| if (enc->coded_frame && enc->coded_frame->key_frame) | |||
| pkt.flags |= AV_PKT_FLAG_KEY; | |||
| if (ost->logfile && enc->stats_out) { | |||
| fprintf(ost->logfile, "%s", enc->stats_out); | |||
| } | |||
| if (ret <= 0) { | |||
| if (!got_packet) { | |||
| stop_encoding = 1; | |||
| break; | |||
| } | |||
| pkt.data = bit_buffer; | |||
| pkt.size = ret; | |||
| 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); | |||
| if (pkt.pts != AV_NOPTS_VALUE) | |||
| pkt.pts = av_rescale_q(pkt.pts, enc->time_base, ost->st->time_base); | |||
| if (pkt.dts != AV_NOPTS_VALUE) | |||
| pkt.dts = av_rescale_q(pkt.dts, enc->time_base, ost->st->time_base); | |||
| write_frame(os, &pkt, ost); | |||
| break; | |||
| default: | |||
| @@ -2497,18 +2491,6 @@ static int transcode_init(OutputFile *output_files, | |||
| } | |||
| } | |||
| } | |||
| if (codec->codec_type == AVMEDIA_TYPE_VIDEO) { | |||
| int size = codec->width * codec->height; | |||
| bit_buffer_size = FFMAX(bit_buffer_size, 6 * size + 200); | |||
| } | |||
| } | |||
| if (!bit_buffer) | |||
| bit_buffer = av_malloc(bit_buffer_size); | |||
| if (!bit_buffer) { | |||
| av_log(NULL, AV_LOG_ERROR, "Cannot allocate %d bytes output buffer\n", | |||
| bit_buffer_size); | |||
| return AVERROR(ENOMEM); | |||
| } | |||
| /* open each encoder */ | |||
| @@ -2841,7 +2823,6 @@ static int transcode(OutputFile *output_files, | |||
| ret = 0; | |||
| fail: | |||
| av_freep(&bit_buffer); | |||
| av_freep(&no_packet); | |||
| if (output_streams) { | |||