@Override public YUVPicture getFrame(Packet frame) throws IOException { ByteBuffer buf = frame.getData(); return decoder.decode(buf); }
@Override public void addFrame(Packet outPacket) throws IOException { ch.write(outPacket.getData().duplicate()); } }
@Override public YUVPicture getFrame(Packet frame) throws IOException { ByteBuffer buf = frame.getData(); return decoder.decode(buf); }
@Override public void addFrame(Packet outPacket) throws IOException { addSamples(outPacket.getData().duplicate()); }
@Override public Picture decodeFrame(Packet packet, byte[][] data) { return decoder.decodeFrame(packet.getData(), data); }
@Override public void addFrame(Packet outPacket) throws IOException { written += out.write(outPacket.getData()); }
@Override public Packet inputAudioPacket() throws IOException { if (audioInputTrack == null) return null; Packet audioPkt = audioInputTrack.nextFrame(); if (audioDecoder == null && audioPkt != null) { audioDecoder = createAudioDecoder(audioPkt.getData()); if (audioDecoder != null) audioCodecMeta = audioDecoder.getCodecMeta(audioPkt.getData()); } return audioPkt; }
@Override public void addFrame(Packet outPacket) { MkvBlock frame = keyFrame(trackNo, 0, outPacket.getData()); frame.absoluteTimecode = outPacket.getPts() - 1; trackBlocks.add(frame); }
@Override public void addFrame(Packet packet) throws IOException { NIOUtils.writeTo(packet.getData(), tildeExpand(format(fileNamePattern, frameNo++))); }
private Packet getNextVideoPacket() throws IOException { if (videoInputTrack == null) return null; Packet nextFrame = videoInputTrack.nextFrame(); // if (nextFrame != null) // Logger.debug(String.format("Input frame: pts=%d, duration=%d", // nextFrame.getPts(), nextFrame.getDuration())); if (videoDecoder == null) { videoDecoder = createVideoDecoder(inputVideoCodec.v2, downscale, nextFrame.getData(), null); if (videoDecoder != null) { videoCodecMeta = videoDecoder.getCodecMeta(nextFrame.getData()); } } return nextFrame; }
@Override public void skipFrame(Packet frame) throws IOException { updateState(frame); List<ByteBuffer> buffers = splitMOVPacket(frame.getData(), avcCBox); for (int i = 0; i < buffers.size(); i++) { decoder.skipFrame(buffers.get(i)); } }
private void detectFrameType(Packet inVideoPacket) { if (inputVideoCodec.v2 != Codec.H264) { return; } inVideoPacket.setFrameType( H264Utils.isByteBufferIDRSlice(inVideoPacket.getData()) ? FrameType.KEY : FrameType.INTER); }
@Override public void skipFrame(Packet frame) throws IOException { updateState(frame); List<ByteBuffer> buffers = splitMOVPacket(frame.getData(), avcCBox); for (int i = 0; i < buffers.size(); i++) { decoder.skipFrame(buffers.get(i)); } }
@Override public void addFrame(Packet pkt) throws IOException { if (!headerWritten) { frameRate = pkt.getTimescale(); writeHeader(); headerWritten = true; } ByteBuffer fh = ByteBuffer.allocate(12); fh.order(ByteOrder.LITTLE_ENDIAN); ByteBuffer frame = pkt.getData(); fh.putInt(frame.remaining()); fh.putLong(nFrames); fh.clear(); ch.write(fh); ch.write(frame); nFrames++; }
/* package-private */public YUVPicture getFrame(Packet frame) throws IOException { updateState(frame); List<ByteBuffer> buffers = splitMOVPacket(frame.getData(), avcCBox); YUVPicture picture = null; for (int i = 0; i < buffers.size(); i++) { YUVPicture decode = decoder.decodeFrame(buffers.get(i)); if (decode != null) { picture = decode; } } return picture; }
/* package-private */public YUVPicture getFrame(Packet frame) throws IOException { updateState(frame); List<ByteBuffer> buffers = splitMOVPacket(frame.getData(), avcCBox); YUVPicture picture = null; for (int i = 0; i < buffers.size(); i++) { YUVPicture decode = decoder.decodeFrame(buffers.get(i)); if (decode != null) { picture = decode; } } return picture; }
@Override public boolean canSeek(Packet pkt) { updateState(pkt); return H264Utils.idrSlice(H264Utils.splitFrame(pkt.getData())); }
private static Codec detectVideoDecoder(DemuxerTrack track) throws IOException { DemuxerTrackMeta meta = track.getMeta(); if (meta != null) { Codec codec = meta.getCodec(); if (codec != null) return codec; } Packet packet = track.nextFrame(); if (packet == null) return null; return JCodecUtil.detectDecoder(packet.getData()); }
@Override public Picture decodeFrame(Packet packet, byte[][] data) { updateState(packet); Picture pic = decoder.decodeFrame(packet.getData(), data); Rational pasp = meta.getVideoCodecMeta().getPixelAspectRatio(); if (pasp != null) { // TODO: transform } return pic; }
@Override public AudioFrameWithPacket getNextAudioFrame() throws IOException { Packet audioPkt = inputAudioPacket(); if (audioPkt == null) return null; AudioBuffer audioBuffer; if (inputAudioCodec.v2 == Codec.PCM) { DemuxerTrackMeta audioMeta = getAudioMeta(); audioBuffer = new AudioBuffer(audioPkt.getData(), audioMeta.getAudioCodecMeta().getFormat(), audioMeta.getTotalFrames()); } else { audioBuffer = audioDecoder.decodeFrame(audioPkt.getData(), null); } return new AudioFrameWithPacket(audioBuffer, audioPkt); }