JpegSource

From Avisynth wiki
(Difference between revisions)
Jump to: navigation, search
m (Syntax and Parameters)
(documentation update)
Line 6: Line 6:
 
| Source filters  
 
| Source filters  
 
| Free for non-commercial use, closed source.
 
| Free for non-commercial use, closed source.
|}}
+
|6=[http://forum.doom9.org/showthread.php?t=170028 Doom9 Thread]}}
 
<br>
 
<br>
 
== Description ==
 
== Description ==
:An advanced JPEG decoder for AviSynth 2.6 which decodes JPEGs directly in their native colorspace. In addition, JpegSource
+
An advanced JPEG decoder for AviSynth 2.6 which decodes JPEGs directly in their native colorspace. In addition, JpegSource has an optional reconstruction pass that can only be done during the decoding stage. This process can accurately suppress common JPEG artifacts (blocking, ringing/mosquito noise, etc). The reconstruction pass is harmless on high quality JPEGs but can produce excellent results on highly compressed JPEGs. This technique yields better results than other post-processing methods.
:has an optional reconstruction pass that can only be done during the decoding stage. This process can accurately suppress  
+
 
:common JPEG artifacts (blocking, ringing/mosquito noise, etc). The reconstruction pass is harmless on high quality JPEGs but
+
:can produce excellent results on highly compressed JPEGs. This technique yields better results than other post-processing methods.
+
<br>
+
  
 
== Supported Formats ==  
 
== Supported Formats ==  
:JpegSource supports just about every kind of JPEG file, but due to lack of colorspace support in AviSynth some formats  
+
JpegSource supports just about every kind of JPEG file, but due to lack of colorspace support in AviSynth some formats need additional steps to load:
:need additional steps to load:  
+
 
 +
:*YUV440 JPEGs - channels have to be loaded individually, see the [[JpegSource#Examples|examples]] below.
 +
:*CMYK/YCCK JPEGs - channels have to be loaded individually.
 +
:*RGB encoded JPEGs - to load correctly see the [[JpegSource#Examples|examples]] below.
 +
:*RGB JPEGs other than 4:4:4 have to be loaded manually and converted to a supported format manually.
 +
 
 +
This may seem cumbersome but the idea of this source filter is to provide the actual encoded data without any colorspace conversions or resizes (these are usually really poor quality in other decoders).<br>
 +
AviSynth colorspace support is quite limited, fortunately most common JPEG formats are natively supported in AviSynth 2.6 (Y8, YV12, YV16, YV24 and YV411).
  
::*YUV440 JPEGs - channels have to be loaded individually.
 
::*CMYK/YCCK JPEGs - channels have to be loaded individually.
 
::*RGB encoded JPEGs - to load correctly see the [[JpegSource#Examples|examples]] below.
 
 
<br>
 
<br>
  
== Requirements: ==
+
== Requirements ==
:- [http://forum.doom9.org/showthread.php?t=168764 AviSynth 2.6.0 Alpha5] or later
+
*[http://forum.doom9.org/showthread.php?t=168764 AviSynth 2.6.0 Alpha5] or later
:- Supported color formats: [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]
+
*Supported color formats: [[Y8]], [[YV12]], [[YV16]], [[YV24]], [[YV411]]
  
:- [[SSE2]] capbale CPU / [[SSSE3]] capable CPU for reconstruction pass only  
+
*[[SSE2]] capbale CPU / [[SSSE3]] capable CPU for reconstruction pass only  
 
<br>
 
<br>
 
== [[Script variables|Syntax and Parameters]] ==
 
== [[Script variables|Syntax and Parameters]] ==
:{{Template:FuncDef2|JpegSource (''string'' file, ''int'' "rec", ''int'' "channel", ''int'' "length", ''float'' "fps_num", ''int'' "fps_den")}}
+
:{{Template:FuncDef|JpegSource (''string'' file, ''int'' "rec", ''int'' "channel", ''int'' "length", ''float'' "fps_num", ''int'' "fps_den")}}
 
<br>
 
<br>
::{{Par3|file|string| }}
+
::{{Par2|file|string| }}
 
:::Path to image file. Path can be omitted if the script is in the same folder as the image file.
 
:::Path to image file. Path can be omitted if the script is in the same folder as the image file.
 
<br>
 
<br>
::{{Par3|rec|int|1}}
+
::{{Par2|rec|int|1}}
 
:::Number of reconstruction passes; set to 0 to disable.
 
:::Number of reconstruction passes; set to 0 to disable.
 
<br>
 
<br>
::{{Par3|channel|int|-1}}
+
::{{Par2|channel|int|-1}}
 
:::Load only one image channel with specified index (zero based).  
 
:::Load only one image channel with specified index (zero based).  
  
Line 48: Line 49:
 
::::3 : load 4th channel (only for CMYK/YCCK JPEGs)
 
::::3 : load 4th channel (only for CMYK/YCCK JPEGs)
 
<br>
 
<br>
::{{Par3|length|int|1000}}
+
::{{Par2|length|int|1000}}
 
:::Clip length in frames.
 
:::Clip length in frames.
 
<br>
 
<br>
::{{Par3|fps_num|float|24}}
+
::{{Par2|fps_num|float|24}}
 
:::FPS numerator.
 
:::FPS numerator.
 
<br>
 
<br>
::{{Par3|fps_den|int|1}}
+
::{{Par2|fps_den|int|1}}
 
:::FPS denominator.
 
:::FPS denominator.
 
<br>
 
<br>
Line 62: Line 63:
 
  JpegSource("image.jpg", rec=1, channel=-1, length=1000, fps_num=24, fps_den=1)
 
  JpegSource("image.jpg", rec=1, channel=-1, length=1000, fps_num=24, fps_den=1)
 
<br>
 
<br>
Correctly display an RGB encoded JPEG:
+
Correctly display a 4:4:4 RGB encoded JPEG:
 
  JpegSource("RGBimage.jpg")
 
  JpegSource("RGBimage.jpg")
 
  [[MergeRGB]](last, UToY8(), VToY8(), "RGB24")
 
  [[MergeRGB]](last, UToY8(), VToY8(), "RGB24")
 +
<br>
 +
Load and convert a 4:4:0 subsampled JPEG to 4:4:4 ([[YV24]]):
 +
source = "440image.jpg"<br>
 +
Y = JpegSource(source, channel=0)
 +
U = JpegSource(source, channel=1).Spline36Resize(Y.width(), Y.height())
 +
V = JpegSource(source, channel=2).Spline36Resize(Y.width(), Y.height())<br>
 +
[[YToUV]](U,V,Y)
 
<br>
 
<br>
 
== Changelog ==
 
== Changelog ==
Line 78: Line 86:
 
== External Links ==
 
== External Links ==
 
*[http://forum.doom9.org/showthread.php?t=170028 Doom9 Forum] - JpegSource discussion.
 
*[http://forum.doom9.org/showthread.php?t=170028 Doom9 Forum] - JpegSource discussion.
 +
*[http://dougkerr.net/Pumpkin/articles/Subsampling.pdf Subsampling.pdf] - pages 3-6 has good information on JPEG subsampling and chroma placement ("centered" and "co-sited").
 +
*[http://www.poynton.com/PDFs/Chroma_subsampling_notation.pdf Chroma_subsampling_notation.pdf] - Page 2 describes JPEG/JFIF, H.261, and MPEG-1 as having the same chroma placement.
 
<br>
 
<br>
 
<br>
 
<br>

Revision as of 02:00, 9 September 2014

Abstract
Author SEt
Version 2014.4.19
Download JpegSource_20140419.7z
Category Source filters
License Free for non-commercial use, closed source.
Discussion Doom9 Thread


Contents

Description

An advanced JPEG decoder for AviSynth 2.6 which decodes JPEGs directly in their native colorspace. In addition, JpegSource has an optional reconstruction pass that can only be done during the decoding stage. This process can accurately suppress common JPEG artifacts (blocking, ringing/mosquito noise, etc). The reconstruction pass is harmless on high quality JPEGs but can produce excellent results on highly compressed JPEGs. This technique yields better results than other post-processing methods.


Supported Formats

JpegSource supports just about every kind of JPEG file, but due to lack of colorspace support in AviSynth some formats need additional steps to load:

  • YUV440 JPEGs - channels have to be loaded individually, see the examples below.
  • CMYK/YCCK JPEGs - channels have to be loaded individually.
  • RGB encoded JPEGs - to load correctly see the examples below.
  • RGB JPEGs other than 4:4:4 have to be loaded manually and converted to a supported format manually.

This may seem cumbersome but the idea of this source filter is to provide the actual encoded data without any colorspace conversions or resizes (these are usually really poor quality in other decoders).
AviSynth colorspace support is quite limited, fortunately most common JPEG formats are natively supported in AviSynth 2.6 (Y8, YV12, YV16, YV24 and YV411).


Requirements

  • SSE2 capbale CPU / SSSE3 capable CPU for reconstruction pass only


Syntax and Parameters

JpegSource (string file, int "rec", int "channel", int "length", float "fps_num", int "fps_den")


string  file =
Path to image file. Path can be omitted if the script is in the same folder as the image file.


int  rec = 1
Number of reconstruction passes; set to 0 to disable.


int  channel = -1
Load only one image channel with specified index (zero based).
-1 : load all channels
0 : load 1st channel
1 : load 2nd channel
2 : load 3rd channel
3 : load 4th channel (only for CMYK/YCCK JPEGs)


int  length = 1000
Clip length in frames.


float  fps_num = 24
FPS numerator.


int  fps_den = 1
FPS denominator.


Examples

JpegSource with default settings:

JpegSource("image.jpg", rec=1, channel=-1, length=1000, fps_num=24, fps_den=1)


Correctly display a 4:4:4 RGB encoded JPEG:

JpegSource("RGBimage.jpg")
MergeRGB(last, UToY8(), VToY8(), "RGB24")


Load and convert a 4:4:0 subsampled JPEG to 4:4:4 (YV24):

source = "440image.jpg"
Y = JpegSource(source, channel=0) U = JpegSource(source, channel=1).Spline36Resize(Y.width(), Y.height()) V = JpegSource(source, channel=2).Spline36Resize(Y.width(), Y.height())
YToUV(U,V,Y)


Changelog

Version        Date            Changes
2014.4.19 04/19/2010 - Added single-channel mode, so you can load pretty much every JPEG you can encounter even when Avisynth doesn't have an appropriate colorspace.
2014.4.18 04/18/2014 - Support JPEGs with arithmetic compression. - No longer locks files after first frame was decoded. - Added MT and cache hints for AviSynth+. - Changed compiler to VS2013.
2014.1.5 01/05/2014 - Initial release


External Links





Back to External Filters

Personal tools