FFmpeg
Macros | Enumerations
mjpeg.h File Reference

MJPEG encoder and decoder. More...

Go to the source code of this file.

Macros

#define PREDICT(ret, topleft, top, left, predictor)
 

Enumerations

enum  JpegMarker {
  SOF0 = 0xc0, SOF1 = 0xc1, SOF2 = 0xc2, SOF3 = 0xc3,
  SOF5 = 0xc5, SOF6 = 0xc6, SOF7 = 0xc7, JPG = 0xc8,
  SOF9 = 0xc9, SOF10 = 0xca, SOF11 = 0xcb, SOF13 = 0xcd,
  SOF14 = 0xce, SOF15 = 0xcf, DHT = 0xc4, DAC = 0xcc,
  RST0 = 0xd0, RST1 = 0xd1, RST2 = 0xd2, RST3 = 0xd3,
  RST4 = 0xd4, RST5 = 0xd5, RST6 = 0xd6, RST7 = 0xd7,
  SOI = 0xd8, EOI = 0xd9, SOS = 0xda, DQT = 0xdb,
  DNL = 0xdc, DRI = 0xdd, DHP = 0xde, EXP = 0xdf,
  APP0 = 0xe0, APP1 = 0xe1, APP2 = 0xe2, APP3 = 0xe3,
  APP4 = 0xe4, APP5 = 0xe5, APP6 = 0xe6, APP7 = 0xe7,
  APP8 = 0xe8, APP9 = 0xe9, APP10 = 0xea, APP11 = 0xeb,
  APP12 = 0xec, APP13 = 0xed, APP14 = 0xee, APP15 = 0xef,
  JPG0 = 0xf0, JPG1 = 0xf1, JPG2 = 0xf2, JPG3 = 0xf3,
  JPG4 = 0xf4, JPG5 = 0xf5, JPG6 = 0xf6, SOF48 = 0xf7,
  LSE = 0xf8, JPG9 = 0xf9, JPG10 = 0xfa, JPG11 = 0xfb,
  JPG12 = 0xfc, JPG13 = 0xfd, COM = 0xfe, TEM = 0x01
}
 

Detailed Description

MJPEG encoder and decoder.

Definition in file mjpeg.h.

Macro Definition Documentation

#define PREDICT (   ret,
  topleft,
  top,
  left,
  predictor 
)
Value:
switch(predictor){\
case 0: ret= 0; break;\
case 1: ret= left; break;\
case 2: ret= top; break;\
case 3: ret= topleft; break;\
case 4: ret= left + top - topleft; break;\
case 5: ret= left + ((top - topleft)>>1); break;\
case 6: ret= top + ((left - topleft)>>1); break;\
default:\
case 7: ret= (left + top)>>1; break;\
}
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2]...the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so...,+,-,+,-,+,+,-,+,-,+,...hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32-hcoeff[1]-hcoeff[2]-...a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2}an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||.........intra?||||:Block01:yes no||||:Block02:.................||||:Block03::y DC::ref index:||||:Block04::cb DC::motion x:||||.........:cr DC::motion y:||||.................|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------------------------------|||Y subbands||Cb subbands||Cr subbands||||------||------||------|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||------||------||------||||------||------||------|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||------||------||------||||------||------||------|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||------||------||------||||------||------||------|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------------------------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction------------|\Dequantization-------------------\||Reference frames|\IDWT|--------------|Motion\|||Frame 0||Frame 1||Compensation.OBMC v-------|--------------|--------------.\------> Frame n output Frame Frame<----------------------------------/|...|-------------------Range Coder:============Binary Range Coder:-------------------The implemented range coder is an adapted version based upon"Range encoding: an algorithm for removing redundancy from a digitised message."by G.N.N.Martin.The symbols encoded by the Snow range coder are bits(0|1).The associated probabilities are not fix but change depending on the symbol mix seen so far.bit seen|new state---------+-----------------------------------------------0|256-state_transition_table[256-old_state];1|state_transition_table[old_state];state_transition_table={0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:-------------------------FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1.the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
Definition: snow.txt:206

Definition at line 118 of file mjpeg.h.

Referenced by ljpeg_decode_rgb_scan(), ljpeg_decode_yuv_scan(), ljpeg_encode_bgr(), and ljpeg_encode_yuv_mb().

Enumeration Type Documentation

enum JpegMarker
Enumerator
SOF0 
SOF1 
SOF2 
SOF3 
SOF5 
SOF6 
SOF7 
JPG 
SOF9 
SOF10 
SOF11 
SOF13 
SOF14 
SOF15 
DHT 
DAC 
RST0 
RST1 
RST2 
RST3 
RST4 
RST5 
RST6 
RST7 
SOI 
EOI 
SOS 
DQT 
DNL 
DRI 
DHP 
EXP 
APP0 
APP1 
APP2 
APP3 
APP4 
APP5 
APP6 
APP7 
APP8 
APP9 
APP10 
APP11 
APP12 
APP13 
APP14 
APP15 
JPG0 
JPG1 
JPG2 
JPG3 
JPG4 
JPG5 
JPG6 
SOF48 

JPEG-LS.

LSE 

JPEG-LS extension parameters.

JPG9 
JPG10 
JPG11 
JPG12 
JPG13 
COM 
TEM 

Definition at line 37 of file mjpeg.h.