then ff_mpv_encode_end() will be unnecessary in ff_mpv_encode_init() if it's failed. The FF_CODEC_CAP_INIT_CLEANUP flag is need for single thread, For multithread, it'll be cleanup still by AV_CODEC_CAP_FRAME_THREADS flag if have. Signed-off-by: Limin Wang <lance.lmwang@gmail.com>tags/n4.3
| @@ -107,6 +107,7 @@ AVCodec ff_flv_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, | .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, | ||||
| AV_PIX_FMT_NONE}, | AV_PIX_FMT_NONE}, | ||||
| .priv_class = &flv_class, | .priv_class = &flv_class, | ||||
| @@ -394,6 +394,7 @@ AVCodec ff_h261_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, | .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, | ||||
| AV_PIX_FMT_NONE }, | AV_PIX_FMT_NONE }, | ||||
| .priv_class = &h261_class, | .priv_class = &h261_class, | ||||
| @@ -415,6 +415,7 @@ AVCodec ff_mjpeg_encoder = { | |||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS, | .capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]) { | .pix_fmts = (const enum AVPixelFormat[]) { | ||||
| AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE | AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ422P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_NONE | ||||
| }, | }, | ||||
| @@ -440,6 +441,7 @@ AVCodec ff_amv_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = amv_encode_picture, | .encode2 = amv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]) { | .pix_fmts = (const enum AVPixelFormat[]) { | ||||
| AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE | AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE | ||||
| }, | }, | ||||
| @@ -1399,5 +1399,6 @@ AVCodec ff_mpeg4_encoder = { | |||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS, | .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .priv_class = &mpeg4enc_class, | .priv_class = &mpeg4enc_class, | ||||
| }; | }; | ||||
| @@ -1060,7 +1060,6 @@ FF_ENABLE_DEPRECATION_WARNINGS | |||||
| return 0; | return 0; | ||||
| fail: | fail: | ||||
| ff_mpv_encode_end(avctx); | |||||
| return AVERROR_UNKNOWN; | return AVERROR_UNKNOWN; | ||||
| } | } | ||||
| @@ -4743,6 +4742,7 @@ AVCodec ff_h263_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts= (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, | .pix_fmts= (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, | ||||
| .priv_class = &h263_class, | .priv_class = &h263_class, | ||||
| }; | }; | ||||
| @@ -4772,6 +4772,7 @@ AVCodec ff_h263p_encoder = { | |||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .capabilities = AV_CODEC_CAP_SLICE_THREADS, | .capabilities = AV_CODEC_CAP_SLICE_THREADS, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .priv_class = &h263p_class, | .priv_class = &h263p_class, | ||||
| }; | }; | ||||
| @@ -4792,6 +4793,7 @@ AVCodec ff_msmpeg4v2_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .priv_class = &msmpeg4v2_class, | .priv_class = &msmpeg4v2_class, | ||||
| }; | }; | ||||
| @@ -4812,6 +4814,7 @@ AVCodec ff_msmpeg4v3_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .priv_class = &msmpeg4v3_class, | .priv_class = &msmpeg4v3_class, | ||||
| }; | }; | ||||
| @@ -4832,6 +4835,7 @@ AVCodec ff_wmv1_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .priv_class = &wmv1_class, | .priv_class = &wmv1_class, | ||||
| }; | }; | ||||
| @@ -79,6 +79,7 @@ AVCodec ff_rv10_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .priv_class = &rv10_class, | .priv_class = &rv10_class, | ||||
| }; | }; | ||||
| @@ -76,6 +76,7 @@ AVCodec ff_rv20_encoder = { | |||||
| .init = ff_mpv_encode_init, | .init = ff_mpv_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | .pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, | ||||
| .priv_class = &rv20_class, | .priv_class = &rv20_class, | ||||
| }; | }; | ||||
| @@ -231,6 +231,7 @@ AVCodec ff_wmv2_encoder = { | |||||
| .init = wmv2_encode_init, | .init = wmv2_encode_init, | ||||
| .encode2 = ff_mpv_encode_picture, | .encode2 = ff_mpv_encode_picture, | ||||
| .close = ff_mpv_encode_end, | .close = ff_mpv_encode_end, | ||||
| .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, | |||||
| .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, | .pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, | ||||
| AV_PIX_FMT_NONE }, | AV_PIX_FMT_NONE }, | ||||
| }; | }; | ||||