diff --git a/ffmpeg_filter.c b/ffmpeg_filter.c index 1887ffec4e..8478edf0a5 100644 --- a/ffmpeg_filter.c +++ b/ffmpeg_filter.c @@ -295,7 +295,7 @@ static int configure_output_video_filter(FilterGraph *fg, OutputFilter *ofilter, snprintf(name, sizeof(name), "output stream %d:%d", ost->file_index, ost->index); ret = avfilter_graph_create_filter(&ofilter->filter, avfilter_get_by_name("ffbuffersink"), - name, NULL, NULL/*buffersink_params*/, fg->graph); + name, NULL, NULL, fg->graph); av_freep(&buffersink_params); if (ret < 0) diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 8806c6a598..03340efa09 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -325,8 +325,6 @@ void avcodec_register_all(void) REGISTER_DECODER (SHORTEN, shorten); REGISTER_DECODER (SIPR, sipr); REGISTER_DECODER (SMACKAUD, smackaud); - REGISTER_ENCDEC (SONIC, sonic); - REGISTER_ENCODER (SONIC_LS, sonic_ls); REGISTER_DECODER (TRUEHD, truehd); REGISTER_DECODER (TRUESPEECH, truespeech); REGISTER_DECODER (TTA, tta); diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c index 672fcba286..226312e897 100644 --- a/libavcodec/alsdec.c +++ b/libavcodec/alsdec.c @@ -651,10 +651,10 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd) for (k = 1; k < sub_blocks; k++) s[k] = s[k - 1] + decode_rice(gb, 0); } - for (k = 0; k < sub_blocks; k++) + for (k = 1; k < sub_blocks; k++) if (s[k] > 32) { av_log(avctx, AV_LOG_ERROR, "k invalid for rice code.\n"); - return -1; + return AVERROR_INVALIDDATA; } if (get_bits1(gb)) diff --git a/libavcodec/assenc.c b/libavcodec/assenc.c index 779a55a1f7..7ed21eedbc 100644 --- a/libavcodec/assenc.c +++ b/libavcodec/assenc.c @@ -37,9 +37,9 @@ static av_cold int ass_encode_init(AVCodecContext *avctx) } static int ass_encode_frame(AVCodecContext *avctx, - unsigned char *buf, int bufsize, void *data) + unsigned char *buf, int bufsize, + const AVSubtitle *sub) { - AVSubtitle *sub = data; int i, len, total_len = 0; for (i=0; inum_rects; i++) { @@ -67,5 +67,5 @@ AVCodec ff_ass_encoder = { .type = AVMEDIA_TYPE_SUBTITLE, .id = AV_CODEC_ID_SSA, .init = ass_encode_init, - .encode = ass_encode_frame, + .encode_sub = ass_encode_frame, }; diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 62a261a5da..fdfd5c4c7c 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -3099,6 +3099,8 @@ typedef struct AVProfile { typedef struct AVCodecDefault AVCodecDefault; +struct AVSubtitle; + /** * AVCodec. */ @@ -3171,7 +3173,8 @@ typedef struct AVCodec { void (*init_static_data)(struct AVCodec *codec); int (*init)(AVCodecContext *); - int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data); + int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size, + const struct AVSubtitle *sub); /** * Encode data to an AVPacket. * diff --git a/libavcodec/dvbsub.c b/libavcodec/dvbsub.c index 37bb3e1ec0..562db6a586 100644 --- a/libavcodec/dvbsub.c +++ b/libavcodec/dvbsub.c @@ -248,7 +248,7 @@ static void dvb_encode_rle8(uint8_t **pq, } static int encode_dvb_subtitles(DVBSubtitleContext *s, - uint8_t *outbuf, AVSubtitle *h) + uint8_t *outbuf, const AVSubtitle *h) { uint8_t *q, *pseg_len; int page_id, region_id, clut_id, object_id, i, bpp_index, page_state; @@ -444,10 +444,10 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s, } static int dvbsub_encode(AVCodecContext *avctx, - unsigned char *buf, int buf_size, void *data) + unsigned char *buf, int buf_size, + const AVSubtitle *sub) { DVBSubtitleContext *s = avctx->priv_data; - AVSubtitle *sub = data; int ret; ret = encode_dvb_subtitles(s, buf, sub); @@ -459,6 +459,6 @@ AVCodec ff_dvbsub_encoder = { .type = AVMEDIA_TYPE_SUBTITLE, .id = AV_CODEC_ID_DVB_SUBTITLE, .priv_data_size = sizeof(DVBSubtitleContext), - .encode = dvbsub_encode, + .encode_sub = dvbsub_encode, .long_name = NULL_IF_CONFIG_SMALL("DVB subtitles"), }; diff --git a/libavcodec/dvdsubenc.c b/libavcodec/dvdsubenc.c index d913708026..2e0c37da4d 100644 --- a/libavcodec/dvdsubenc.c +++ b/libavcodec/dvdsubenc.c @@ -416,10 +416,10 @@ static int dvdsub_init(AVCodecContext *avctx) } static int dvdsub_encode(AVCodecContext *avctx, - unsigned char *buf, int buf_size, void *data) + unsigned char *buf, int buf_size, + const AVSubtitle *sub) { //DVDSubtitleContext *s = avctx->priv_data; - AVSubtitle *sub = data; int ret; ret = encode_dvd_subtitles(avctx, buf, buf_size, sub); @@ -431,7 +431,7 @@ AVCodec ff_dvdsub_encoder = { .type = AVMEDIA_TYPE_SUBTITLE, .id = AV_CODEC_ID_DVD_SUBTITLE, .init = dvdsub_init, - .encode = dvdsub_encode, + .encode_sub = dvdsub_encode, .long_name = NULL_IF_CONFIG_SMALL("DVD subtitles"), .priv_data_size = sizeof(DVDSubtitleContext), }; diff --git a/libavcodec/movtextenc.c b/libavcodec/movtextenc.c index 3f73f8b4bd..7f1b5b830f 100644 --- a/libavcodec/movtextenc.c +++ b/libavcodec/movtextenc.c @@ -104,10 +104,9 @@ static const ASSCodesCallbacks mov_text_callbacks = { }; static int mov_text_encode_frame(AVCodecContext *avctx, unsigned char *buf, - int bufsize, void *data) + int bufsize, const AVSubtitle *sub) { MovTextContext *s = avctx->priv_data; - AVSubtitle *sub = data; ASSDialog *dialog; int i, len, num; @@ -157,6 +156,6 @@ AVCodec ff_movtext_encoder = { .id = AV_CODEC_ID_MOV_TEXT, .priv_data_size = sizeof(MovTextContext), .init = mov_text_encode_init, - .encode = mov_text_encode_frame, + .encode_sub = mov_text_encode_frame, .close = mov_text_encode_close, }; diff --git a/libavcodec/srtenc.c b/libavcodec/srtenc.c index fa85ef543b..473c88f09a 100644 --- a/libavcodec/srtenc.c +++ b/libavcodec/srtenc.c @@ -233,10 +233,9 @@ static const ASSCodesCallbacks srt_callbacks = { }; static int srt_encode_frame(AVCodecContext *avctx, - unsigned char *buf, int bufsize, void *data) + unsigned char *buf, int bufsize, const AVSubtitle *sub) { SRTContext *s = avctx->priv_data; - AVSubtitle *sub = data; ASSDialog *dialog; int i, len, num; @@ -299,7 +298,7 @@ AVCodec ff_srt_encoder = { .id = AV_CODEC_ID_SRT, .priv_data_size = sizeof(SRTContext), .init = srt_encode_init, - .encode = srt_encode_frame, + .encode_sub = srt_encode_frame, .close = srt_encode_close, }; #endif @@ -312,7 +311,7 @@ AVCodec ff_subrip_encoder = { .id = AV_CODEC_ID_SUBRIP, .priv_data_size = sizeof(SRTContext), .init = srt_encode_init, - .encode = srt_encode_frame, + .encode_sub = srt_encode_frame, .close = srt_encode_close, }; #endif diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 30b0d21a5b..09b07e2423 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -134,7 +134,7 @@ static void avcodec_init(void) int av_codec_is_encoder(const AVCodec *codec) { - return codec && (codec->encode || codec->encode2); + return codec && (codec->encode_sub || codec->encode2); } int av_codec_is_decoder(const AVCodec *codec) @@ -804,7 +804,7 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code goto end; } if (codec->priv_class) { - *(const AVClass**)avctx->priv_data= codec->priv_class; + *(const AVClass**)avctx->priv_data = codec->priv_class; av_opt_set_defaults(avctx->priv_data); } } @@ -1407,7 +1407,7 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, return -1; } - ret = avctx->codec->encode(avctx, buf, buf_size, (void *)(intptr_t)sub); + ret = avctx->codec->encode_sub(avctx, buf, buf_size, sub); avctx->frame_number++; return ret; } diff --git a/libavcodec/xsubenc.c b/libavcodec/xsubenc.c index 210a9bfa75..cb2a908cad 100644 --- a/libavcodec/xsubenc.c +++ b/libavcodec/xsubenc.c @@ -111,9 +111,8 @@ static int make_tc(uint64_t ms, int *tc) } static int xsub_encode(AVCodecContext *avctx, unsigned char *buf, - int bufsize, void *data) + int bufsize, const AVSubtitle *h) { - AVSubtitle *h = data; uint64_t startTime = h->pts / 1000; // FIXME: need better solution... uint64_t endTime = startTime + h->end_display_time - h->start_display_time; int start_tc[4], end_tc[4]; @@ -211,10 +210,10 @@ static av_cold int xsub_encoder_init(AVCodecContext *avctx) } AVCodec ff_xsub_encoder = { - .name = "xsub", - .type = AVMEDIA_TYPE_SUBTITLE, - .id = AV_CODEC_ID_XSUB, - .init = xsub_encoder_init, - .encode = xsub_encode, - .long_name = NULL_IF_CONFIG_SMALL("DivX subtitles (XSUB)"), + .name = "xsub", + .type = AVMEDIA_TYPE_SUBTITLE, + .id = AV_CODEC_ID_XSUB, + .init = xsub_encoder_init, + .encode_sub = xsub_encode, + .long_name = NULL_IF_CONFIG_SMALL("DivX subtitles (XSUB)"), }; diff --git a/libavfilter/af_amix.c b/libavfilter/af_amix.c index cfe23159e2..9d0f998f62 100644 --- a/libavfilter/af_amix.c +++ b/libavfilter/af_amix.c @@ -549,7 +549,7 @@ AVFilter avfilter_af_amix = { .uninit = uninit, .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = NULL}}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_AUDIO, .config_props = config_output, diff --git a/libavfilter/af_channelsplit.c b/libavfilter/af_channelsplit.c index 06f786842f..81f91ad393 100644 --- a/libavfilter/af_channelsplit.c +++ b/libavfilter/af_channelsplit.c @@ -142,6 +142,6 @@ AVFilter avfilter_af_channelsplit = { .type = AVMEDIA_TYPE_AUDIO, .filter_samples = filter_samples, }, { NULL }}, - .outputs = (const AVFilterPad[]){{ NULL }}, + .outputs = NULL, .priv_class = &channelsplit_class, }; diff --git a/libavfilter/af_join.c b/libavfilter/af_join.c index 0e75602fd3..5e338f0efb 100644 --- a/libavfilter/af_join.c +++ b/libavfilter/af_join.c @@ -494,7 +494,7 @@ AVFilter avfilter_af_join = { .uninit = join_uninit, .query_formats = join_query_formats, - .inputs = (const AVFilterPad[]){{ NULL }}, + .inputs = NULL, .outputs = (const AVFilterPad[]){{ .name = "default", .type = AVMEDIA_TYPE_AUDIO, .config_props = join_config_output, diff --git a/libavfilter/asink_anullsink.c b/libavfilter/asink_anullsink.c index 506619bf1a..4eee5041df 100644 --- a/libavfilter/asink_anullsink.c +++ b/libavfilter/asink_anullsink.c @@ -41,5 +41,5 @@ AVFilter avfilter_asink_anullsink = { }, { .name = NULL}, }, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .outputs = NULL, }; diff --git a/libavfilter/asrc_anullsrc.c b/libavfilter/asrc_anullsrc.c index 5cdf126fd5..4e28e294af 100644 --- a/libavfilter/asrc_anullsrc.c +++ b/libavfilter/asrc_anullsrc.c @@ -126,7 +126,7 @@ AVFilter avfilter_asrc_anullsrc = { .init = init, .priv_size = sizeof(ANullContext), - .inputs = (const AVFilterPad[]) {{ .name = NULL}}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_AUDIO, diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index 3bac29d5ac..9f49a8b2b1 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -436,6 +436,9 @@ static int pad_count(const AVFilterPad *pads) { int count; + if (!pads) + return 0; + for(count = 0; pads->name; count ++) pads ++; return count; } diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index f98e0e40f3..b745c3c991 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -679,7 +679,7 @@ static void swap_channel_layouts_on_filter(AVFilterContext *filter) best_count_diff = count_diff; } } - av_assert1(best_idx>=0); + av_assert0(best_idx >= 0); FFSWAP(uint64_t, outlink->in_channel_layouts->channel_layouts[0], outlink->in_channel_layouts->channel_layouts[best_idx]); } diff --git a/libavfilter/buffersink.c b/libavfilter/buffersink.c index 50cd6d4e96..2e84fb4507 100644 --- a/libavfilter/buffersink.c +++ b/libavfilter/buffersink.c @@ -156,7 +156,7 @@ AVFilter avfilter_vsink_buffer = { .min_perms = AV_PERM_READ, .needs_fifo = 1 }, { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .outputs = NULL, }; AVFilter avfilter_asink_abuffer = { @@ -175,5 +175,5 @@ AVFilter avfilter_asink_abuffer = { .min_perms = AV_PERM_READ, .needs_fifo = 1 }, { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .outputs = NULL, }; diff --git a/libavfilter/buffersrc.c b/libavfilter/buffersrc.c index 25c6386d4e..db2db3a482 100644 --- a/libavfilter/buffersrc.c +++ b/libavfilter/buffersrc.c @@ -94,7 +94,7 @@ int av_buffersrc_add_frame(AVFilterContext *buffer_src, return ret; } -int av_buffersrc_write_frame(AVFilterContext *buffer_filter, AVFrame *frame) +int av_buffersrc_write_frame(AVFilterContext *buffer_filter, const AVFrame *frame) { return av_buffersrc_add_frame(buffer_filter, frame, 0); } @@ -409,7 +409,7 @@ AVFilter avfilter_vsrc_buffer = { .init = init_video, .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = NULL }}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_VIDEO, .request_frame = request_frame, @@ -428,7 +428,7 @@ AVFilter avfilter_asrc_abuffer = { .init = init_audio, .uninit = uninit, - .inputs = (const AVFilterPad[]) {{ .name = NULL }}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_AUDIO, .request_frame = request_frame, diff --git a/libavfilter/buffersrc.h b/libavfilter/buffersrc.h index d25316125f..7f3c8d8ec3 100644 --- a/libavfilter/buffersrc.h +++ b/libavfilter/buffersrc.h @@ -90,6 +90,6 @@ int av_buffersrc_buffer(AVFilterContext *s, AVFilterBufferRef *buf); * @warning frame data will be memcpy()ed, which may be a big performance * hit. Use av_buffersrc_buffer() to avoid copying the data. */ -int av_buffersrc_write_frame(AVFilterContext *s, AVFrame *frame); +int av_buffersrc_write_frame(AVFilterContext *s, const AVFrame *frame); #endif /* AVFILTER_BUFFERSRC_H */ diff --git a/libavfilter/split.c b/libavfilter/split.c index b0d36f34ce..e036a93f21 100644 --- a/libavfilter/split.c +++ b/libavfilter/split.c @@ -133,7 +133,7 @@ AVFilter avfilter_vf_split = { .draw_slice = draw_slice, .end_frame = end_frame, }, { .name = NULL}}, - .outputs = (const AVFilterPad[]) {{ .name = NULL}}, + .outputs = NULL, }; static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) @@ -169,5 +169,5 @@ AVFilter avfilter_af_asplit = { .get_audio_buffer = ff_null_get_audio_buffer, .filter_samples = filter_samples }, { .name = NULL }}, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .outputs = NULL, }; diff --git a/libavfilter/src_movie.c b/libavfilter/src_movie.c index f221286c02..41500f3e92 100644 --- a/libavfilter/src_movie.c +++ b/libavfilter/src_movie.c @@ -611,7 +611,7 @@ AVFilter avfilter_avsrc_movie = { .uninit = movie_uninit, .query_formats = movie_query_formats, - .inputs = (const AVFilterPad[]) {{ .name = NULL }}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = NULL }}, .priv_class = &movie_class, }; diff --git a/libavfilter/vf_frei0r.c b/libavfilter/vf_frei0r.c index b40a684b7c..cd0cd6b778 100644 --- a/libavfilter/vf_frei0r.c +++ b/libavfilter/vf_frei0r.c @@ -488,7 +488,7 @@ AVFilter avfilter_vsrc_frei0r_src = { .query_formats = query_formats, - .inputs = (const AVFilterPad[]) {{ .name = NULL}}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_VIDEO, diff --git a/libavfilter/vsink_nullsink.c b/libavfilter/vsink_nullsink.c index b5aae21f77..148b250f58 100644 --- a/libavfilter/vsink_nullsink.c +++ b/libavfilter/vsink_nullsink.c @@ -45,5 +45,5 @@ AVFilter avfilter_vsink_nullsink = { }, { .name = NULL}, }, - .outputs = (const AVFilterPad[]) {{ .name = NULL }}, + .outputs = NULL, }; diff --git a/libavfilter/vsrc_testsrc.c b/libavfilter/vsrc_testsrc.c index 524ba7050e..28d114e379 100644 --- a/libavfilter/vsrc_testsrc.c +++ b/libavfilter/vsrc_testsrc.c @@ -533,7 +533,7 @@ AVFilter avfilter_vsrc_testsrc = { .query_formats = test_query_formats, - .inputs = (const AVFilterPad[]) {{ .name = NULL}}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_VIDEO, @@ -647,7 +647,7 @@ AVFilter avfilter_vsrc_rgbtestsrc = { .query_formats = rgbtest_query_formats, - .inputs = (const AVFilterPad[]) {{ .name = NULL}}, + .inputs = NULL, .outputs = (const AVFilterPad[]) {{ .name = "default", .type = AVMEDIA_TYPE_VIDEO,