⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 listformats.java

📁 FMJ(freedom media for java)是java视频开发的新选择
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package net.sf.fmj.ffmpeg_java;import java.awt.Dimension;import java.nio.ByteOrder;import java.util.ArrayList;import java.util.List;import java.util.logging.Level;import java.util.logging.Logger;import javax.media.Format;import javax.media.format.AudioFormat;import javax.media.format.JPEGFormat;import javax.media.format.RGBFormat;import javax.media.format.VideoFormat;import javax.media.format.YUVFormat;import javax.media.protocol.ContentDescriptor;import net.sf.ffmpeg_java.AVCodecLibrary;import net.sf.ffmpeg_java.AVFormatLibrary;import net.sf.ffmpeg_java.AVUtilLibrary;import net.sf.ffmpeg_java.AVCodecLibrary.AVCodec;import net.sf.ffmpeg_java.AVCodecLibrary.AVCodecContext;import net.sf.ffmpeg_java.AVFormatLibrary.AVOutputFormat;import net.sf.fmj.utility.LoggerSingleton;/** *  * @author Stephan Goetter * */public class ListFormats{		private static final Logger logger = LoggerSingleton.logger;	static final int CODEC_TYPE_UNKNOWN = -1;	static final int CODEC_TYPE_VIDEO = 0;	static final int CODEC_TYPE_AUDIO = 1;	static final int CODEC_TYPE_DATA = 2;	static final int CODEC_TYPE_SUBTITLE = 3;	static final int CODEC_TYPE_NB = 4;	static final AVFormatLibrary AVFORMAT = AVFormatLibrary.INSTANCE;	static 	final AVCodecLibrary AVCODEC = AVCodecLibrary.INSTANCE;	static final AVUtilLibrary AVUTIL = AVUtilLibrary.INSTANCE;	public static void main(String[] args) throws Exception	{		AVFORMAT.av_register_all();				listMuxes();		listDecoder();		listEncoder();	}		static final String FIRST_FFMPEG_MUX_NAME = "ac3";	static final String FIRST_FFMPEG_DECODER_NAME = "aasc";	static final String FIRST_FFMPEG_ENCODER_NAME = "asv1";		public static ContentDescriptor[] getSupportedOutputContentDescriptors(Format[] formats){		// get content descriptors from ffmpeg		List contentDescriptors = listMuxes();		return (ContentDescriptor[])contentDescriptors.toArray(new ContentDescriptor[0]);	}		static List listMuxes(){		List contentDescriptors = new ArrayList();				int i = 1;		AVOutputFormat avOutputFormat = AVFORMAT.guess_format(FIRST_FFMPEG_MUX_NAME, null,null);		while (avOutputFormat != null){			String mimeType = null;			if (avOutputFormat.mime_type != null && avOutputFormat.mime_type.length() > 0) {				mimeType = avOutputFormat.mime_type;			}else{				mimeType = "ffmpeg/"+avOutputFormat.name;			}			System.out.println(i++ + ". " + avOutputFormat.name + " - " +avOutputFormat.long_name + " : " + mimeType);			logger.log(Level.FINEST, i++ + ". " + avOutputFormat.name + " - " + avOutputFormat.long_name + " : " + mimeType);			contentDescriptors.add(ContentDescriptor.mimeTypeToPackageName(mimeType));			if (avOutputFormat.next != null && avOutputFormat.next.isValid()) {				avOutputFormat = new AVOutputFormat(avOutputFormat.next);			}else{				avOutputFormat = null;			}		}		return contentDescriptors;	}		static void listDecoder(){		int i = 1;		AVCodec avCodec = AVCODEC.avcodec_find_decoder_by_name(FIRST_FFMPEG_DECODER_NAME);		while (avCodec != null){			logger.log(Level.FINEST, i++ + ". " + avCodec.name + " (" + getCodecType(avCodec.type) + ")");			if (avCodec.next != null && avCodec.next.isValid()) {				avCodec = new AVCodec(avCodec.next);			}else{				avCodec = null;			}		}	}		static void listEncoder(){		int i = 1;		AVCodec avCodec = AVCODEC.avcodec_find_decoder_by_name(FIRST_FFMPEG_ENCODER_NAME);		while (avCodec != null){			logger.log(Level.FINEST, i++ + ". " + avCodec.name + " (" + getCodecType(avCodec.type) + ")");			if (avCodec.next != null && avCodec.next.isValid()) {				avCodec = new AVCodec(avCodec.next);			}else{				avCodec = null;			}		}	}		static protected String getCodecType(int codecType){		String result = null;		switch (codecType){		case CODEC_TYPE_UNKNOWN:			result = "unknown";			break;		case CODEC_TYPE_VIDEO:			result = "video";			break;		case CODEC_TYPE_AUDIO:			result = "audio";			break;		case CODEC_TYPE_DATA:			result = "data";			break;		case CODEC_TYPE_SUBTITLE:			result = "subtitle";			break;		case CODEC_TYPE_NB:			result = "nb";			break;		}		return result;	}		final static int JPEG_QUALITY = 100;	    public static VideoFormat convertCodecPixelFormat(int pixFmt, int width, int height)    {    	VideoFormat result = null;    	final int red, green, blue, bitsPerPixel, pixelStride, lineStride, endianess;    	switch (pixFmt) {	    	case AVCodecLibrary.PIX_FMT_NONE:	    		throw new IllegalArgumentException();	    	case AVCodecLibrary.PIX_FMT_YUV420P:   ///< Planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)	    		// TODO: test it	    		result = new YUVFormat(YUVFormat.YUV_420);	    		break;	    	case AVCodecLibrary.PIX_FMT_YUYV422:   ///< Packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr	    		// TODO:	    		throw new IllegalArgumentException();	    	case AVCodecLibrary.PIX_FMT_RGB24:     ///< Packed RGB 8:8:8, 24bpp, RGBRGB...	    		// TODO: masks	        	red = 1;	        	green = 2;	        	blue = 3;	    		bitsPerPixel = 24;	        	result = new RGBFormat(new Dimension(width, height), -1, byte[].class, 1.f, bitsPerPixel, red, green, blue);    			break;	    	case AVCodecLibrary.PIX_FMT_BGR24:     ///< Packed RGB 8:8:8, 24bpp, BGRBGR...	    		// TODO: masks	        	red = 1;	        	green = 2;	        	blue = 3;	    		bitsPerPixel = 24;	        	result = new RGBFormat(new Dimension(width, height), -1, byte[].class, 1.f, bitsPerPixel, red, green, blue);    			break;	    	case AVCodecLibrary.PIX_FMT_YUV422P:   ///< Planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)	    		// TODO: test it	    		result = new YUVFormat(YUVFormat.YUV_422);    			break;	    	case AVCodecLibrary.PIX_FMT_YUV444P:   ///< Planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)	    		// TODO:	    		throw new IllegalArgumentException();	    	case AVCodecLibrary.PIX_FMT_RGB32:     ///< Packed RGB 8:8:8, 32bpp, (msb)8A 8R 8G 8B(lsb), in cpu endianness	    		// TODO: masks	    		red = 1;	    		green = 2;	    		blue = 3;	    		bitsPerPixel = 32;	    		endianess = getCpuEndianess();	    		pixelStride = 4;	    		lineStride = width*pixelStride;	    		result = new RGBFormat(new Dimension(width, height), -1, byte[].class, 1.f, bitsPerPixel, red, green, blue, pixelStride, lineStride, Format.FALSE, endianess);    			break;	    	case AVCodecLibrary.PIX_FMT_YUV410P:   ///< Planar YUV 4:1:0,  9bpp, (1 Cr & Cb sample per 4x4 Y samples)	    		// TODO:	    		throw new IllegalArgumentException();	    	case AVCodecLibrary.PIX_FMT_YUV411P:   ///< Planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)	    		// TODO: test it	    		result = new YUVFormat(YUVFormat.YUV_411);    			break;	    	case AVCodecLibrary.PIX_FMT_RGB565:    ///< Packed RGB 5:6:5, 16bpp, (msb)   5R 6G 5B(lsb), in cpu endianness	    		// TODO: masks	    		red = 1;	    		green = 2;	    		blue = 3;	    		bitsPerPixel = 16;	    		endianess = getCpuEndianess();	    		pixelStride = 2;	    		lineStride = width*pixelStride;	    		result = new RGBFormat(new Dimension(width, height), -1, byte[].class, 1.f, bitsPerPixel, red, green, blue, pixelStride, lineStride, Format.FALSE, endianess);    			break;	    	case AVCodecLibrary.PIX_FMT_RGB555:    ///< Packed RGB 5:5:5, 16bpp, (msb)1A 5R 5G 5B(lsb), in cpu endianness most significant bit to 0	    		// TODO: masks	    		red = 1;	    		green = 2;	    		blue = 3;	    		bitsPerPixel = 16;	    		endianess = getCpuEndianess();	    		pixelStride = 2;	    		lineStride = width*pixelStride;	    		result = new RGBFormat(new Dimension(width, height), -1, byte[].class, 1.f, bitsPerPixel, red, green, blue, pixelStride, lineStride, Format.FALSE, endianess);    			break;	    	case AVCodecLibrary.PIX_FMT_GRAY8:     ///<        Y        ,  8bpp	    		// TODO: test masks	    		red = 0xFF;	    		green = 0xFF;	    		blue = 0xFF;	    		bitsPerPixel = 8;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -