|
|
@@ -247,8 +247,6 @@ static short *samples; |
|
|
|
static AVBitStreamFilterContext *video_bitstream_filters=NULL; |
|
|
|
static AVBitStreamFilterContext *audio_bitstream_filters=NULL; |
|
|
|
static AVBitStreamFilterContext *subtitle_bitstream_filters=NULL; |
|
|
|
static AVBitStreamFilterContext **bitstream_filters[MAX_FILES] = {NULL}; |
|
|
|
static int nb_bitstream_filters[MAX_FILES] = {0}; |
|
|
|
|
|
|
|
#define DEFAULT_PASS_LOGFILENAME_PREFIX "ffmpeg2pass" |
|
|
|
|
|
|
@@ -266,6 +264,7 @@ typedef struct AVOutputStream { |
|
|
|
//double sync_ipts; /* dts from the AVPacket of the demuxer in second units */ |
|
|
|
struct AVInputStream *sync_ist; /* input stream to sync against */ |
|
|
|
int64_t sync_opts; /* output frame counter, could be changed to some true timestamp */ //FIXME look at frame_number |
|
|
|
AVBitStreamFilterContext *bitstream_filters; |
|
|
|
/* video only */ |
|
|
|
int video_resample; |
|
|
|
AVFrame pict_tmp; /* temporary image for resampling */ |
|
|
@@ -572,7 +571,6 @@ static int ffmpeg_exit(int ret) |
|
|
|
} |
|
|
|
av_metadata_free(&s->metadata); |
|
|
|
av_free(s); |
|
|
|
av_free(bitstream_filters[i]); |
|
|
|
av_free(output_streams_for_file[i]); |
|
|
|
} |
|
|
|
for(i=0;i<nb_input_files;i++) { |
|
|
@@ -967,7 +965,7 @@ need_realloc: |
|
|
|
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.flags |= AV_PKT_FLAG_KEY; |
|
|
|
write_frame(s, &pkt, enc, bitstream_filters[ost->file_index][pkt.stream_index]); |
|
|
|
write_frame(s, &pkt, enc, ost->bitstream_filters); |
|
|
|
|
|
|
|
ost->sync_opts += enc->frame_size; |
|
|
|
} |
|
|
@@ -1002,7 +1000,7 @@ need_realloc: |
|
|
|
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.flags |= AV_PKT_FLAG_KEY; |
|
|
|
write_frame(s, &pkt, enc, bitstream_filters[ost->file_index][pkt.stream_index]); |
|
|
|
write_frame(s, &pkt, enc, ost->bitstream_filters); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -1107,7 +1105,7 @@ static void do_subtitle_out(AVFormatContext *s, |
|
|
|
else |
|
|
|
pkt.pts += 90 * sub->end_display_time; |
|
|
|
} |
|
|
|
write_frame(s, &pkt, ost->st->codec, bitstream_filters[ost->file_index][pkt.stream_index]); |
|
|
|
write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@@ -1267,7 +1265,7 @@ static void do_video_out(AVFormatContext *s, |
|
|
|
pkt.pts= av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); |
|
|
|
pkt.flags |= AV_PKT_FLAG_KEY; |
|
|
|
|
|
|
|
write_frame(s, &pkt, ost->st->codec, bitstream_filters[ost->file_index][pkt.stream_index]); |
|
|
|
write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); |
|
|
|
enc->coded_frame = old_frame; |
|
|
|
} else { |
|
|
|
AVFrame big_picture; |
|
|
@@ -1311,7 +1309,7 @@ static void do_video_out(AVFormatContext *s, |
|
|
|
|
|
|
|
if(enc->coded_frame->key_frame) |
|
|
|
pkt.flags |= AV_PKT_FLAG_KEY; |
|
|
|
write_frame(s, &pkt, ost->st->codec, bitstream_filters[ost->file_index][pkt.stream_index]); |
|
|
|
write_frame(s, &pkt, ost->st->codec, ost->bitstream_filters); |
|
|
|
*frame_size = ret; |
|
|
|
video_size += ret; |
|
|
|
//fprintf(stderr,"\nFrame: %3d size: %5d type: %d", |
|
|
@@ -1766,7 +1764,7 @@ static int output_packet(AVInputStream *ist, int ist_index, |
|
|
|
opkt.size = data_size; |
|
|
|
} |
|
|
|
|
|
|
|
write_frame(os, &opkt, ost->st->codec, bitstream_filters[ost->file_index][opkt.stream_index]); |
|
|
|
write_frame(os, &opkt, ost->st->codec, ost->bitstream_filters); |
|
|
|
ost->st->codec->frame_number++; |
|
|
|
ost->frame_number++; |
|
|
|
av_free_packet(&opkt); |
|
|
@@ -1875,7 +1873,7 @@ static int output_packet(AVInputStream *ist, int ist_index, |
|
|
|
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); |
|
|
|
write_frame(os, &pkt, ost->st->codec, bitstream_filters[ost->file_index][pkt.stream_index]); |
|
|
|
write_frame(os, &pkt, ost->st->codec, ost->bitstream_filters); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@@ -3401,11 +3399,7 @@ static void new_video_stream(AVFormatContext *oc, int file_idx) |
|
|
|
} |
|
|
|
|
|
|
|
avcodec_get_context_defaults3(st->codec, codec); |
|
|
|
bitstream_filters[file_idx] = |
|
|
|
grow_array(bitstream_filters[file_idx], |
|
|
|
sizeof(*bitstream_filters[file_idx]), |
|
|
|
&nb_bitstream_filters[file_idx], oc->nb_streams); |
|
|
|
bitstream_filters[file_idx][oc->nb_streams - 1]= video_bitstream_filters; |
|
|
|
ost->bitstream_filters = video_bitstream_filters; |
|
|
|
video_bitstream_filters= NULL; |
|
|
|
|
|
|
|
avcodec_thread_init(st->codec, thread_count); |
|
|
@@ -3548,11 +3542,7 @@ static void new_audio_stream(AVFormatContext *oc, int file_idx) |
|
|
|
|
|
|
|
avcodec_get_context_defaults3(st->codec, codec); |
|
|
|
|
|
|
|
bitstream_filters[file_idx] = |
|
|
|
grow_array(bitstream_filters[file_idx], |
|
|
|
sizeof(*bitstream_filters[file_idx]), |
|
|
|
&nb_bitstream_filters[file_idx], oc->nb_streams); |
|
|
|
bitstream_filters[file_idx][oc->nb_streams - 1]= audio_bitstream_filters; |
|
|
|
ost->bitstream_filters = audio_bitstream_filters; |
|
|
|
audio_bitstream_filters= NULL; |
|
|
|
|
|
|
|
avcodec_thread_init(st->codec, thread_count); |
|
|
@@ -3622,11 +3612,7 @@ static void new_subtitle_stream(AVFormatContext *oc, int file_idx) |
|
|
|
} |
|
|
|
avcodec_get_context_defaults3(st->codec, codec); |
|
|
|
|
|
|
|
bitstream_filters[file_idx] = |
|
|
|
grow_array(bitstream_filters[file_idx], |
|
|
|
sizeof(*bitstream_filters[file_idx]), |
|
|
|
&nb_bitstream_filters[file_idx], oc->nb_streams); |
|
|
|
bitstream_filters[file_idx][oc->nb_streams - 1]= subtitle_bitstream_filters; |
|
|
|
ost->bitstream_filters = subtitle_bitstream_filters; |
|
|
|
subtitle_bitstream_filters= NULL; |
|
|
|
|
|
|
|
subtitle_enc->codec_type = AVMEDIA_TYPE_SUBTITLE; |
|
|
|