Package net.pms.encoders

Source Code of net.pms.encoders.RAWThumbnailer

package net.pms.encoders;

import net.pms.PMS;
import net.pms.configuration.PmsConfiguration;
import net.pms.dlna.DLNAMediaInfo;
import net.pms.dlna.DLNAResource;
import net.pms.formats.Format;
import net.pms.io.InternalJavaProcessImpl;
import net.pms.io.OutputParams;
import net.pms.io.ProcessWrapper;
import net.pms.io.ProcessWrapperImpl;
import net.pms.util.PlayerUtil;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.swing.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

public class RAWThumbnailer extends Player {
  private static final Logger logger = LoggerFactory.getLogger(RAWThumbnailer.class);
  private final PmsConfiguration configuration;
  public final static String ID = "rawthumbs";

  public RAWThumbnailer(PmsConfiguration configuration) {
    this.configuration = configuration;
  }

  protected String[] getDefaultArgs() {
    return new String[]{ "-e", "-c" };
  }

  @Override
  public String[] args() {
    return getDefaultArgs();
  }

  @Override
  public JComponent config() {
    return null;
  }

  @Override
  public String executable() {
    return configuration.getDCRawPath();
  }

  @Override
  public String id() {
    return ID;
  }

  @Override
  public ProcessWrapper launchTranscode(
    DLNAResource dlna,
    DLNAMediaInfo media,
    OutputParams params
  ) throws IOException {
    params.waitbeforestart = 1;
    params.minBufferSize = 1;
    params.maxBufferSize = 5;
    params.hidebuffer = true;
    final String filename = dlna.getSystemName();

    if (media == null || media.getThumb() == null) {
      return null;
    }

    if (media.getThumb().length == 0) {
      try {
        media.setThumb(getThumbnail(params, filename));
      } catch (Exception e) {
        logger.error("error extracting thumbnail", e);
        return null;
      }
    }

    byte copy[] = new byte[media.getThumb().length];
    System.arraycopy(media.getThumb(), 0, copy, 0, media.getThumb().length);
    media.setThumb(new byte[0]);

    ProcessWrapper pw = new InternalJavaProcessImpl(new ByteArrayInputStream(copy));
    return pw;
  }

  @Override
  public String mimeType() {
    return "image/jpeg";
  }

  @Override
  public String name() {
    return "dcraw Thumbnailer";
  }

  @Override
  public PlayerPurpose getPurpose() {
    return PlayerPurpose.MISC_PLAYER;
  }

  @Override
  public int type() {
    return Format.IMAGE;
  }

  // called from net.pms.formats.RAW.parse XXX even if the engine is disabled.
  // may also be called from launchTranscode
  public static byte[] getThumbnail(OutputParams params, String fileName) throws Exception {
    params.log = false;

    String cmdArray[] = new String[4];
    cmdArray[0] = PMS.getConfiguration().getDCRawPath();
    cmdArray[1] = "-e";
    cmdArray[2] = "-c";
    cmdArray[3] = fileName;
    ProcessWrapperImpl pw = new ProcessWrapperImpl(cmdArray, params);
    pw.runInSameThread();

    InputStream is = pw.getInputStream(0);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    int n = -1;
    byte buffer[] = new byte[4096];
    while ((n = is.read(buffer)) > -1) {
      baos.write(buffer, 0, n);
    }
    is.close();
    byte b[] = baos.toByteArray();
    baos.close();
    return b;
  }

  /**
   * {@inheritDoc}
   */
  @Override
  public boolean isCompatible(DLNAResource resource) {
    return PlayerUtil.isImage(resource, Format.Identifier.RAW);
  }
}
TOP

Related Classes of net.pms.encoders.RAWThumbnailer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.