View Issue Details

IDProjectCategoryView StatusLast Update
0000059JVT JM H.264/AVC reference softwaredecoderpublic2007-08-16 16:16
ReporterDimitris Agrafiotis Assigned ToKarsten Suehring  
PrioritynormalSeveritycrashReproducibilityalways
Status resolvedResolutionfixed 
Product VersionJM 12.2 
Fixed in VersionJM 13.0 
Summary0000059: Problem with the JM 12.2 decoder and missing data partitions
DescriptionA problem is encountered with the JM 12.2 Decoder and the use of data partitioning. More specifically the decoder will crash when specific partitions of a slice are missing (deleted) for example due to channel erasures.

I have attached a zip file (problem.zip) with a number of test streams each representing specific scenarios regarding deleted partitions. The encoder and decoder configuration files are also attached. In summary, decoding problems are encountered in the following cases:

1. Data partition B or C or both of one slice are missing with data partition A of the same slice being present. In this case the decoder will try to decode transform coefficient values which do not exist and will crash with the message : “error: failed to find NumCoeff/TrailingOnes“.

2. Data partition A is present but the following data partition B or C do not belong to the same slice (i.e. consecutive B and/or C and A partitions have been deleted after receiving a correct partition A)

The tests sequences included and the results of decoding them are given below:

Test05.264 - Data Partitioning Enabled Original

Test06.264 - Delete only 1 DP-C with B present
- CRASHES (error: failed to find NumCoeff/TrailingOnes ChromaDC)
Test07.264 - Delete only 1 DP-B
- CRASHES (error: failed to find NumCoeff/TrailingOnes )
Test08.264 - Delete only 1 DP-A
- WORKS
Test09.264 - Delete DP-B and DP-C from same slice
- CRASHES (error: failed to find NumCoeff/TrailingOnes ChromaDC)
Test10.264 - Delete full slice (A-B-C)
- WORKS
Test11.264 - Delete DP-A and DP-B
- WORKS
Test12.264 - Delete DP-A and DP-C
- WORKS
Additional InformationThe above problems have been fixed (or at least I think they have). The modified files are included in the fix.zip file and the changes introduced to them can be found by searching for string “Agrafiotis”. Note that I don’t know what happens when redundant slices and data partitioning are both used.
TagsNo tags attached.

Relationships

related to 0000069 resolvedKarsten Suehring New fix for issue 59 previously considered solved - missing data partitions 

Activities

2007-06-12 11:14

 

Problem_And_Fix.zip (163,180 bytes)

Karsten Suehring

2007-08-08 14:21

administrator   ~0000092

I will take care about this after the 4:4:4 professional profile merge.

Karsten Suehring

2007-08-14 17:03

administrator   ~0000094

I merged the suggested solution into my development tree. Seems to work fine for the submitted cases. I will run some additional test for verification.

Dimitris Agrafiotis

2007-08-14 17:32

reporter   ~0000095

I have since encountered some more problems regarding the JM 12.2 decoder and missing data partitions. I have fixed those too and the decoder now seems to be able to handle missing data partitions very well. I will upload a new fix_v2.zip file with all the necessary changes marked again with the string “Agrafiotis”. Apologies for the inconvenience.

Karsten Suehring

2007-08-14 17:56

administrator   ~0000096

Thanks for the update. I'm looking forward to your file upload.

I think we will also need some additional code for I_PCM decoding. I_PCM data has been moved to DP_B - I think in JM 12.3. I_PCM in DP_A is now considered to be a bug in the spec. Our intention was to have it in DP_B. This will be a corrigendum item.

Karsten Suehring

2007-08-15 15:09

administrator   ~0000097

I think we can get easily into trouble when combining wrong data partitions, e.g. when we have a stream that contains one slice per picture as follows

1 frame n DP_A
2 frame n DP_B
3 frame n+1 DP_A
4 frame n+1 DP_B

and we loose packets 2 and 3, the decoder tries to combine 1 and 4 and fails reading the proper coefficients.

I think the proper way to handle this situation would be to detect the loss at a higher layer (e.g. RTP) and throw away any DP_B or DP_C NALUs that directly follow a suspected DP_A loss.

In Annex B we could only check every read value and try to discard a partition if the values don't make sense. But we might even fail to detect the situation. I also think that I don't want to implement this into the reference code.

Karsten Suehring

2007-08-16 16:16

administrator   ~0000101

resolved in my devel branch

Issue History

Date Modified Username Field Change
2007-06-12 11:14 Dimitris Agrafiotis New Issue
2007-06-12 11:14 Dimitris Agrafiotis File Added: Problem_And_Fix.zip
2007-08-08 14:20 Karsten Suehring Status new => assigned
2007-08-08 14:20 Karsten Suehring Assigned To => Karsten Suehring
2007-08-08 14:21 Karsten Suehring Note Added: 0000092
2007-08-14 17:03 Karsten Suehring Status assigned => resolved
2007-08-14 17:03 Karsten Suehring Fixed in Version => JM 12.4-devel
2007-08-14 17:03 Karsten Suehring Resolution open => fixed
2007-08-14 17:03 Karsten Suehring Note Added: 0000094
2007-08-14 17:32 Dimitris Agrafiotis Status resolved => feedback
2007-08-14 17:32 Dimitris Agrafiotis Resolution fixed => reopened
2007-08-14 17:32 Dimitris Agrafiotis Note Added: 0000095
2007-08-14 17:56 Karsten Suehring Note Added: 0000096
2007-08-15 15:09 Karsten Suehring Note Added: 0000097
2007-08-15 19:04 Karsten Suehring Relationship added related to 0000069
2007-08-16 16:16 Karsten Suehring Status feedback => resolved
2007-08-16 16:16 Karsten Suehring Resolution reopened => fixed
2007-08-16 16:16 Karsten Suehring Note Added: 0000101