protected EncodedFrame encodeVideo(Picture frame, ByteBuffer _out) { if (!outputFormat.isVideo()) return null; return videoEncoder.encodeFrame(frame, _out); }
@Override public ColorSpace getInputColor() { if (videoEncoder == null) throw new IllegalStateException("Video encoder has not been initialized, init() must be called before using this class."); ColorSpace[] colorSpaces = videoEncoder.getSupportedColorSpaces(); return colorSpaces == null ? null : colorSpaces[0]; }
@Override public void outputVideoFrame(VideoFrameWithPacket videoFrame) throws IOException { if (!outputFormat.isVideo() || outputVideoCodec == null) return; Packet outputVideoPacket; ByteBuffer buffer = bufferStore.get(); int bufferSize = videoEncoder.estimateBufferSize(videoFrame.getFrame().getPicture()); if (buffer == null || bufferSize < buffer.capacity()) { buffer = ByteBuffer.allocate(bufferSize); bufferStore.set(buffer); } buffer.clear(); Picture frame = videoFrame.getFrame().getPicture(); EncodedFrame enc = encodeVideo(frame, buffer); outputVideoPacket = Packet.createPacketWithData(videoFrame.getPacket(), NIOUtils.clone(enc.getData())); outputVideoPacket.setFrameType(enc.isKeyFrame() ? FrameType.KEY : FrameType.INTER); outputVideoPacket(outputVideoPacket, org.jcodec.common.VideoCodecMeta.createSimpleVideoCodecMeta(new Size(frame.getWidth(), frame.getHeight()), frame.getColor())); }