@ -145,7 +145,6 @@ static int audio_volume = 256;
static int exit_on_error = 0 ;
static int exit_on_error = 0 ;
static int using_stdin = 0 ;
static int using_stdin = 0 ;
static int verbose = 1 ;
static int run_as_daemon = 0 ;
static int run_as_daemon = 0 ;
static int q_pressed = 0 ;
static int q_pressed = 0 ;
static int64_t video_size = 0 ;
static int64_t video_size = 0 ;
@ -659,9 +658,8 @@ void exit_program(int ret)
av_freep ( & input_tmp ) ;
av_freep ( & input_tmp ) ;
if ( received_sigterm ) {
if ( received_sigterm ) {
fprintf ( stderr ,
av_log ( NULL , AV_LOG_INFO , " Received signal %d: terminating. \n " ,
" Received signal %d: terminating. \n " ,
( int ) received_sigterm ) ;
( int ) received_sigterm ) ;
exit ( 255 ) ;
exit ( 255 ) ;
}
}
@ -672,7 +670,7 @@ static void assert_avoptions(AVDictionary *m)
{
{
AVDictionaryEntry * t ;
AVDictionaryEntry * t ;
if ( ( t = av_dict_get ( m , " " , NULL , AV_DICT_IGNORE_SUFFIX ) ) ) {
if ( ( t = av_dict_get ( m , " " , NULL , AV_DICT_IGNORE_SUFFIX ) ) ) {
av_log ( NULL , AV_LOG_ERROR , " Option %s not found. \n " , t - > key ) ;
av_log ( NULL , AV_LOG_FATAL , " Option %s not found. \n " , t - > key ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
@ -683,12 +681,12 @@ static void assert_codec_experimental(AVCodecContext *c, int encoder)
AVCodec * codec ;
AVCodec * codec ;
if ( c - > codec - > capabilities & CODEC_CAP_EXPERIMENTAL & &
if ( c - > codec - > capabilities & CODEC_CAP_EXPERIMENTAL & &
c - > strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL ) {
c - > strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL ) {
av_log ( NULL , AV_LOG_ERROR , " %s '%s' is experimental and might produce bad "
av_log ( NULL , AV_LOG_FATAL , " %s '%s' is experimental and might produce bad "
" results. \n Add '-strict experimental' if you want to use it. \n " ,
" results. \n Add '-strict experimental' if you want to use it. \n " ,
codec_string , c - > codec - > name ) ;
codec_string , c - > codec - > name ) ;
codec = encoder ? avcodec_find_encoder ( c - > codec - > id ) : avcodec_find_decoder ( c - > codec - > id ) ;
codec = encoder ? avcodec_find_encoder ( c - > codec - > id ) : avcodec_find_decoder ( c - > codec - > id ) ;
if ( ! ( codec - > capabilities & CODEC_CAP_EXPERIMENTAL ) )
if ( ! ( codec - > capabilities & CODEC_CAP_EXPERIMENTAL ) )
av_log ( NULL , AV_LOG_ERROR , " Or use the non experimental %s '%s'. \n " ,
av_log ( NULL , AV_LOG_FATAL , " Or use the non experimental %s '%s'. \n " ,
codec_string , codec - > name ) ;
codec_string , codec - > name ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -784,9 +782,9 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, AVCodecContext *avctx
av_free_packet ( pkt ) ;
av_free_packet ( pkt ) ;
new_pkt . destruct = av_destruct_packet ;
new_pkt . destruct = av_destruct_packet ;
} else if ( a < 0 ) {
} else if ( a < 0 ) {
fprintf ( stderr , " %s failed for stream %d, codec %s " ,
av_log ( NULL , AV_LOG_ERROR , " %s failed for stream %d, codec %s " ,
bsfc - > filter - > name , pkt - > stream_index ,
bsfc - > filter - > name , pkt - > stream_index ,
avctx - > codec ? avctx - > codec - > name : " copy " ) ;
avctx - > codec ? avctx - > codec - > name : " copy " ) ;
print_error ( " " , a ) ;
print_error ( " " , a ) ;
if ( exit_on_error )
if ( exit_on_error )
exit_program ( 1 ) ;
exit_program ( 1 ) ;
@ -832,14 +830,14 @@ need_realloc:
audio_out_size + = FF_MIN_BUFFER_SIZE ;
audio_out_size + = FF_MIN_BUFFER_SIZE ;
if ( audio_out_size > INT_MAX | | audio_buf_size > INT_MAX ) {
if ( audio_out_size > INT_MAX | | audio_buf_size > INT_MAX ) {
fprintf ( stderr , " Buffer sizes too large \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Buffer sizes too large \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
av_fast_malloc ( & audio_buf , & allocated_audio_buf_size , audio_buf_size ) ;
av_fast_malloc ( & audio_buf , & allocated_audio_buf_size , audio_buf_size ) ;
av_fast_malloc ( & audio_out , & allocated_audio_out_size , audio_out_size ) ;
av_fast_malloc ( & audio_out , & allocated_audio_out_size , audio_out_size ) ;
if ( ! audio_buf | | ! audio_out ) {
if ( ! audio_buf | | ! audio_out ) {
fprintf ( stderr , " Out of memory in do_audio_out \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Out of memory in do_audio_out \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -878,12 +876,12 @@ need_realloc:
av_set_int ( ost - > swr , " och " , enc - > channels ) ;
av_set_int ( ost - > swr , " och " , enc - > channels ) ;
if ( audio_sync_method > 1 ) av_set_int ( ost - > swr , " flags " , SWR_FLAG_RESAMPLE ) ;
if ( audio_sync_method > 1 ) av_set_int ( ost - > swr , " flags " , SWR_FLAG_RESAMPLE ) ;
if ( ost - > swr & & swr_init ( ost - > swr ) < 0 ) {
if ( ost - > swr & & swr_init ( ost - > swr ) < 0 ) {
fprintf ( stderr , " swr_init() failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " swr_init() failed \n " ) ;
swr_free ( & ost - > swr ) ;
swr_free ( & ost - > swr ) ;
}
}
if ( ! ost - > swr ) {
if ( ! ost - > swr ) {
fprintf ( stderr , " Can not resample %d channels @ %d Hz to %d channels @ %d Hz \n " ,
av_log ( NULL , AV_LOG_FATAL , " Can not resample %d channels @ %d Hz to %d channels @ %d Hz \n " ,
dec - > channels , dec - > sample_rate ,
dec - > channels , dec - > sample_rate ,
enc - > channels , enc - > sample_rate ) ;
enc - > channels , enc - > sample_rate ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
@ -906,8 +904,7 @@ need_realloc:
byte_delta = FFMAX ( byte_delta , - size ) ;
byte_delta = FFMAX ( byte_delta , - size ) ;
size + = byte_delta ;
size + = byte_delta ;
buf - = byte_delta ;
buf - = byte_delta ;
if ( verbose > 2 )
av_log ( NULL , AV_LOG_VERBOSE , " discarding %d audio samples \n " , ( int ) - delta ) ;
fprintf ( stderr , " discarding %d audio samples \n " , ( int ) - delta ) ;
if ( ! size )
if ( ! size )
return ;
return ;
ist - > is_start = 0 ;
ist - > is_start = 0 ;
@ -924,14 +921,13 @@ need_realloc:
memcpy ( input_tmp + byte_delta , buf , size ) ;
memcpy ( input_tmp + byte_delta , buf , size ) ;
buf = input_tmp ;
buf = input_tmp ;
size + = byte_delta ;
size + = byte_delta ;
if ( verbose > 2 )
av_log ( NULL , AV_LOG_VERBOSE , " adding %d audio samples of silence \n " , ( int ) delta ) ;
fprintf ( stderr , " adding %d audio samples of silence \n " , ( int ) delta ) ;
}
}
} else if ( audio_sync_method > 1 ) {
} else if ( audio_sync_method > 1 ) {
int comp = av_clip ( delta , - audio_sync_method , audio_sync_method ) ;
int comp = av_clip ( delta , - audio_sync_method , audio_sync_method ) ;
av_assert0 ( ost - > audio_resample ) ;
av_assert0 ( ost - > audio_resample ) ;
if ( verbose > 2 )
av_log ( NULL , AV_LOG_VERBOSE , " compensating audio timestamp drift:%f compensation:%d in:%d \n " ,
fprintf ( stderr , " compensating audio timestamp drift:%f compensation:%d in:%d \n " , delta , comp , enc - > sample_rate ) ;
delta , comp , enc - > sample_rate ) ;
// fprintf(stderr, "drift:%f len:%d opts:%"PRId64" ipts:%"PRId64" fifo:%d\n", delta, -1, ost->sync_opts, (int64_t)(get_sync_ipts(ost) * enc->sample_rate), av_fifo_size(ost->fifo)/(ost->st->codec->channels * 2));
// fprintf(stderr, "drift:%f len:%d opts:%"PRId64" ipts:%"PRId64" fifo:%d\n", delta, -1, ost->sync_opts, (int64_t)(get_sync_ipts(ost) * enc->sample_rate), av_fifo_size(ost->fifo)/(ost->st->codec->channels * 2));
swr_compensate ( ost - > swr , comp , enc - > sample_rate ) ;
swr_compensate ( ost - > swr , comp , enc - > sample_rate ) ;
}
}
@ -956,7 +952,7 @@ need_realloc:
if ( enc - > frame_size > 1 ) {
if ( enc - > frame_size > 1 ) {
/* output resampled raw samples */
/* output resampled raw samples */
if ( av_fifo_realloc2 ( ost - > fifo , av_fifo_size ( ost - > fifo ) + size_out ) < 0 ) {
if ( av_fifo_realloc2 ( ost - > fifo , av_fifo_size ( ost - > fifo ) + size_out ) < 0 ) {
fprintf ( stderr , " av_fifo_realloc2() failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " av_fifo_realloc2() failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
av_fifo_generic_write ( ost - > fifo , buftmp , size_out , NULL ) ;
av_fifo_generic_write ( ost - > fifo , buftmp , size_out , NULL ) ;
@ -974,7 +970,7 @@ need_realloc:
ret = avcodec_encode_audio ( enc , audio_out , audio_out_size ,
ret = avcodec_encode_audio ( enc , audio_out , audio_out_size ,
( short * ) audio_buf ) ;
( short * ) audio_buf ) ;
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " Audio encoding failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Audio encoding failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
audio_size + = ret ;
audio_size + = ret ;
@ -1001,7 +997,7 @@ need_realloc:
size_out = size_out * coded_bps / 8 ;
size_out = size_out * coded_bps / 8 ;
if ( size_out > audio_out_size ) {
if ( size_out > audio_out_size ) {
fprintf ( stderr , " Internal error, buffer size too small \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Internal error, buffer size too small \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -1009,7 +1005,7 @@ need_realloc:
ret = avcodec_encode_audio ( enc , audio_out , size_out ,
ret = avcodec_encode_audio ( enc , audio_out , size_out ,
( short * ) buftmp ) ;
( short * ) buftmp ) ;
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " Audio encoding failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Audio encoding failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
audio_size + = ret ;
audio_size + = ret ;
@ -1048,7 +1044,7 @@ static void pre_process_video_frame(InputStream *ist, AVPicture *picture, void *
if ( avpicture_deinterlace ( picture2 , picture ,
if ( avpicture_deinterlace ( picture2 , picture ,
dec - > pix_fmt , dec - > width , dec - > height ) < 0 ) {
dec - > pix_fmt , dec - > width , dec - > height ) < 0 ) {
/* if error, do not deinterlace */
/* if error, do not deinterlace */
fprintf ( stderr , " Deinterlacing failed \n " ) ;
av_log ( NULL , AV_LOG_WARNING , " Deinterlacing failed \n " ) ;
av_free ( buf ) ;
av_free ( buf ) ;
buf = NULL ;
buf = NULL ;
picture2 = picture ;
picture2 = picture ;
@ -1075,7 +1071,7 @@ static void do_subtitle_out(AVFormatContext *s,
AVPacket pkt ;
AVPacket pkt ;
if ( pts = = AV_NOPTS_VALUE ) {
if ( pts = = AV_NOPTS_VALUE ) {
fprintf ( stderr , " Subtitle packets must have a pts \n " ) ;
av_log ( NULL , AV_LOG_ERROR , " Subtitle packets must have a pts \n " ) ;
if ( exit_on_error )
if ( exit_on_error )
exit_program ( 1 ) ;
exit_program ( 1 ) ;
return ;
return ;
@ -1104,7 +1100,7 @@ static void do_subtitle_out(AVFormatContext *s,
subtitle_out_size = avcodec_encode_subtitle ( enc , subtitle_out ,
subtitle_out_size = avcodec_encode_subtitle ( enc , subtitle_out ,
subtitle_out_max_size , sub ) ;
subtitle_out_max_size , sub ) ;
if ( subtitle_out_size < 0 ) {
if ( subtitle_out_size < 0 ) {
fprintf ( stderr , " Subtitle encoding failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Subtitle encoding failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -1166,7 +1162,7 @@ static void do_video_resample(OutputStream *ost,
avcodec_get_frame_defaults ( & ost - > resample_frame ) ;
avcodec_get_frame_defaults ( & ost - > resample_frame ) ;
if ( avpicture_alloc ( ( AVPicture * ) & ost - > resample_frame , enc - > pix_fmt ,
if ( avpicture_alloc ( ( AVPicture * ) & ost - > resample_frame , enc - > pix_fmt ,
enc - > width , enc - > height ) ) {
enc - > width , enc - > height ) ) {
fprintf ( stderr , " Cannot allocate temp picture, check pix fmt \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Cannot allocate temp picture, check pix fmt \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
@ -1176,7 +1172,7 @@ static void do_video_resample(OutputStream *ost,
enc - > width , enc - > height , enc - > pix_fmt ,
enc - > width , enc - > height , enc - > pix_fmt ,
ost - > sws_flags , NULL , NULL , NULL ) ;
ost - > sws_flags , NULL , NULL , NULL ) ;
if ( ost - > img_resample_ctx = = NULL ) {
if ( ost - > img_resample_ctx = = NULL ) {
fprintf ( stderr , " Cannot get resampling context \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Cannot get resampling context \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
@ -1235,12 +1231,10 @@ static void do_video_out(AVFormatContext *s,
//fprintf(stderr, "vdelta:%f, ost->sync_opts:%"PRId64", ost->sync_ipts:%f nb_frames:%d\n", vdelta, ost->sync_opts, get_sync_ipts(ost), nb_frames);
//fprintf(stderr, "vdelta:%f, ost->sync_opts:%"PRId64", ost->sync_ipts:%f nb_frames:%d\n", vdelta, ost->sync_opts, get_sync_ipts(ost), nb_frames);
if ( nb_frames = = 0 ) {
if ( nb_frames = = 0 ) {
+ + nb_frames_drop ;
+ + nb_frames_drop ;
if ( verbose > 2 )
av_log ( NULL , AV_LOG_VERBOSE , " *** drop! \n " ) ;
fprintf ( stderr , " *** drop! \n " ) ;
} else if ( nb_frames > 1 ) {
} else if ( nb_frames > 1 ) {
nb_frames_dup + = nb_frames - 1 ;
nb_frames_dup + = nb_frames - 1 ;
if ( verbose > 2 )
av_log ( NULL , AV_LOG_VERBOSE , " *** %d dup! \n " , nb_frames - 1 ) ;
fprintf ( stderr , " *** %d dup! \n " , nb_frames - 1 ) ;
}
}
} else
} else
ost - > sync_opts = lrintf ( sync_ipts ) ;
ost - > sync_opts = lrintf ( sync_ipts ) ;
@ -1301,7 +1295,7 @@ static void do_video_out(AVFormatContext *s,
bit_buffer , bit_buffer_size ,
bit_buffer , bit_buffer_size ,
& big_picture ) ;
& big_picture ) ;
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " Video encoding failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Video encoding failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -1388,6 +1382,7 @@ static void print_report(OutputFile *output_files,
int64_t pts = INT64_MAX ;
int64_t pts = INT64_MAX ;
static int64_t last_time = - 1 ;
static int64_t last_time = - 1 ;
static int qp_histogram [ 52 ] ;
static int qp_histogram [ 52 ] ;
int hours , mins , secs , us ;
if ( ! is_last_report ) {
if ( ! is_last_report ) {
int64_t cur_time ;
int64_t cur_time ;
@ -1464,43 +1459,39 @@ static void print_report(OutputFile *output_files,
ost - > st - > time_base , AV_TIME_BASE_Q ) ) ;
ost - > st - > time_base , AV_TIME_BASE_Q ) ) ;
}
}
if ( verbose > 0 | | is_last_report ) {
secs = pts / AV_TIME_BASE ;
int hours , mins , secs , us ;
us = pts % AV_TIME_BASE ;
secs = pts / AV_TIME_BASE ;
mins = secs / 60 ;
us = pts % AV_TIME_BASE ;
secs % = 60 ;
mins = secs / 60 ;
hours = mins / 60 ;
secs % = 60 ;
mins % = 60 ;
hours = mins / 60 ;
mins % = 60 ;
bitrate = pts ? total_size * 8 / ( pts / 1000.0 ) : 0 ;
bitrate = pts ? total_size * 8 / ( pts / 1000.0 ) : 0 ;
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) ,
" size=%8.0fkB time= " , total_size / 1024.0 ) ;
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) ,
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) ,
" size=%8.0fkB time= " , total_size / 1024.0 ) ;
" %02d:%02d:%02d.%02d " , hours , mins , secs ,
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) ,
( 100 * us ) / AV_TIME_BASE ) ;
" %02d:%02d:%02d.%02d " , hours , mins , secs ,
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) ,
( 100 * us ) / AV_TIME_BASE ) ;
" bitrate=%6.1fkbits/s " , bitrate ) ;
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) ,
" bitrate=%6.1fkbits/s " , bitrate ) ;
if ( nb_frames_dup | | nb_frames_drop )
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) , " dup=%d drop=%d " ,
if ( nb_frames_dup | | nb_frames_drop )
nb_frames_dup , nb_frames_drop ) ;
snprintf ( buf + strlen ( buf ) , sizeof ( buf ) - strlen ( buf ) , " dup=%d drop=%d " ,
nb_frames_dup , nb_frames_drop ) ;
if ( verbose > = 0 )
fprintf ( stderr , " %s \r " , buf ) ;
fflush ( stderr ) ;
}
if ( is_last_report & & verbose > = 0 ) {
av_log ( NULL , is_last_report ? AV_LOG_WARNING : AV_LOG_INFO , " %s \r " , buf ) ;
fflush ( stderr ) ;
if ( is_last_report ) {
int64_t raw = audio_size + video_size + extra_size ;
int64_t raw = audio_size + video_size + extra_size ;
fprintf ( stderr , " \n " ) ;
av_log ( NULL , AV_LOG_INFO , " \n " ) ;
fprintf ( stderr , " video:%1.0fkB audio:%1.0fkB global headers:%1.0fkB muxing overhead %f%% \n " ,
av_log ( NULL , AV_LOG_INFO , " video:%1.0fkB audio:%1.0fkB global headers:%1.0fkB muxing overhead %f%% \n " ,
video_size / 1024.0 ,
video_size / 1024.0 ,
audio_size / 1024.0 ,
audio_size / 1024.0 ,
extra_size / 1024.0 ,
extra_size / 1024.0 ,
100.0 * ( total_size - raw ) / raw
100.0 * ( total_size - raw ) / raw
) ;
) ;
}
}
}
}
@ -1564,7 +1555,7 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams)
ret = avcodec_encode_audio ( enc , bit_buffer , bit_buffer_size , NULL ) ;
ret = avcodec_encode_audio ( enc , bit_buffer , bit_buffer_size , NULL ) ;
}
}
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " Audio encoding failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Audio encoding failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
audio_size + = ret ;
audio_size + = ret ;
@ -1573,7 +1564,7 @@ static void flush_encoders(OutputStream *ost_table, int nb_ostreams)
case AVMEDIA_TYPE_VIDEO :
case AVMEDIA_TYPE_VIDEO :
ret = avcodec_encode_video ( enc , bit_buffer , bit_buffer_size , NULL ) ;
ret = avcodec_encode_video ( enc , bit_buffer , bit_buffer_size , NULL ) ;
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " Video encoding failed \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Video encoding failed \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
video_size + = ret ;
video_size + = ret ;
@ -1645,11 +1636,10 @@ static int output_packet(InputStream *ist, int ist_index,
handle_eof :
handle_eof :
ist - > pts = ist - > next_pts ;
ist - > pts = ist - > next_pts ;
if ( avpkt . size & & avpkt . size ! = pkt - > size & &
if ( avpkt . size & & avpkt . size ! = pkt - > size )
( ( ! ist - > showed_multi_packet_warning & & verbose > 0 ) | | verbose > 1 ) ) {
av_log ( NULL , ist - > showed_multi_packet_warning ? AV_LOG_VERBOSE : AV_LOG_WARNING ,
fprintf ( stderr , " Multiple frames in a packet from stream %d \n " , pkt - > stream_index ) ;
" Multiple frames in a packet from stream %d \n " , pkt - > stream_index ) ;
ist - > showed_multi_packet_warning = 1 ;
ist - > showed_multi_packet_warning = 1 ;
}
/* decode the packet if needed */
/* decode the packet if needed */
decoded_data_buf = NULL ; /* fail safe */
decoded_data_buf = NULL ; /* fail safe */
@ -1995,7 +1985,7 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
os = output_files [ i ] . ctx ;
os = output_files [ i ] . ctx ;
if ( ! os - > nb_streams & & ! ( os - > oformat - > flags & AVFMT_NOSTREAMS ) ) {
if ( ! os - > nb_streams & & ! ( os - > oformat - > flags & AVFMT_NOSTREAMS ) ) {
av_dump_format ( os , i , os - > filename , 1 ) ;
av_dump_format ( os , i , os - > filename , 1 ) ;
fprintf ( stderr , " Output file #%d does not contain any stream \n " , i ) ;
av_log ( NULL , AV_LOG_ERROR , " Output file #%d does not contain any stream \n " , i ) ;
return AVERROR ( EINVAL ) ;
return AVERROR ( EINVAL ) ;
}
}
}
}
@ -2060,7 +2050,7 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
switch ( codec - > codec_type ) {
switch ( codec - > codec_type ) {
case AVMEDIA_TYPE_AUDIO :
case AVMEDIA_TYPE_AUDIO :
if ( audio_volume ! = 256 ) {
if ( audio_volume ! = 256 ) {
fprintf ( stderr , " -acodec copy and -vol are incompatible (frames are not decoded) \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " -acodec copy and -vol are incompatible (frames are not decoded) \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
codec - > channel_layout = icodec - > channel_layout ;
codec - > channel_layout = icodec - > channel_layout ;
@ -2135,7 +2125,7 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
choose_pixel_fmt ( ost - > st , ost - > enc ) ;
choose_pixel_fmt ( ost - > st , ost - > enc ) ;
if ( ost - > st - > codec - > pix_fmt = = PIX_FMT_NONE ) {
if ( ost - > st - > codec - > pix_fmt = = PIX_FMT_NONE ) {
fprintf ( stderr , " Video pixel format is unknown, stream cannot be encoded \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Video pixel format is unknown, stream cannot be encoded \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -2172,7 +2162,7 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
# if CONFIG_AVFILTER
# if CONFIG_AVFILTER
if ( configure_video_filters ( ist , ost ) ) {
if ( configure_video_filters ( ist , ost ) ) {
fprintf ( stderr , " Error opening filters! \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Error opening filters! \n " ) ;
exit ( 1 ) ;
exit ( 1 ) ;
}
}
# endif
# endif
@ -2197,7 +2187,8 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
if ( codec - > flags & CODEC_FLAG_PASS1 ) {
if ( codec - > flags & CODEC_FLAG_PASS1 ) {
f = fopen ( logfilename , " wb " ) ;
f = fopen ( logfilename , " wb " ) ;
if ( ! f ) {
if ( ! f ) {
fprintf ( stderr , " Cannot write log file '%s' for pass-1 encoding: %s \n " , logfilename , strerror ( errno ) ) ;
av_log ( NULL , AV_LOG_FATAL , " Cannot write log file '%s' for pass-1 encoding: %s \n " ,
logfilename , strerror ( errno ) ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
ost - > logfile = f ;
ost - > logfile = f ;
@ -2205,7 +2196,8 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
char * logbuffer ;
char * logbuffer ;
size_t logbuffer_size ;
size_t logbuffer_size ;
if ( read_file ( logfilename , & logbuffer , & logbuffer_size ) < 0 ) {
if ( read_file ( logfilename , & logbuffer , & logbuffer_size ) < 0 ) {
fprintf ( stderr , " Error reading log file '%s' for pass-2 encoding \n " , logfilename ) ;
av_log ( NULL , AV_LOG_FATAL , " Error reading log file '%s' for pass-2 encoding \n " ,
logfilename ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
codec - > stats_in = logbuffer ;
codec - > stats_in = logbuffer ;
@ -2222,8 +2214,8 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
if ( ! bit_buffer )
if ( ! bit_buffer )
bit_buffer = av_malloc ( bit_buffer_size ) ;
bit_buffer = av_malloc ( bit_buffer_size ) ;
if ( ! bit_buffer ) {
if ( ! bit_buffer ) {
fprintf ( stderr , " Cannot allocate %d bytes output buffer \n " ,
av_log ( NULL , AV_LOG_ERROR , " Cannot allocate %d bytes output buffer \n " ,
bit_buffer_size ) ;
bit_buffer_size ) ;
return AVERROR ( ENOMEM ) ;
return AVERROR ( ENOMEM ) ;
}
}
@ -2309,31 +2301,29 @@ static int transcode_init(OutputFile *output_files, int nb_output_files,
}
}
/* dump the stream mapping */
/* dump the stream mapping */
if ( verbose > = 0 ) {
av_log ( NULL , AV_LOG_INFO , " Stream mapping: \n " ) ;
fprintf ( stderr , " Stream mapping: \n " ) ;
for ( i = 0 ; i < nb_output_streams ; i + + ) {
for ( i = 0 ; i < nb_output_streams ; i + + ) {
ost = & output_streams [ i ] ;
ost = & output_streams [ i ] ;
av_log ( NULL , AV_LOG_INFO , " Stream #%d.%d -> #%d.%d " ,
fprintf ( stderr , " Stream #%d.%d -> #%d.%d " ,
input_streams [ ost - > source_index ] . file_index ,
input_streams [ ost - > source_index ] . file_index ,
input_streams [ ost - > source_index ] . st - > index ,
input_streams [ ost - > source_index ] . st - > index ,
ost - > file_index ,
ost - > file_index ,
ost - > index ) ;
ost - > index ) ;
if ( ost - > sync_ist ! = & input_streams [ ost - > source_index ] )
if ( ost - > sync_ist ! = & input_streams [ ost - > source_index ] )
av_log ( NULL , AV_LOG_INFO , " [sync #%d.%d] " ,
fprintf ( stderr , " [sync #%d.%d] " ,
ost - > sync_ist - > file_index ,
ost - > sync_ist - > file_index ,
ost - > sync_ist - > st - > index ) ;
ost - > sync_ist - > st - > index ) ;
if ( ost - > st - > stream_copy )
if ( ost - > st - > stream_copy )
av_log ( NULL , AV_LOG_INFO , " (copy) " ) ;
fprintf ( stderr , " (copy) " ) ;
else
else
av_log ( NULL , AV_LOG_INFO , " (%s -> %s) " , input_streams [ ost - > source_index ] . dec ?
fprintf ( stderr , " (%s -> %s) " , input_streams [ ost - > source_index ] . dec ?
input_streams [ ost - > source_index ] . dec - > name : " ? " ,
input_streams [ ost - > source_index ] . dec - > name : " ? " ,
ost - > enc ? ost - > enc - > name : " ? " ) ;
ost - > enc ? ost - > enc - > name : " ? " ) ;
av_log ( NULL , AV_LOG_INFO , " \n " ) ;
fprintf ( stderr , " \n " ) ;
}
}
}
if ( ret ) {
if ( ret ) {
fprintf ( stderr , " %s \n " , error ) ;
av_log ( NULL , AV_LOG_ERROR , " %s \n " , error ) ;
return ret ;
return ret ;
}
}
@ -2367,8 +2357,7 @@ static int transcode(OutputFile *output_files, int nb_output_files,
goto fail ;
goto fail ;
if ( ! using_stdin ) {
if ( ! using_stdin ) {
if ( verbose > = 0 )
av_log ( NULL , AV_LOG_INFO , " Press [q] to stop, [?] for help \n " ) ;
fprintf ( stderr , " Press [q] to stop, [?] for help \n " ) ;
avio_set_interrupt_cb ( decode_interrupt_cb ) ;
avio_set_interrupt_cb ( decode_interrupt_cb ) ;
}
}
term_init ( ) ;
term_init ( ) ;
@ -2391,8 +2380,8 @@ static int transcode(OutputFile *output_files, int nb_output_files,
key = read_key ( ) ;
key = read_key ( ) ;
if ( key = = ' q ' )
if ( key = = ' q ' )
break ;
break ;
if ( key = = ' + ' ) verbose + + ;
if ( key = = ' + ' ) av_log_set_level ( av_log_get_level ( ) + 10 ) ;
if ( key = = ' - ' ) verbose - - ;
if ( key = = ' - ' ) av_log_set_level ( av_log_get_level ( ) - 10 ) ;
if ( key = = ' s ' ) qp_hist ^ = 1 ;
if ( key = = ' s ' ) qp_hist ^ = 1 ;
if ( key = = ' h ' ) {
if ( key = = ' h ' ) {
if ( do_hex_dump ) {
if ( do_hex_dump ) {
@ -2566,9 +2555,8 @@ static int transcode(OutputFile *output_files, int nb_output_files,
ist - > st - > codec - > codec_type ! = AVMEDIA_TYPE_SUBTITLE ) | |
ist - > st - > codec - > codec_type ! = AVMEDIA_TYPE_SUBTITLE ) | |
pkt_dts + 1 < ist - > pts ) & & ! copy_ts ) {
pkt_dts + 1 < ist - > pts ) & & ! copy_ts ) {
input_files [ ist - > file_index ] . ts_offset - = delta ;
input_files [ ist - > file_index ] . ts_offset - = delta ;
if ( verbose > 2 )
av_log ( NULL , AV_LOG_DEBUG , " timestamp discontinuity % " PRId64 " , new offset= % " PRId64 " \n " ,
fprintf ( stderr , " timestamp discontinuity % " PRId64 " , new offset= % " PRId64 " \n " ,
delta , input_files [ ist - > file_index ] . ts_offset ) ;
delta , input_files [ ist - > file_index ] . ts_offset ) ;
pkt . dts - = av_rescale_q ( delta , AV_TIME_BASE_Q , ist - > st - > time_base ) ;
pkt . dts - = av_rescale_q ( delta , AV_TIME_BASE_Q , ist - > st - > time_base ) ;
if ( pkt . pts ! = AV_NOPTS_VALUE )
if ( pkt . pts ! = AV_NOPTS_VALUE )
pkt . pts - = av_rescale_q ( delta , AV_TIME_BASE_Q , ist - > st - > time_base ) ;
pkt . pts - = av_rescale_q ( delta , AV_TIME_BASE_Q , ist - > st - > time_base ) ;
@ -2578,9 +2566,8 @@ static int transcode(OutputFile *output_files, int nb_output_files,
//fprintf(stderr,"read #%d.%d size=%d\n", ist->file_index, ist->st->index, pkt.size);
//fprintf(stderr,"read #%d.%d size=%d\n", ist->file_index, ist->st->index, pkt.size);
if ( output_packet ( ist , ist_index , output_streams , nb_output_streams , & pkt ) < 0 ) {
if ( output_packet ( ist , ist_index , output_streams , nb_output_streams , & pkt ) < 0 ) {
if ( verbose > = 0 )
av_log ( NULL , AV_LOG_ERROR , " Error while decoding stream #%d.%d \n " ,
fprintf ( stderr , " Error while decoding stream #%d.%d \n " ,
ist - > file_index , ist - > st - > index ) ;
ist - > file_index , ist - > st - > index ) ;
if ( exit_on_error )
if ( exit_on_error )
exit_program ( 1 ) ;
exit_program ( 1 ) ;
av_free_packet ( & pkt ) ;
av_free_packet ( & pkt ) ;
@ -2668,19 +2655,19 @@ static int transcode(OutputFile *output_files, int nb_output_files,
static int opt_verbose ( const char * opt , const char * arg )
static int opt_verbose ( const char * opt , const char * arg )
{
{
verbose = parse_number_or_die ( opt , arg , OPT_INT64 , - 10 , 10 ) ;
av_log ( NULL , AV_LOG_WARNING , " -%s is deprecated, use -loglevel \n " , opt ) ;
return 0 ;
return 0 ;
}
}
static int opt_frame_crop ( const char * opt , const char * arg )
static int opt_frame_crop ( const char * opt , const char * arg )
{
{
fprintf ( stderr , " Option '%s' has been removed, use the crop filter instead \n " , opt ) ;
av_log ( NULL , AV_LOG_FATAL , " Option '%s' has been removed, use the crop filter instead \n " , opt ) ;
return AVERROR ( EINVAL ) ;
return AVERROR ( EINVAL ) ;
}
}
static int opt_pad ( const char * opt , const char * arg )
static int opt_pad ( const char * opt , const char * arg )
{
{
fprintf ( stderr , " Option '%s' has been removed, use the pad filter instead \n " , opt ) ;
av_log ( NULL , AV_LOG_FATAL , " Option '%s' has been removed, use the pad filter instead \n " , opt ) ;
return - 1 ;
return - 1 ;
}
}
@ -2702,7 +2689,7 @@ static double parse_frame_aspect_ratio(const char *arg)
ar = strtod ( arg , NULL ) ;
ar = strtod ( arg , NULL ) ;
if ( ! ar ) {
if ( ! ar ) {
fprintf ( stderr , " Incorrect aspect ratio specification. \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Incorrect aspect ratio specification. \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
return ar ;
return ar ;
@ -2762,7 +2749,7 @@ static int opt_map(OptionsContext *o, const char *opt, const char *arg)
* sync = 0 ;
* sync = 0 ;
sync_file_idx = strtol ( sync + 1 , & sync , 0 ) ;
sync_file_idx = strtol ( sync + 1 , & sync , 0 ) ;
if ( sync_file_idx > = nb_input_files | | sync_file_idx < 0 ) {
if ( sync_file_idx > = nb_input_files | | sync_file_idx < 0 ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid sync file index: %d. \n " , sync_file_idx ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid sync file index: %d. \n " , sync_file_idx ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
if ( * sync )
if ( * sync )
@ -2774,7 +2761,7 @@ static int opt_map(OptionsContext *o, const char *opt, const char *arg)
break ;
break ;
}
}
if ( i = = input_files [ sync_file_idx ] . nb_streams ) {
if ( i = = input_files [ sync_file_idx ] . nb_streams ) {
av_log ( NULL , AV_LOG_ERROR , " Sync stream specification in map %s does not "
av_log ( NULL , AV_LOG_FATAL , " Sync stream specification in map %s does not "
" match any streams. \n " , arg ) ;
" match any streams. \n " , arg ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -2783,7 +2770,7 @@ static int opt_map(OptionsContext *o, const char *opt, const char *arg)
file_idx = strtol ( map , & p , 0 ) ;
file_idx = strtol ( map , & p , 0 ) ;
if ( file_idx > = nb_input_files | | file_idx < 0 ) {
if ( file_idx > = nb_input_files | | file_idx < 0 ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid input file index: %d. \n " , file_idx ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid input file index: %d. \n " , file_idx ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
if ( negative )
if ( negative )
@ -2817,7 +2804,7 @@ static int opt_map(OptionsContext *o, const char *opt, const char *arg)
}
}
if ( ! m ) {
if ( ! m ) {
av_log ( NULL , AV_LOG_ERROR , " Stream map '%s' matches no streams. \n " , arg ) ;
av_log ( NULL , AV_LOG_FATAL , " Stream map '%s' matches no streams. \n " , arg ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -2839,7 +2826,7 @@ static void parse_meta_type(char *arg, char *type, int *index)
* index = strtol ( + + arg , NULL , 0 ) ;
* index = strtol ( + + arg , NULL , 0 ) ;
break ;
break ;
default :
default :
fprintf ( stderr , " Invalid metadata type %c. \n " , * arg ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid metadata type %c. \n " , * arg ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
} else
} else
@ -2876,7 +2863,7 @@ static int opt_map_metadata(OptionsContext *o, const char *opt, const char *arg)
static int opt_map_meta_data ( OptionsContext * o , const char * opt , const char * arg )
static int opt_map_meta_data ( OptionsContext * o , const char * opt , const char * arg )
{
{
fprintf ( stderr , " -map_meta_data is deprecated and will be removed soon. "
av_log ( NULL , AV_LOG_WARNING , " -map_meta_data is deprecated and will be removed soon. "
" Use -map_metadata instead. \n " ) ;
" Use -map_metadata instead. \n " ) ;
return opt_map_metadata ( o , opt , arg ) ;
return opt_map_metadata ( o , opt , arg ) ;
}
}
@ -2905,11 +2892,11 @@ static enum CodecID find_codec_or_die(const char *name, enum AVMediaType type, i
avcodec_find_encoder_by_name ( name ) :
avcodec_find_encoder_by_name ( name ) :
avcodec_find_decoder_by_name ( name ) ;
avcodec_find_decoder_by_name ( name ) ;
if ( ! codec ) {
if ( ! codec ) {
av_log ( NULL , AV_LOG_ERROR , " Unknown %s '%s' \n " , codec_string , name ) ;
av_log ( NULL , AV_LOG_FATAL , " Unknown %s '%s' \n " , codec_string , name ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
if ( codec - > type ! = type ) {
if ( codec - > type ! = type ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid %s type '%s' \n " , codec_string , name ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid %s type '%s' \n " , codec_string , name ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
return codec - > id ;
return codec - > id ;
@ -2983,11 +2970,9 @@ static void add_input_streams(OptionsContext *o, AVFormatContext *ic)
if ( dec - > time_base . den ! = rfps * dec - > ticks_per_frame | | dec - > time_base . num ! = rfps_base ) {
if ( dec - > time_base . den ! = rfps * dec - > ticks_per_frame | | dec - > time_base . num ! = rfps_base ) {
if ( verbose > = 0 )
av_log ( NULL , AV_LOG_INFO , " \n Seems stream %d codec frame rate differs from container frame rate: %2.2f (%d/%d) -> %2.2f (%d/%d) \n " ,
fprintf ( stderr , " \n Seems stream %d codec frame rate differs from container frame rate: %2.2f (%d/%d) -> %2.2f (%d/%d) \n " ,
i , ( float ) dec - > time_base . den / dec - > time_base . num , dec - > time_base . den , dec - > time_base . num ,
i , ( float ) dec - > time_base . den / dec - > time_base . num , dec - > time_base . den , dec - > time_base . num ,
( float ) rfps / rfps_base , rfps , rfps_base ) ;
( float ) rfps / rfps_base , rfps , rfps_base ) ;
}
}
if ( o - > video_disable )
if ( o - > video_disable )
@ -3024,7 +3009,7 @@ static int opt_input_file(OptionsContext *o, const char *opt, const char *filena
if ( o - > format ) {
if ( o - > format ) {
if ( ! ( file_iformat = av_find_input_format ( o - > format ) ) ) {
if ( ! ( file_iformat = av_find_input_format ( o - > format ) ) ) {
fprintf ( stderr , " Unknown input format: '%s' \n " , o - > format ) ;
av_log ( NULL , AV_LOG_FATAL , " Unknown input format: '%s' \n " , o - > format ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
@ -3084,8 +3069,8 @@ static int opt_input_file(OptionsContext *o, const char *opt, const char *filena
/* If not enough info to get the stream parameters, we decode the
/* If not enough info to get the stream parameters, we decode the
first frames to get it . ( used in mpeg case for example ) */
first frames to get it . ( used in mpeg case for example ) */
ret = avformat_find_stream_info ( ic , opts ) ;
ret = avformat_find_stream_info ( ic , opts ) ;
if ( ret < 0 & & verbose > = 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " %s: could not find codec parameters \n " , filename ) ;
av_log ( NULL , AV_LOG_FATAL , " %s: could not find codec parameters \n " , filename ) ;
av_close_input_file ( ic ) ;
av_close_input_file ( ic ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3099,8 +3084,8 @@ static int opt_input_file(OptionsContext *o, const char *opt, const char *filena
if ( o - > start_time ! = 0 ) {
if ( o - > start_time ! = 0 ) {
ret = av_seek_frame ( ic , - 1 , timestamp , AVSEEK_FLAG_BACKWARD ) ;
ret = av_seek_frame ( ic , - 1 , timestamp , AVSEEK_FLAG_BACKWARD ) ;
if ( ret < 0 ) {
if ( ret < 0 ) {
fprintf ( stderr , " %s: could not seek to position %0.3f \n " ,
av_log ( NULL , AV_LOG_WARNING , " %s: could not seek to position %0.3f \n " ,
filename , ( double ) timestamp / AV_TIME_BASE ) ;
filename , ( double ) timestamp / AV_TIME_BASE ) ;
}
}
}
}
@ -3108,8 +3093,7 @@ static int opt_input_file(OptionsContext *o, const char *opt, const char *filena
add_input_streams ( o , ic ) ;
add_input_streams ( o , ic ) ;
/* dump the file content */
/* dump the file content */
if ( verbose > = 0 )
av_dump_format ( ic , nb_input_files , filename , 0 ) ;
av_dump_format ( ic , nb_input_files , filename , 0 ) ;
input_files = grow_array ( input_files , sizeof ( * input_files ) , & nb_input_files , nb_input_files + 1 ) ;
input_files = grow_array ( input_files , sizeof ( * input_files ) , & nb_input_files , nb_input_files + 1 ) ;
input_files [ nb_input_files - 1 ] . ctx = ic ;
input_files [ nb_input_files - 1 ] . ctx = ic ;
@ -3159,7 +3143,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
double qscale = - 1 ;
double qscale = - 1 ;
if ( ! st ) {
if ( ! st ) {
av_log ( NULL , AV_LOG_ERROR , " Could not alloc stream. \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Could not alloc stream. \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3186,7 +3170,7 @@ static OutputStream *new_output_stream(OptionsContext *o, AVFormatContext *oc, e
if ( next = strchr ( bsf , ' , ' ) )
if ( next = strchr ( bsf , ' , ' ) )
* next + + = 0 ;
* next + + = 0 ;
if ( ! ( bsfc = av_bitstream_filter_init ( bsf ) ) ) {
if ( ! ( bsfc = av_bitstream_filter_init ( bsf ) ) ) {
av_log ( NULL , AV_LOG_ERROR , " Unknown bitstream filter %s \n " , bsf ) ;
av_log ( NULL , AV_LOG_FATAL , " Unknown bitstream filter %s \n " , bsf ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
if ( bsfc_prev )
if ( bsfc_prev )
@ -3226,7 +3210,7 @@ static void parse_matrix_coeffs(uint16_t *dest, const char *str)
break ;
break ;
p = strchr ( p , ' , ' ) ;
p = strchr ( p , ' , ' ) ;
if ( ! p ) {
if ( ! p ) {
fprintf ( stderr , " Syntax error in matrix \" %s \" at coeff %d \n " , str , i ) ;
av_log ( NULL , AV_LOG_FATAL , " Syntax error in matrix \" %s \" at coeff %d \n " , str , i ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
p + + ;
p + + ;
@ -3256,13 +3240,13 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
MATCH_PER_STREAM_OPT ( frame_rates , str , frame_rate , oc , st ) ;
MATCH_PER_STREAM_OPT ( frame_rates , str , frame_rate , oc , st ) ;
if ( frame_rate & & av_parse_video_rate ( & ost - > frame_rate , frame_rate ) < 0 ) {
if ( frame_rate & & av_parse_video_rate ( & ost - > frame_rate , frame_rate ) < 0 ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid framerate value: %s \n " , frame_rate ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid framerate value: %s \n " , frame_rate ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
MATCH_PER_STREAM_OPT ( frame_sizes , str , frame_size , oc , st ) ;
MATCH_PER_STREAM_OPT ( frame_sizes , str , frame_size , oc , st ) ;
if ( frame_size & & av_parse_video_size ( & video_enc - > width , & video_enc - > height , frame_size ) < 0 ) {
if ( frame_size & & av_parse_video_size ( & video_enc - > width , & video_enc - > height , frame_size ) < 0 ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid frame size: %s. \n " , frame_size ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid frame size: %s. \n " , frame_size ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3273,7 +3257,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
video_enc - > bits_per_raw_sample = frame_bits_per_raw_sample ;
video_enc - > bits_per_raw_sample = frame_bits_per_raw_sample ;
MATCH_PER_STREAM_OPT ( frame_pix_fmts , str , frame_pix_fmt , oc , st ) ;
MATCH_PER_STREAM_OPT ( frame_pix_fmts , str , frame_pix_fmt , oc , st ) ;
if ( frame_pix_fmt & & ( video_enc - > pix_fmt = av_get_pix_fmt ( frame_pix_fmt ) ) = = PIX_FMT_NONE ) {
if ( frame_pix_fmt & & ( video_enc - > pix_fmt = av_get_pix_fmt ( frame_pix_fmt ) ) = = PIX_FMT_NONE ) {
av_log ( NULL , AV_LOG_ERROR , " Unknown pixel format requested: %s. \n " , frame_pix_fmt ) ;
av_log ( NULL , AV_LOG_FATAL , " Unknown pixel format requested: %s. \n " , frame_pix_fmt ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
st - > sample_aspect_ratio = video_enc - > sample_aspect_ratio ;
st - > sample_aspect_ratio = video_enc - > sample_aspect_ratio ;
@ -3283,7 +3267,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
MATCH_PER_STREAM_OPT ( intra_matrices , str , intra_matrix , oc , st ) ;
MATCH_PER_STREAM_OPT ( intra_matrices , str , intra_matrix , oc , st ) ;
if ( intra_matrix ) {
if ( intra_matrix ) {
if ( ! ( video_enc - > intra_matrix = av_mallocz ( sizeof ( * video_enc - > intra_matrix ) * 64 ) ) ) {
if ( ! ( video_enc - > intra_matrix = av_mallocz ( sizeof ( * video_enc - > intra_matrix ) * 64 ) ) ) {
av_log ( NULL , AV_LOG_ERROR , " Could not allocate memory for intra matrix. \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Could not allocate memory for intra matrix. \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
parse_matrix_coeffs ( video_enc - > intra_matrix , intra_matrix ) ;
parse_matrix_coeffs ( video_enc - > intra_matrix , intra_matrix ) ;
@ -3291,7 +3275,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
MATCH_PER_STREAM_OPT ( inter_matrices , str , inter_matrix , oc , st ) ;
MATCH_PER_STREAM_OPT ( inter_matrices , str , inter_matrix , oc , st ) ;
if ( inter_matrix ) {
if ( inter_matrix ) {
if ( ! ( video_enc - > inter_matrix = av_mallocz ( sizeof ( * video_enc - > inter_matrix ) * 64 ) ) ) {
if ( ! ( video_enc - > inter_matrix = av_mallocz ( sizeof ( * video_enc - > inter_matrix ) * 64 ) ) ) {
av_log ( NULL , AV_LOG_ERROR , " Could not allocate memory for inter matrix. \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Could not allocate memory for inter matrix. \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
parse_matrix_coeffs ( video_enc - > inter_matrix , inter_matrix ) ;
parse_matrix_coeffs ( video_enc - > inter_matrix , inter_matrix ) ;
@ -3302,7 +3286,7 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc)
int start , end , q ;
int start , end , q ;
int e = sscanf ( p , " %d,%d,%d " , & start , & end , & q ) ;
int e = sscanf ( p , " %d,%d,%d " , & start , & end , & q ) ;
if ( e ! = 3 ) {
if ( e ! = 3 ) {
fprintf ( stderr , " error parsing rc_override \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " error parsing rc_override \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
video_enc - > rc_override =
video_enc - > rc_override =
@ -3378,7 +3362,7 @@ static OutputStream *new_audio_stream(OptionsContext *o, AVFormatContext *oc)
MATCH_PER_STREAM_OPT ( sample_fmts , str , sample_fmt , oc , st ) ;
MATCH_PER_STREAM_OPT ( sample_fmts , str , sample_fmt , oc , st ) ;
if ( sample_fmt & &
if ( sample_fmt & &
( audio_enc - > sample_fmt = av_get_sample_fmt ( sample_fmt ) ) = = AV_SAMPLE_FMT_NONE ) {
( audio_enc - > sample_fmt = av_get_sample_fmt ( sample_fmt ) ) = = AV_SAMPLE_FMT_NONE ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid sample format '%s' \n " , sample_fmt ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid sample format '%s' \n " , sample_fmt ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3398,7 +3382,7 @@ static OutputStream *new_data_stream(OptionsContext *o, AVFormatContext *oc)
st = ost - > st ;
st = ost - > st ;
data_enc = st - > codec ;
data_enc = st - > codec ;
if ( ! st - > stream_copy ) {
if ( ! st - > stream_copy ) {
fprintf ( stderr , " Data stream encoding not supported yet (only streamcopy) \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Data stream encoding not supported yet (only streamcopy) \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3438,9 +3422,9 @@ static int opt_streamid(OptionsContext *o, const char *opt, const char *arg)
av_strlcpy ( idx_str , arg , sizeof ( idx_str ) ) ;
av_strlcpy ( idx_str , arg , sizeof ( idx_str ) ) ;
p = strchr ( idx_str , ' : ' ) ;
p = strchr ( idx_str , ' : ' ) ;
if ( ! p ) {
if ( ! p ) {
fprintf ( stderr ,
av_log ( NULL , AV_LOG_FATAL ,
" Invalid value '%s' for option '%s', required syntax is 'index:value' \n " ,
" Invalid value '%s' for option '%s', required syntax is 'index:value' \n " ,
arg , opt ) ;
arg , opt ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
* p + + = ' \0 ' ;
* p + + = ' \0 ' ;
@ -3613,7 +3597,7 @@ static void opt_output_file(void *optctx, const char *filename)
case AVMEDIA_TYPE_SUBTITLE : ost = new_subtitle_stream ( o , oc ) ; break ;
case AVMEDIA_TYPE_SUBTITLE : ost = new_subtitle_stream ( o , oc ) ; break ;
case AVMEDIA_TYPE_DATA : ost = new_data_stream ( o , oc ) ; break ;
case AVMEDIA_TYPE_DATA : ost = new_data_stream ( o , oc ) ; break ;
default :
default :
av_log ( NULL , AV_LOG_ERROR , " Cannot map stream #%d.%d - unsupported type. \n " ,
av_log ( NULL , AV_LOG_FATAL , " Cannot map stream #%d.%d - unsupported type. \n " ,
map - > file_index , map - > stream_index ) ;
map - > file_index , map - > stream_index ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3652,12 +3636,12 @@ static void opt_output_file(void *optctx, const char *filename)
fprintf ( stderr , " File '%s' already exists. Overwrite ? [y/N] " , filename ) ;
fprintf ( stderr , " File '%s' already exists. Overwrite ? [y/N] " , filename ) ;
fflush ( stderr ) ;
fflush ( stderr ) ;
if ( ! read_yesno ( ) ) {
if ( ! read_yesno ( ) ) {
fprintf ( stderr , " Not overwriting - exiting \n " ) ;
av_log ( 0 , AV_LOG_FATAL , " Not overwriting - exiting \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
else {
else {
fprintf ( stderr , " File '%s' already exists. Exiting. \n " , filename ) ;
av_log ( 0 , AV_LOG_FATAL , " File '%s' already exists. Exiting. \n " , filename ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
@ -3689,7 +3673,7 @@ static void opt_output_file(void *optctx, const char *filename)
break ;
break ;
}
}
} else {
} else {
av_log ( NULL , AV_LOG_ERROR , " Invalid input file index %d in chapter mapping. \n " ,
av_log ( NULL , AV_LOG_FATAL , " Invalid input file index %d in chapter mapping. \n " ,
o - > chapters_input_file ) ;
o - > chapters_input_file ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3706,7 +3690,7 @@ static void opt_output_file(void *optctx, const char *filename)
# define METADATA_CHECK_INDEX(index, nb_elems, desc)\
# define METADATA_CHECK_INDEX(index, nb_elems, desc)\
if ( ( index ) < 0 | | ( index ) > = ( nb_elems ) ) { \
if ( ( index ) < 0 | | ( index ) > = ( nb_elems ) ) { \
av_log ( NULL , AV_LOG_ERROR , " Invalid %s index %d while processing metadata maps \n " , \
av_log ( NULL , AV_LOG_FATAL , " Invalid %s index %d while processing metadata maps \n " , \
( desc ) , ( index ) ) ; \
( desc ) , ( index ) ) ; \
exit_program ( 1 ) ; \
exit_program ( 1 ) ; \
}
}
@ -3765,7 +3749,7 @@ static void opt_output_file(void *optctx, const char *filename)
val = strchr ( o - > metadata [ i ] . u . str , ' = ' ) ;
val = strchr ( o - > metadata [ i ] . u . str , ' = ' ) ;
if ( ! val ) {
if ( ! val ) {
av_log ( NULL , AV_LOG_ERROR , " No '=' character in metadata string %s. \n " ,
av_log ( NULL , AV_LOG_FATAL , " No '=' character in metadata string %s. \n " ,
o - > metadata [ i ] . u . str ) ;
o - > metadata [ i ] . u . str ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3778,20 +3762,20 @@ static void opt_output_file(void *optctx, const char *filename)
break ;
break ;
case ' s ' :
case ' s ' :
if ( index < 0 | | index > = oc - > nb_streams ) {
if ( index < 0 | | index > = oc - > nb_streams ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid stream index %d in metadata specifier. \n " , index ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid stream index %d in metadata specifier. \n " , index ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
m = & oc - > streams [ index ] - > metadata ;
m = & oc - > streams [ index ] - > metadata ;
break ;
break ;
case ' c ' :
case ' c ' :
if ( index < 0 | | index > = oc - > nb_chapters ) {
if ( index < 0 | | index > = oc - > nb_chapters ) {
av_log ( NULL , AV_LOG_ERROR , " Invalid chapter index %d in metadata specifier. \n " , index ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid chapter index %d in metadata specifier. \n " , index ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
m = & oc - > chapters [ index ] - > metadata ;
m = & oc - > chapters [ index ] - > metadata ;
break ;
break ;
default :
default :
av_log ( NULL , AV_LOG_ERROR , " Invalid metadata specifier %s. \n " , o - > metadata [ i ] . specifier ) ;
av_log ( NULL , AV_LOG_FATAL , " Invalid metadata specifier %s. \n " , o - > metadata [ i ] . specifier ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -3963,14 +3947,14 @@ static int opt_target(OptionsContext *o, const char *opt, const char *arg)
break ;
break ;
}
}
}
}
if ( verbose > 0 & & norm ! = UNKNOWN )
if ( norm ! = UNKNOWN )
fprintf ( stderr , " Assuming %s for target. \n " , norm = = PAL ? " PAL " : " NTSC " ) ;
av_log ( NULL , AV_LOG_INFO , " Assuming %s for target. \n " , norm = = PAL ? " PAL " : " NTSC " ) ;
}
}
if ( norm = = UNKNOWN ) {
if ( norm = = UNKNOWN ) {
fprintf ( stderr , " Could not determine norm (PAL/NTSC/NTSC-Film) for target. \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Could not determine norm (PAL/NTSC/NTSC-Film) for target. \n " ) ;
fprintf ( stderr , " Please prefix target with \" pal- \" , \" ntsc- \" or \" film- \" , \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " Please prefix target with \" pal- \" , \" ntsc- \" or \" film- \" , \n " ) ;
fprintf ( stderr , " or set a framerate with \" -r xxx \" . \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " or set a framerate with \" -r xxx \" . \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -4059,7 +4043,7 @@ static int opt_target(OptionsContext *o, const char *opt, const char *arg)
parse_option ( o , " ac " , " 2 " , options ) ;
parse_option ( o , " ac " , " 2 " , options ) ;
} else {
} else {
fprintf ( stderr , " Unknown target: %s \n " , arg ) ;
av_log ( NULL , AV_LOG_ERROR , " Unknown target: %s \n " , arg ) ;
return AVERROR ( EINVAL ) ;
return AVERROR ( EINVAL ) ;
}
}
return 0 ;
return 0 ;
@ -4108,9 +4092,9 @@ static int opt_preset(OptionsContext *o, const char *opt, const char *arg)
if ( ! ( f = get_preset_file ( filename , sizeof ( filename ) , arg , * opt = = ' f ' , codec_name ) ) ) {
if ( ! ( f = get_preset_file ( filename , sizeof ( filename ) , arg , * opt = = ' f ' , codec_name ) ) ) {
if ( ! strncmp ( arg , " libx264-lossless " , strlen ( " libx264-lossless " ) ) ) {
if ( ! strncmp ( arg , " libx264-lossless " , strlen ( " libx264-lossless " ) ) ) {
fprintf ( stderr , " Please use -preset <speed> -qp 0 \n " ) ;
av_log ( 0 , AV_LOG_FATAL , " Please use -preset <speed> -qp 0 \n " ) ;
} else
} else
fprintf ( stderr , " File for preset '%s' not found \n " , arg ) ;
av_log ( 0 , AV_LOG_FATAL , " File for preset '%s' not found \n " , arg ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
@ -4120,7 +4104,7 @@ static int opt_preset(OptionsContext *o, const char *opt, const char *arg)
continue ;
continue ;
e | = sscanf ( line , " %999[^=]=%999[^ \n ] \n " , tmp , tmp2 ) - 2 ;
e | = sscanf ( line , " %999[^=]=%999[^ \n ] \n " , tmp , tmp2 ) - 2 ;
if ( e ) {
if ( e ) {
fprintf ( stderr , " %s: Invalid syntax: '%s' \n " , filename , line ) ;
av_log ( 0 , AV_LOG_FATAL , " %s: Invalid syntax: '%s' \n " , filename , line ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
if ( ! strcmp ( tmp , " acodec " ) ) {
if ( ! strcmp ( tmp , " acodec " ) ) {
@ -4132,7 +4116,7 @@ static int opt_preset(OptionsContext *o, const char *opt, const char *arg)
} else if ( ! strcmp ( tmp , " dcodec " ) ) {
} else if ( ! strcmp ( tmp , " dcodec " ) ) {
opt_data_codec ( o , tmp , tmp2 ) ;
opt_data_codec ( o , tmp , tmp2 ) ;
} else if ( opt_default ( tmp , tmp2 ) < 0 ) {
} else if ( opt_default ( tmp , tmp2 ) < 0 ) {
fprintf ( stderr , " %s: Invalid option or argument: '%s', parsed as '%s' = '%s' \n " , filename , line , tmp , tmp2 ) ;
av_log ( 0 , AV_LOG_FATAL , " %s: Invalid option or argument: '%s', parsed as '%s' = '%s' \n " , filename , line , tmp , tmp2 ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
}
}
@ -4210,7 +4194,7 @@ static const OptionDef options[] = {
{ " re " , OPT_BOOL | OPT_EXPERT | OPT_OFFSET , { . off = OFFSET ( rate_emu ) } , " read input at native frame rate " , " " } ,
{ " re " , OPT_BOOL | OPT_EXPERT | OPT_OFFSET , { . off = OFFSET ( rate_emu ) } , " read input at native frame rate " , " " } ,
{ " loop_input " , OPT_BOOL | OPT_EXPERT , { ( void * ) & loop_input } , " deprecated, use -loop " } ,
{ " loop_input " , OPT_BOOL | OPT_EXPERT , { ( void * ) & loop_input } , " deprecated, use -loop " } ,
{ " loop_output " , HAS_ARG | OPT_INT | OPT_EXPERT , { ( void * ) & loop_output } , " deprecated, use -loop " , " " } ,
{ " loop_output " , HAS_ARG | OPT_INT | OPT_EXPERT , { ( void * ) & loop_output } , " deprecated, use -loop " , " " } ,
{ " v " , HAS_ARG , { ( void * ) opt_verbose } , " set the verbosity level " , " number " } ,
{ " v " , HAS_ARG , { ( void * ) opt_verbose } , " deprecated, use -loglevel instead " , " number " } ,
{ " target " , HAS_ARG | OPT_FUNC2 , { ( void * ) opt_target } , " specify target file type ( \" vcd \" , \" svcd \" , \" dvd \" , \" dv \" , \" dv50 \" , \" pal-vcd \" , \" ntsc-svcd \" , ...) " , " type " } ,
{ " target " , HAS_ARG | OPT_FUNC2 , { ( void * ) opt_target } , " specify target file type ( \" vcd \" , \" svcd \" , \" dvd \" , \" dv \" , \" dv50 \" , \" pal-vcd \" , \" ntsc-svcd \" , ...) " , " type " } ,
{ " vsync " , HAS_ARG | OPT_INT | OPT_EXPERT , { ( void * ) & video_sync_method } , " video sync method " , " " } ,
{ " vsync " , HAS_ARG | OPT_INT | OPT_EXPERT , { ( void * ) & video_sync_method } , " video sync method " , " " } ,
{ " async " , HAS_ARG | OPT_INT | OPT_EXPERT , { ( void * ) & audio_sync_method } , " audio sync method " , " " } ,
{ " async " , HAS_ARG | OPT_INT | OPT_EXPERT , { ( void * ) & audio_sync_method } , " audio sync method " , " " } ,
@ -4321,10 +4305,10 @@ int main(int argc, char **argv)
reset_options ( & o , 0 ) ;
reset_options ( & o , 0 ) ;
av_log_set_flags ( AV_LOG_SKIP_REPEATED ) ;
av_log_set_flags ( AV_LOG_SKIP_REPEATED ) ;
parse_loglevel ( argc , argv , options ) ;
if ( argc > 1 & & ! strcmp ( argv [ 1 ] , " -d " ) ) {
if ( argc > 1 & & ! strcmp ( argv [ 1 ] , " -d " ) ) {
run_as_daemon = 1 ;
run_as_daemon = 1 ;
verbose = - 1 ;
av_log_set_callback ( log_callback_null ) ;
av_log_set_callback ( log_callback_null ) ;
argc - - ;
argc - - ;
argv + + ;
argv + + ;
@ -4344,26 +4328,25 @@ int main(int argc, char **argv)
avio_set_interrupt_cb ( decode_interrupt_cb ) ;
avio_set_interrupt_cb ( decode_interrupt_cb ) ;
# endif
# endif
if ( verbose > = 0 )
show_banner ( ) ;
show_banner ( ) ;
/* parse options */
/* parse options */
parse_options ( & o , argc , argv , options , opt_output_file ) ;
parse_options ( & o , argc , argv , options , opt_output_file ) ;
if ( nb_output_files < = 0 & & nb_input_files = = 0 ) {
if ( nb_output_files < = 0 & & nb_input_files = = 0 ) {
show_usage ( ) ;
show_usage ( ) ;
fprintf ( stderr , " Use -h to get full help or, even better, run 'man %s' \n " , program_name ) ;
av_log ( NULL , AV_LOG_WARNING , " Use -h to get full help or, even better, run 'man %s' \n " , program_name ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
/* file converter / grab */
/* file converter / grab */
if ( nb_output_files < = 0 ) {
if ( nb_output_files < = 0 ) {
fprintf ( stderr , " At least one output file must be specified \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " At least one output file must be specified \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}
if ( nb_input_files = = 0 ) {
if ( nb_input_files = = 0 ) {
fprintf ( stderr , " At least one input file must be specified \n " ) ;
av_log ( NULL , AV_LOG_FATAL , " At least one input file must be specified \n " ) ;
exit_program ( 1 ) ;
exit_program ( 1 ) ;
}
}