diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2012-04-07 22:41:37 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2012-04-07 22:41:37 +0200 |
commit | 6101e5322f083a806fd92a6261ff3197fdd0f5e7 (patch) | |
tree | 8b869bff6c1db61b3aa3bbabcbe322fee9f3dcf0 /ffmpeg.c | |
parent | 5012c07336eff0e928afb57c6d38271e316c0a6c (diff) | |
parent | d293e3464db647e72fffad50a678eca89546b65f (diff) |
Merge remote-tracking branch 'qatar/master'
* qatar/master:
rtpdec_asf: Set the no_resync_search option for the chained asf demuxer
asfdec: Add an option for not searching for the packet markers
cosmetics: Clean up the tiffenc pix_fmts declaration to match the style of others
cosmetics: Align codec declarations
cosmetics: Convert mimic.c to utf-8
avconv: remove an unused function parameter.
avconv: remove now pointless variables.
avconv: drop support for building without libavfilter.
nellymoserenc: fix crash due to memsetting the wrong area.
libavformat: Only require first packet to be known for audio/video streams
avplay: Don't try to scale timestamps if the tb isn't set
Conflicts:
Changelog
configure
ffmpeg.c
libavcodec/aacenc.c
libavcodec/bmpenc.c
libavcodec/dnxhddec.c
libavcodec/dnxhdenc.c
libavcodec/ffv1.c
libavcodec/flacenc.c
libavcodec/fraps.c
libavcodec/huffyuv.c
libavcodec/libopenjpegdec.c
libavcodec/mpeg12enc.c
libavcodec/mpeg4videodec.c
libavcodec/pamenc.c
libavcodec/pgssubdec.c
libavcodec/pngenc.c
libavcodec/qtrleenc.c
libavcodec/rawdec.c
libavcodec/sgienc.c
libavcodec/tiffenc.c
libavcodec/v210dec.c
libavcodec/wmv2dec.c
libavformat/utils.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'ffmpeg.c')
-rw-r--r-- | ffmpeg.c | 102 |
1 files changed, 2 insertions, 100 deletions
@@ -55,14 +55,12 @@ #include "libavformat/ffm.h" // not public API -#if CONFIG_AVFILTER # include "libavfilter/avcodec.h" # include "libavfilter/avfilter.h" # include "libavfilter/avfiltergraph.h" # include "libavfilter/buffersink.h" # include "libavfilter/buffersrc.h" # include "libavfilter/vsrc_buffer.h" -#endif #if HAVE_SYS_RESOURCE_H #include <sys/types.h> @@ -245,8 +243,6 @@ typedef struct OutputStream { /* video only */ int video_resample; - AVFrame resample_frame; /* temporary frame for image resampling */ - struct SwsContext *img_resample_ctx; /* for image resampling */ int resample_height; int resample_width; int resample_pix_fmt; @@ -274,13 +270,11 @@ typedef struct OutputStream { SwrContext *swr; -#if CONFIG_AVFILTER AVFilterContext *output_video_filter; AVFilterContext *input_video_filter; AVFilterBufferRef *picref; char *avfilter; AVFilterGraph *graph; -#endif int64_t sws_flags; AVDictionary *opts; @@ -405,10 +399,8 @@ typedef struct OptionsContext { int nb_presets; SpecifierOpt *copy_initial_nonkeyframes; int nb_copy_initial_nonkeyframes; -#if CONFIG_AVFILTER SpecifierOpt *filters; int nb_filters; -#endif } OptionsContext; #define MATCH_PER_STREAM_OPT(name, type, outvar, fmtctx, st)\ @@ -597,8 +589,6 @@ static void filter_release_buffer(AVFilterBuffer *fb) unref_buffer(buf->ist, buf); } -#if CONFIG_AVFILTER - static int configure_video_filters(InputStream *ist, OutputStream *ost) { AVFilterContext *last_filter, *filter; @@ -693,7 +683,6 @@ static int configure_video_filters(InputStream *ist, OutputStream *ost) return 0; } -#endif /* CONFIG_AVFILTER */ static void term_exit(void) { @@ -863,9 +852,7 @@ void av_noreturn exit_program(int ret) av_freep(&async_buf); allocated_async_buf_size = 0; -#if CONFIG_AVFILTER avfilter_uninit(); -#endif avformat_network_deinit(); if (received_sigterm) { @@ -1439,65 +1426,6 @@ static void do_subtitle_out(AVFormatContext *s, } } -static void do_video_resample(OutputStream *ost, - InputStream *ist, - AVFrame *in_picture, - AVFrame **out_picture) -{ -#if CONFIG_AVFILTER - *out_picture = in_picture; -#else - AVCodecContext *dec = ist->st->codec; - AVCodecContext *enc = ost->st->codec; - int resample_changed = ost->resample_width != in_picture->width || - ost->resample_height != in_picture->height || - ost->resample_pix_fmt != in_picture->format; - - *out_picture = in_picture; - if (resample_changed) { - av_log(NULL, AV_LOG_INFO, - "Input stream #%d:%d frame changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s / frm size:%dx%d fmt:%s\n", - ist->file_index, ist->st->index, - ost->resample_width, ost->resample_height, av_get_pix_fmt_name(ost->resample_pix_fmt), - dec->width , dec->height , av_get_pix_fmt_name(dec->pix_fmt), - in_picture->width, in_picture->height, av_get_pix_fmt_name(in_picture->format)); - ost->resample_width = in_picture->width; - ost->resample_height = in_picture->height; - ost->resample_pix_fmt = in_picture->format; - } - - ost->video_resample = in_picture->width != enc->width || - in_picture->height != enc->height || - in_picture->format != enc->pix_fmt; - - if (ost->video_resample) { - *out_picture = &ost->resample_frame; - if (!ost->img_resample_ctx || resample_changed) { - /* initialize the destination picture */ - if (!ost->resample_frame.data[0]) { - avcodec_get_frame_defaults(&ost->resample_frame); - if (avpicture_alloc((AVPicture *)&ost->resample_frame, enc->pix_fmt, - enc->width, enc->height)) { - av_log(NULL, AV_LOG_FATAL, "Cannot allocate temp picture, check pix fmt\n"); - exit_program(1); - } - } - /* initialize a new scaler context */ - sws_freeContext(ost->img_resample_ctx); - ost->img_resample_ctx = sws_getContext(in_picture->width, in_picture->height, in_picture->format, - enc->width, enc->height, enc->pix_fmt, - ost->sws_flags, NULL, NULL, NULL); - if (ost->img_resample_ctx == NULL) { - av_log(NULL, AV_LOG_FATAL, "Cannot get resampling context\n"); - exit_program(1); - } - } - sws_scale(ost->img_resample_ctx, in_picture->data, in_picture->linesize, - 0, ost->resample_height, (*out_picture)->data, (*out_picture)->linesize); - } -#endif -} - static double psnr(double d) { return -10.0 * log(d) / log(10.0); @@ -1545,7 +1473,6 @@ static void do_video_out(AVFormatContext *s, OutputStream *ost, InputStream *ist, AVFrame *in_picture) { int nb_frames, i, ret, format_video_sync; - AVFrame *final_picture; AVCodecContext *enc; double sync_ipts, delta; double duration = 0; @@ -1607,8 +1534,6 @@ static void do_video_out(AVFormatContext *s, OutputStream *ost, av_log(NULL, AV_LOG_VERBOSE, "*** %d dup!\n", nb_frames - 1); } - do_video_resample(ost, ist, in_picture, &final_picture); - /* duplicates frame if needed */ for (i = 0; i < nb_frames; i++) { AVPacket pkt; @@ -1623,7 +1548,7 @@ static void do_video_out(AVFormatContext *s, OutputStream *ost, method. */ enc->coded_frame->interlaced_frame = in_picture->interlaced_frame; enc->coded_frame->top_field_first = in_picture->top_field_first; - pkt.data = (uint8_t *)final_picture; + pkt.data = (uint8_t *)in_picture; pkt.size = sizeof(AVPicture); pkt.pts = av_rescale_q(ost->sync_opts, enc->time_base, ost->st->time_base); pkt.flags |= AV_PKT_FLAG_KEY; @@ -1633,7 +1558,7 @@ static void do_video_out(AVFormatContext *s, OutputStream *ost, int got_packet; AVFrame big_picture; - big_picture = *final_picture; + big_picture = *in_picture; /* better than nothing: use input picture interlaced settings */ big_picture.interlaced_frame = in_picture->interlaced_frame; @@ -2157,7 +2082,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int pre_process_video_frame(ist, (AVPicture *)decoded_frame, &buffer_to_free); -#if CONFIG_AVFILTER frame_sample_aspect= av_opt_ptr(avcodec_get_frame_class(), decoded_frame, "sample_aspect_ratio"); for(i=0;i<nb_output_streams;i++) { OutputStream *ost = ost = &output_streams[i]; @@ -2189,7 +2113,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int } } } -#endif rate_emu_sleep(ist); @@ -2199,7 +2122,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int if (!check_output_constraints(ist, ost) || !ost->encoding_needed) continue; -#if CONFIG_AVFILTER while (av_buffersink_poll_frame(ost->output_video_filter)) { AVRational ist_pts_tb = ost->output_video_filter->inputs[0]->time_base; AVFrame *filtered_frame; @@ -2222,9 +2144,6 @@ static int transcode_video(InputStream *ist, AVPacket *pkt, int *got_output, int cont: avfilter_unref_buffer(ost->picref); } -#else - do_video_out(output_files[ost->file_index].ctx, ost, ist, decoded_frame); -#endif } fail: @@ -2679,12 +2598,10 @@ static int transcode_init(OutputFile *output_files, int nb_output_files, AV_TIME_BASE_Q, codec->time_base); -#if CONFIG_AVFILTER if (configure_video_filters(ist, ost)) { av_log(NULL, AV_LOG_FATAL, "Error opening filters!\n"); exit_program(1); } -#endif break; case AVMEDIA_TYPE_SUBTITLE: codec->time_base = (AVRational){1, 1000}; @@ -2924,7 +2841,6 @@ static int transcode(OutputFile *output_files, int nb_output_files, do_pkt_dump = 1; av_log_set_level(AV_LOG_DEBUG); } -#if CONFIG_AVFILTER if (key == 'c' || key == 'C'){ char buf[4096], target[64], command[256], arg[256] = {0}; double time; @@ -2957,7 +2873,6 @@ static int transcode(OutputFile *output_files, int nb_output_files, "only %d given in string '%s'\n", n, buf); } } -#endif if (key == 'd' || key == 'D'){ int debug=0; if(key == 'D') { @@ -3170,9 +3085,7 @@ static int transcode(OutputFile *output_files, int nb_output_files, av_freep(&ost->st->codec->stats_in); avcodec_close(ost->st->codec); } -#if CONFIG_AVFILTER avfilter_graph_free(&ost->graph); -#endif } /* close each decoder */ @@ -3202,10 +3115,7 @@ static int transcode(OutputFile *output_files, int nb_output_files, av_fifo_free(ost->fifo); /* works even if fifo is not initialized but set to zero */ av_freep(&ost->st->codec->subtitle_header); - av_free(ost->resample_frame.data[0]); av_free(ost->forced_kf_pts); - if (ost->video_resample) - sws_freeContext(ost->img_resample_ctx); swr_free(&ost->swr); av_dict_free(&ost->opts); } @@ -4141,11 +4051,9 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc, in ost->top_field_first = -1; MATCH_PER_STREAM_OPT(top_field_first, i, ost->top_field_first, oc, st); -#if CONFIG_AVFILTER MATCH_PER_STREAM_OPT(filters, str, filters, oc, st); if (filters) ost->avfilter = av_strdup(filters); -#endif } else { MATCH_PER_STREAM_OPT(copy_initial_nonkeyframes, i, ost->copy_initial_nonkeyframes, oc ,st); } @@ -5080,9 +4988,7 @@ static const OptionDef options[] = { { "q", HAS_ARG | OPT_EXPERT | OPT_DOUBLE | OPT_SPEC, {.off = OFFSET(qscale)}, "use fixed quality scale (VBR)", "q" }, { "qscale", HAS_ARG | OPT_EXPERT | OPT_FUNC2, {(void*)opt_qscale}, "use fixed quality scale (VBR)", "q" }, { "profile", HAS_ARG | OPT_EXPERT | OPT_FUNC2, {(void*)opt_profile}, "set profile", "profile" }, -#if CONFIG_AVFILTER { "filter", HAS_ARG | OPT_STRING | OPT_SPEC, {.off = OFFSET(filters)}, "set stream filterchain", "filter_list" }, -#endif { "stats", OPT_BOOL, {&print_stats}, "print progress report during encoding", }, { "attach", HAS_ARG | OPT_FUNC2, {(void*)opt_attach}, "add an attachment to the output file", "filename" }, { "dump_attachment", HAS_ARG | OPT_STRING | OPT_SPEC, {.off = OFFSET(dump_attachment)}, "extract an attachment into a file", "filename" }, @@ -5119,9 +5025,7 @@ static const OptionDef options[] = { { "psnr", OPT_BOOL | OPT_EXPERT | OPT_VIDEO, {(void*)&do_psnr}, "calculate PSNR of compressed frames" }, { "vstats", OPT_EXPERT | OPT_VIDEO, {(void*)&opt_vstats}, "dump video coding statistics to file" }, { "vstats_file", HAS_ARG | OPT_EXPERT | OPT_VIDEO, {(void*)opt_vstats_file}, "dump video coding statistics to file", "file" }, -#if CONFIG_AVFILTER { "vf", HAS_ARG | OPT_VIDEO | OPT_FUNC2, {(void*)opt_video_filters}, "video filters", "filter list" }, -#endif { "intra_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_STRING | OPT_SPEC, {.off = OFFSET(intra_matrices)}, "specify intra matrix coeffs", "matrix" }, { "inter_matrix", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_STRING | OPT_SPEC, {.off = OFFSET(inter_matrices)}, "specify inter matrix coeffs", "matrix" }, { "top", HAS_ARG | OPT_EXPERT | OPT_VIDEO | OPT_INT| OPT_SPEC, {.off = OFFSET(top_field_first)}, "top=1/bottom=0/auto=-1 field first", "" }, @@ -5196,9 +5100,7 @@ int main(int argc, char **argv) #if CONFIG_AVDEVICE avdevice_register_all(); #endif -#if CONFIG_AVFILTER avfilter_register_all(); -#endif av_register_all(); avformat_network_init(); |