private int _prepareWrite(Dimension outputSize, ImageWriter w, ImageTypeSpecifier its, ImageWriteParam iwp, boolean useCache, Object output, Object dataSource, int _type) throws IOException, InterruptedException {
int ret = 0;
writeBlock.begin();
w = __getOutput(output, w, useCache);
IIOMetadata metadata = dataSource instanceof ImageReader ? ((ImageReader) dataSource).getImageMetadata(0) : null;
metadata = metadata instanceof IIOMetadata ? _getIIOMforImageType(w, metadata, its, iwp) : _getIIOMforDefaultImage(w, its, iwp);
IIOMetadata streamMetadata = dataSource instanceof ImageReader ? ((ImageReader) dataSource).getStreamMetadata() : null;
if (w.canWriteSequence()) {
ret |= _WRITE_SEQUENCE;
notifyIIOWriteListenersProgress(wTileProgList, w, 0);
w.prepareWriteSequence(_getIIOMforStream(w, streamMetadata, iwp));
if (w.canInsertEmpty(-1)) {