|
|
|
@ -779,6 +779,14 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, AVCodecContext *avctx |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size) |
|
|
|
|
{ |
|
|
|
|
int fill_char = 0x00; |
|
|
|
|
if (sample_fmt == AV_SAMPLE_FMT_U8) |
|
|
|
|
fill_char = 0x80; |
|
|
|
|
memset(buf, fill_char, size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_audio_out(AVFormatContext *s, |
|
|
|
|
OutputStream *ost, |
|
|
|
|
InputStream *ist, |
|
|
|
@ -879,9 +887,9 @@ need_realloc: |
|
|
|
|
|
|
|
|
|
if(audio_sync_method){ |
|
|
|
|
double delta = get_sync_ipts(ost) * enc->sample_rate - ost->sync_opts |
|
|
|
|
- av_fifo_size(ost->fifo)/(enc->channels * 2); |
|
|
|
|
double idelta= delta*dec->sample_rate / enc->sample_rate; |
|
|
|
|
int byte_delta= ((int)idelta)*2*dec->channels; |
|
|
|
|
- av_fifo_size(ost->fifo)/(enc->channels * osize); |
|
|
|
|
int idelta = delta * dec->sample_rate / enc->sample_rate; |
|
|
|
|
int byte_delta = idelta * isize * dec->channels; |
|
|
|
|
|
|
|
|
|
//FIXME resample delay
|
|
|
|
|
if(fabs(delta) > 50){ |
|
|
|
@ -890,7 +898,8 @@ need_realloc: |
|
|
|
|
byte_delta= FFMAX(byte_delta, -size); |
|
|
|
|
size += byte_delta; |
|
|
|
|
buf -= byte_delta; |
|
|
|
|
av_log(NULL, AV_LOG_VERBOSE, "discarding %d audio samples\n", (int)-delta); |
|
|
|
|
av_log(NULL, AV_LOG_VERBOSE, "discarding %d audio samples\n", |
|
|
|
|
-byte_delta / (isize * dec->channels)); |
|
|
|
|
if(!size) |
|
|
|
|
return; |
|
|
|
|
ist->is_start=0; |
|
|
|
@ -904,11 +913,11 @@ need_realloc: |
|
|
|
|
} |
|
|
|
|
ist->is_start=0; |
|
|
|
|
|
|
|
|
|
memset(input_tmp, 0, byte_delta); |
|
|
|
|
generate_silence(input_tmp, dec->sample_fmt, byte_delta); |
|
|
|
|
memcpy(input_tmp + byte_delta, buf, size); |
|
|
|
|
buf= input_tmp; |
|
|
|
|
size += byte_delta; |
|
|
|
|
av_log(NULL, AV_LOG_VERBOSE, "adding %d audio samples of silence\n", (int)delta); |
|
|
|
|
av_log(NULL, AV_LOG_VERBOSE, "adding %d audio samples of silence\n", idelta); |
|
|
|
|
} |
|
|
|
|
}else if(audio_sync_method>1){ |
|
|
|
|
int comp= av_clip(delta, -audio_sync_method, audio_sync_method); |
|
|
|
@ -921,7 +930,7 @@ need_realloc: |
|
|
|
|
} |
|
|
|
|
}else |
|
|
|
|
ost->sync_opts= lrintf(get_sync_ipts(ost) * enc->sample_rate) |
|
|
|
|
- av_fifo_size(ost->fifo)/(enc->channels * 2); //FIXME wrong
|
|
|
|
|
- av_fifo_size(ost->fifo)/(enc->channels * osize); //FIXME wrong
|
|
|
|
|
|
|
|
|
|
if (ost->audio_resample) { |
|
|
|
|
buftmp = audio_buf; |
|
|
|
@ -1505,14 +1514,6 @@ static void print_report(OutputFile *output_files, |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void generate_silence(uint8_t* buf, enum AVSampleFormat sample_fmt, size_t size) |
|
|
|
|
{ |
|
|
|
|
int fill_char = 0x00; |
|
|
|
|
if (sample_fmt == AV_SAMPLE_FMT_U8) |
|
|
|
|
fill_char = 0x80; |
|
|
|
|
memset(buf, fill_char, size); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void flush_encoders(OutputStream *ost_table, int nb_ostreams) |
|
|
|
|
{ |
|
|
|
|
int i, ret; |
|
|
|
|