View Issue Details

IDProjectCategoryView StatusLast Update
0000029JVT JM H.264/AVC reference softwaredecoderpublic2007-03-01 15:53
ReporterEvgeny Kamninsky Assigned ToKarsten Suehring  
PrioritynormalSeverityblockReproducibilityalways
Status resolvedResolutionfixed 
Product VersionJM 10.2 
Fixed in VersionJM 12.2 
Summary0000029: If IPCM coded MB/s appear/s anyway in a frame (excluding the last MB) the JM10.2/11 decoder is blocked
DescriptionDear JM software team,

please fix the following problem:

I need to force IPCM mode for a few MBs in I and P slices.
However, that is not possible in the following way:

If all MBs from (i) to the last MB in the frame (99) are IPCM coded the decoder works well.

But, if the j – th/s (i<j<99) MB/MBs has/have coded other than IPCM mode the decoder is blocked.

However, to illuminate this issue please see below my code for forcing the IPCM coding mode for MB=88, in P_slices in the "mode_decision.c" (JM10.2 encoder):

//Start of JM code.......................
//…
{ // Skip intra modes in inter slices if best inter mode is
            // a MB partition and cbp is 0.
            if (input->SkipIntraInInterSlices && !intra && mode >= I16MB
              && best_mode <=3 && currMB->cbp == 0)
              continue;
//end of JM10.2 code

//##################################################################
//Force IPCM mode for MB=88 in the P_SLICEs 16.01.07--------------
           /*if (img->current_mb_nr == 88 && img->type ==P_SLICE)
            {
                for (i=0; i < 11; i++)
                {
                    enc_mb.valid[i] = 0;
                }
            }
//---------------------End Force IPCM mode for MB=88 in the P_SLICEs
//##########################################################################

// Start of JM10.2 code:
if (enc_mb.valid[mode])
              compute_mode_RD_cost(mode, currMB, enc_mb, &min_rdcost, &min_rate, i16mode, bslice, &inter_skip);
//…
//.......................End of JM code


P.S. However, the JM10.2 encoder runs well for all situations explained above.


Best Regards,

Evgeny Kaminsky

 

 
Additional InformationPlease, find attached the encoder_basilene.cfg.
 
TagsNo tags attached.

Activities

2007-01-16 20:28

 

encoder_baseline.cfg (13,464 bytes)   
# New Input File Format is as follows
# <ParameterName> = <ParameterValue> # Comment
#
# See configfile.h for a list of supported ParameterNames


##########################################################################################
# Files
##########################################################################################
InputFile             = "foreman_qcif_30Hz.yuv"       # Input sequence
InputHeaderLength     = 0      # If the inputfile has a header, state it's length in byte here 
StartFrame            = 0      # Start frame for encoding. (0-N)
FramesToBeEncoded     = 50      # Number of frames to be coded
FrameRate             = 30.0   # Frame Rate per second (0.1-100.0)
SourceWidth           = 176    # Frame width
SourceHeight          = 144    # Frame height
TraceFile             = "trace_enc.txt"
ReconFile             = "test_rec.yuv"
OutputFile            = "test.264"

##########################################################################################
# Encoder Control
##########################################################################################
ProfileIDC            = 66  # Profile IDC (66=baseline, 77=main, 88=extended)
LevelIDC              = 30  # Level IDC   (e.g. 20 = level 2.0)

IntraPeriod           =  0  # Period of I-Frames (0=only first)
IDRIntraEnable        =  0  # Force IDR Intra  (0=disable 1=enable)
QPISlice              = 28  # Quant. param for I Slices (0-51)
QPPSlice              = 28  # Quant. param for P Slices (0-51)
FrameSkip             =  0  # Number of frames to be skipped in input (e.g 2 will code every third frame)
ChromaQPOffset        =  0  # Chroma QP offset (-51..51)
UseHadamard           =  1  # Hadamard transform (0=not used, 1=used)
SearchRange           = 16  # Max search range
NumberReferenceFrames =  1  # Number of previous frames used for inter motion search (1-16)
PList0References      =  0  # P slice List 0 reference override (0 disable, N <= NumberReferenceFrames)
Log2MaxFNumMinus4     =  0  # Sets log2_max_frame_num_minus4 (-1 : based on FramesToBeEncoded/Auto, >=0 : Log2MaxFNumMinus4)
Log2MaxPOCLsbMinus4   = -1  # Sets log2_max_pic_order_cnt_lsb_minus4 (-1 : Auto, >=0 : Log2MaxPOCLsbMinus4)
MbLineIntraUpdate     =  0  # Error robustness(extra intra macro block updates)(0=off, N: One GOB every N frames are intra coded)
RandomIntraMBRefresh  =  0  # Forced intra MBs per picture
InterSearch16x16      =  1  # Inter block search 16x16 (0=disable, 1=enable)
InterSearch16x8       =  1  # Inter block search 16x8  (0=disable, 1=enable)
InterSearch8x16       =  1  # Inter block search  8x16 (0=disable, 1=enable)
InterSearch8x8        =  1  # Inter block search  8x8  (0=disable, 1=enable)
InterSearch8x4        =  1  # Inter block search  8x4  (0=disable, 1=enable)
InterSearch4x8        =  1  # Inter block search  4x8  (0=disable, 1=enable)
InterSearch4x4        =  1  # Inter block search  4x4  (0=disable, 1=enable)
UseFME                =  2  # Use fast motion estimation (0=disable, 1=UMHexagonS, 2=Simplified UMHexagonS)

##########################################################################################
# B Slices
##########################################################################################

NumberBFrames         =  0  # Number of B coded frames inserted (0=not used)  
QPBSlice              = 30  # Quant. param for B slices (0-51)
BRefPicQPOffset       =  0  # Quantization offset for reference B coded pictures (-51..51)
DirectModeType        =  1  # Direct Mode Type (0:Temporal 1:Spatial)
DirectInferenceFlag   =  1  # Direct Inference Flag (0: Disable 1: Enable)
BList0References      =  0  # B slice List 0 reference override (0 disable, N <= NumberReferenceFrames)
BList1References      =  1  # B slice List 1 reference override (0 disable, N <= NumberReferenceFrames)
                            # 1 List1 reference is usually recommended for normal GOP Structures. 
                            # A larger value is usually more appropriate if a more flexible 
                            # structure is used (i.e. using PyramidCoding)

BReferencePictures    =  0  # Referenced B coded pictures (0=off, 1=on)

PyramidCoding         =  0  # B pyramid (0= off, 1= 2 layers, 2= 2 full pyramid, 3 = explicit)
ExplicitPyramidFormat = "b1r30b3r20b2e34b0e30b4r22" # Explicit Enhancement GOP. Format is {FrameDisplay_orderReferenceQP}. 
                                                    # Valid values for reference type is r:reference, e:non reference.
PyramidRefReorder     =  1  # Reorder References according to Poc distance for PyramidCoding (0=off, 1=enable)
PocMemoryManagement   =  1  # Memory management based on Poc Distances for PyramidCoding (0=off, 1=on)

##########################################################################################
# SP Frames
##########################################################################################

SPPicturePeriodicity  =  0  # SP-Picture Periodicity (0=not used)
QPSPSlice             = 28  # Quant. param of SP-Slices for Prediction Error (0-51)
QPSP2Slice            = 27  # Quant. param of SP-Slices for Predicted Blocks (0-51)


##########################################################################################
# Output Control, NALs
##########################################################################################

SymbolMode             =  0  # Symbol mode (Entropy coding method: 0=UVLC, 1=CABAC)
OutFileMode            =  0  # Output file mode, 0:Annex B, 1:RTP
PartitionMode          =  0  # Partition Mode, 0: no DP, 1: 3 Partitions per Slice

##########################################################################################
# CABAC context initialization
##########################################################################################

ContextInitMethod        =  0     # Context init (0: fixed, 1: adaptive)
FixedModelNumber         =  0     # model number for fixed decision for inter slices ( 0, 1, or 2 )

##########################################################################################
# Interlace Handling
#########################################################################################

PicInterlace             =  0     # Picture AFF    (0: frame coding, 1: field coding, 2:adaptive frame/field coding)
MbInterlace              =  0     # Macroblock AFF (0: frame coding, 1: field coding, 2:adaptive frame/field coding, 3:combined with PicInterlace=0, to do frame MBAFF))
IntraBottom              =  0     # Force Intra Bottom at GOP Period

##########################################################################################
# Weighted Prediction
#########################################################################################

WeightedPrediction       =  0     # P picture Weighted Prediction (0=off, 1=explicit mode)  
WeightedBiprediction     =  0     # B picture Weighted Prediciton (0=off, 1=explicit mode,  2=implicit mode)  
UseWeightedReferenceME   =  0     # Use weighted reference for ME (0=off, 1=on)

##########################################################################################
# Loop filter parameters
##########################################################################################

LoopFilterParametersFlag = 0      # Configure loop filter (0=parameter below ingored, 1=parameters sent)
LoopFilterDisable        = 0      # Disable loop filter in slice header (0=Filter, 1=No Filter)
LoopFilterAlphaC0Offset  = 0      # Alpha & C0 offset div. 2, {-6, -5, ... 0, +1, .. +6}
LoopFilterBetaOffset     = 0      # Beta offset div. 2, {-6, -5, ... 0, +1, .. +6}

##########################################################################################
# Error Resilience / Slices
##########################################################################################

SliceMode             =  0   # Slice mode (0=off 1=fixed #mb in slice 2=fixed #bytes in slice 3=use callback)
SliceArgument         = 50   # Slice argument (Arguments to modes 1 and 2 above)

num_slice_groups_minus1 = 0  # Number of Slice Groups Minus 1, 0 == no FMO, 1 == two slice groups, etc.
slice_group_map_type   	= 0  # 0:  Interleave, 1: Dispersed,    2: Foreground with left-over, 
                             # 3:  Box-out,    4: Raster Scan   5: Wipe
                             # 6:  Explicit, slice_group_id read from SliceGroupConfigFileName
slice_group_change_direction_flag = 0    # 0: box-out clockwise, raster scan or wipe right, 
                                         # 1: box-out counter clockwise, reverse raster scan or wipe left
slice_group_change_rate_minus1    = 85   # 
SliceGroupConfigFileName          = "sg0conf.cfg"   # Used for slice_group_map_type 0, 2, 6

UseRedundantSlice     = 0    # 0: not used, 1: one redundant slice used for each slice (other modes not supported yet)

##########################################################################################
# Search Range Restriction / RD Optimization 
##########################################################################################

RestrictSearchRange  =  2  # restriction for (0: blocks and ref, 1: ref, 2: no restrictions)
RDOptimization       =  1  # rd-optimized mode decision 
                           # 0: RD-off (Low complexity mode)
                           # 1: RD-on (High complexity mode)
                           # 2: RD-on (Fast high complexity mode - not work in FREX Profiles)
                           # 3: with losses
DisableThresholding  =  0  # Disable Thresholding of Transform Coefficients (0:off, 1:on)
DisableBSkipRDO      =  0  # Disable B Skip Mode consideration from RDO Mode decision (0:off, 1:on)

LossRateA            = 10  # expected packet loss rate of the channel for the first partition, only valid if RDOptimization = 2
LossRateB            =  0  # expected packet loss rate of the channel for the second partition, only valid if RDOptimization = 2
LossRateC            =  0  # expected packet loss rate of the channel for the third partition, only valid if RDOptimization = 2
NumberOfDecoders     = 30  # Numbers of decoders used to simulate the channel, only valid if RDOptimization = 2
RestrictRefFrames    =  0  # Doesnt allow reference to areas that have been intra updated in a later frame.

##########################################################################################
# Additional Stuff
#########################################################################################

UseConstrainedIntraPred  =  0  # If 1, Inter pixels are not used for Intra macroblock prediction.
LastFrameNumber          =  0  # Last frame number that have to be coded (0: no effect)
ChangeQPI                = 16  # QP (I-slices)  for second part of sequence (0-51)
ChangeQPP                = 16  # QP (P-slices)  for second part of sequence (0-51)
ChangeQPB                = 18  # QP (B-slices)  for second part of sequence (0-51)
ChangeQPBSRefOffset      =  2  # QP offset (stored B-slices)  for second part of sequence (-51..51)
ChangeQPStart            =  0  # Frame no. for second part of sequence (0: no second part)

NumberofLeakyBuckets     =  8                      # Number of Leaky Bucket values
LeakyBucketRateFile      =  "leakybucketrate.cfg"  # File from which encoder derives rate values
LeakyBucketParamFile     =  "leakybucketparam.cfg" # File where encoder stores leakybucketparams

NumberFramesInEnhancementLayerSubSequence  = 0  # number of frames in the Enhanced Scalability Layer(0: no Enhanced Layer)
NumberOfFrameInSecondIGOP                  = 0  # Number of frames to be coded in the second IGOP

SparePictureOption        =  0   # (0: no spare picture info, 1: spare picture available)
SparePictureDetectionThr  =  6   # Threshold for spare reference pictures detection
SparePicturePercentageThr = 92   # Threshold for the spare macroblock percentage

PicOrderCntType           = 0    # (0: POC mode 0, 1: POC mode 1, 2: POC mode 2)

########################################################################################
#Rate control
########################################################################################

RateControlEnable    =      0   # 0 Disable, 1 Enable
Bitrate              =  80000   # Bitrate(bps)
InitialQP            =     27   # Initial Quantization Parameter for the first I frame
                                # InitialQp depends on two values: Bits Per Picture,
                                # and the GOP length
BasicUnit            =     11   # Number of MBs in the basic unit
                                # should be a fractor of the total number 
                                # of MBs in a frame
ChannelType          =      0   # type of channel( 1=time varying channel; 0=Constant channel)

########################################################################################
#Fast Mode Decision
########################################################################################
EarlySkipEnable      =      0   # Early skip detection (0: Disable 1: Enable)
SelectiveIntraEnable =      0   # Selective Intra mode decision (0: Disable 1: Enable)
########################################################################################
EnableIPCM             = 1  # Enable IPCM macroblock mode
encoder_baseline.cfg (13,464 bytes)   

Karsten Suehring

2007-03-01 15:53

administrator   ~0000058

I think, I fixed that in my development tree.

I_PCM with CABAC had three bugs:
- ctx_inc selection for chroma intra prediction mode
- mb_type binarization
- deblocking filter (chroma QP)

Issue History

Date Modified Username Field Change
2007-01-16 20:28 Evgeny Kamninsky New Issue
2007-01-16 20:28 Evgeny Kamninsky File Added: encoder_baseline.cfg
2007-03-01 15:50 Karsten Suehring Status new => assigned
2007-03-01 15:50 Karsten Suehring Assigned To => Karsten Suehring
2007-03-01 15:53 Karsten Suehring Status assigned => resolved
2007-03-01 15:53 Karsten Suehring Fixed in Version => JM 12.1-devel
2007-03-01 15:53 Karsten Suehring Resolution open => fixed
2007-03-01 15:53 Karsten Suehring Note Added: 0000058