opencv / opencv

Open Source Computer Vision Library
https://opencv.org
Apache License 2.0
76.54k stars 55.64k forks source link

[WIP] WebP animation support #25608

Open sturkmen72 opened 4 weeks ago

sturkmen72 commented 4 weeks ago

related issues #24855 #22569

Pull Request Readiness Checklist

See details at https://github.com/opencv/opencv/wiki/How_to_contribute#making-a-good-pull-request

sturkmen72 commented 3 weeks ago

hi @asmorkalov. PR is in progress and not ready to review but could you start ci tests please.

asmorkalov commented 2 weeks ago

@vrabaud could you take a look?

sturkmen72 commented 2 weeks ago

when BUILD_WEBP = ON build is OK

but i can't understand the reason of error when BUILD_WEBP = OFF

i found the answer

we need link webpmux.lib and webpdemux.lib


/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp: In member function 'virtual bool cv::WebPDecoder::readData(cv::Mat&)':
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:195:13: error: 'WebPAnimDecoderOptions' was not declared in this scope
             WebPAnimDecoderOptions dec_options;
             ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:196:41: error: 'dec_options' was not declared in this scope
             WebPAnimDecoderOptionsInit(&dec_options);
                                         ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:196:52: error: 'WebPAnimDecoderOptionsInit' was not declared in this scope
             WebPAnimDecoderOptionsInit(&dec_options);
                                                    ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:198:71: error: 'WebPAnimDecoderNew' was not declared in this scope
             anim_decoder = WebPAnimDecoderNew(&webp_data, &dec_options);
                                                                       ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:209:62: error: 'WebPAnimDecoderGetNext' was not declared in this scope
         WebPAnimDecoderGetNext(anim_decoder, &buf, &timestamp);
                                                              ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp: In member function 'virtual bool cv::WebPDecoder::nextPage()':
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:260:53: error: 'WebPAnimDecoderHasMoreFrames' was not declared in this scope
     return WebPAnimDecoderHasMoreFrames(anim_decoder) > 0;
                                                     ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp: In member function 'virtual bool cv::WebPEncoder::writemulti(const std::vector<cv::Mat>&, const std::vector<int>&)':
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:368:5: error: 'WebPAnimEncoder' was not declared in this scope
     WebPAnimEncoder* anim_encoder = NULL;
     ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:368:22: error: 'anim_encoder' was not declared in this scope
     WebPAnimEncoder* anim_encoder = NULL;
                      ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:373:5: error: 'WebPAnimEncoderOptions' was not declared in this scope
     WebPAnimEncoderOptions anim_config;
     ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:381:38: error: 'anim_config' was not declared in this scope
     if (!WebPAnimEncoderOptionsInit(&anim_config) ||
                                      ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:381:49: error: 'WebPAnimEncoderOptionsInit' was not declared in this scope
     if (!WebPAnimEncoderOptionsInit(&anim_config) ||
                                                 ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:408:55: error: 'anim_config' was not declared in this scope
     anim_encoder = WebPAnimEncoderNew(width, height, &anim_config);
                                                       ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:408:66: error: 'WebPAnimEncoderNew' was not declared in this scope
     anim_encoder = WebPAnimEncoderNew(width, height, &anim_config);
                                                                  ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:419:74: error: 'WebPAnimEncoderAdd' was not declared in this scope
         ok = WebPAnimEncoderAdd(anim_encoder, &pic, timestamp_ms, &config);
                                                                          ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:424:53: error: 'WebPAnimEncoderAssemble' was not declared in this scope
     WebPAnimEncoderAssemble(anim_encoder, &assembled);
                                                     ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:427:73: error: 'WebPAnimEncoderAdd' was not declared in this scope
     ok = ok && WebPAnimEncoderAdd(anim_encoder, NULL, timestamp_ms, NULL);
                                                                         ^
/build/precommit_linux64/4.x/opencv/modules/imgcodecs/src/grfmt_webp.cpp:450:39: error: 'WebPAnimEncoderDelete' was not declared in this scope
     WebPAnimEncoderDelete(anim_encoder);
                                       ^
make[2]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_webp.cpp.o] Error 1
modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/build.make:230: recipe for target 'modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_webp.cpp.o' failed
make[2]: Leaving directory '/build/precommit_linux64/build'
CMakeFiles/Makefile2:7091: recipe for target 'modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all' failed
make[1]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 21%] Building CXX object modules/xphoto/CMakeFiles/opencv_xphoto.dir/src/oilpainting.cpp.o
sturkmen72 commented 1 week ago

https://pullrequest.opencv.org/buildbot/builders/precommit_linux64/builds/107697 (failure here may be caused by older installed version of libwebp) i did not understand and could not solved. any help is welcome.