View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000029 | JVT JM H.264/AVC reference software | decoder | public | 2007-01-16 20:28 | 2007-03-01 15:53 |
Reporter | Evgeny Kamninsky | Assigned To | Karsten Suehring | ||
Priority | normal | Severity | block | Reproducibility | always |
Status | resolved | Resolution | fixed | ||
Product Version | JM 10.2 | ||||
Fixed in Version | JM 12.2 | ||||
Summary | 0000029: If IPCM coded MB/s appear/s anyway in a frame (excluding the last MB) the JM10.2/11 decoder is blocked | ||||
Description | Dear 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 Information | Please, find attached the encoder_basilene.cfg. | ||||
Tags | No tags attached. | ||||
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 |
|
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) |
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 |