@@ -360,20 +360,22 @@ void QRCodeEncoderImpl::generateQR(const std::string &input)
360360
361361 std::string input_info = input.substr (segment_begin, segment_end);
362362 string_itr += segment_end;
363+
363364int detected_version =versionAuto (input_info);
365+ int tmp_version_level = version_level;
364366if (detected_version == -1 )
365367CV_Error (Error::StsBadArg," The given input exceeds the maximum capacity of a QR code with the selected encoding mode and error correction level" );
366- else if (version_level ==0 )
367- version_level = detected_version;
368- else if (version_level < detected_version)
368+ else if (tmp_version_level ==0 )
369+ tmp_version_level = detected_version;
370+ else if (tmp_version_level < detected_version)
369371CV_Error (Error::StsBadArg," The given version is not suitable for the given input string length" );
370372
371373 payload.clear ();
372374 payload.reserve (MAX_PAYLOAD_LEN);
373375 format = vector<uint8_t > (15 ,255 );
374376 version_reserved = vector<uint8_t > (18 ,255 );
375- version_size = (21 + (version_level -1 ) *4 );
376- version_info = makePtr<VersionInfo>(version_info_database[version_level ]);
377+ version_size = (21 + (tmp_version_level -1 ) *4 );
378+ version_info = makePtr<VersionInfo>(version_info_database[tmp_version_level ]);
377379 cur_ecc_params = makePtr<BlockParams>(version_info->ecc [ecc_level]);
378380 original =Mat (Size (version_size, version_size), CV_8UC1,Scalar (255 ));
379381 masked_data = original.clone ();