Subject: [rohc] RoHC implementer's guide section 4.7

From: "Ghyslain Pelletier (LU/EAB)" <[email-masked]>
Date: Thu, 18 Aug 2005 10:54:20 +0200

Section 4.7 "TS_STRIDE and the TSC flag in Extension 3" says:

>  Note also that if Tsc=1, TS is scaled using context(TS_STRIDE), not
>  value(TS_STRIDE) as is said in the legend for Extension 3 in section
>  5.7.5.

When reading this, it wasn't clear to me why the TS in extension 3 would not be scaled using value(TS_STRIDE) if present, and thus against what's written in RFC3095. 

I assume it has to do with not having the proper TS_OFFSET available, as it would need to be recalculated in the possible case where value(TS_STRIDE) != context(TS_STRIDE). This seems somehow implied in the text that follows:

>  When a compressor uses Extension 3 to re-establish a new value for
>  TS_STRIDE, it must send unscaled TS together with TS_STRIDE for some
>  packets until decompressor confidence is obtained. When the TS_STRIDE
>  field is present in Extension 3, the Tsc flag must thus be set to 0.

which basically says that TS_STRIDE if Tsc=1 does not update the context, which would imply that TS_OFFSET is not recalculated in this case - so the decompressor wouldn't have what's needed to use value(TS_STRIDE).

Note then the somewhat less coherent wording... the first paragraph says that value(TS_STRIDE) is not used when Tsc=1, while the second paragraph says that the Tsc flag must be set to 0 when sending TS_STRIDE. I'd rather have the consequence being spelled out instead of some half-normative wording that is unclear.

So, assuming that I understood properly the text, I would like to see
the following two clarifications added to section 4.7:

o if Tsc=1, TS is scaled using context(TS_STRIDE), not value(TS_STRIDE),
  because value(TS_STRIDE) does not update the context when Tsc=1.
o In other words, it is meaningless to sent TS_STRIDE in extension 3 when Tsc=1.
  if the decompressor receives an extension 3 with TS_STRIDE and Tsc=1,
  the decompressor simply ignores/discards value(TS_STRIDE)

... and remove the wording "must" in the second paragraph, finally I think that switching order between the last two paragraphs of the section would complete the trick properly for my part.

In the possible case where I did not understand properly, I'd like to see the proper clarifications included instead : )

/Ghyslain

_______________________________________________
Rohc mailing list
[email-masked]
https://www1.ietf.org/mailman/listinfo/rohc

---

From: "Lars-Erik Jonsson (LU/EAB)" <[email-masked]>
Date: Thu, 18 Aug 2005 12:33:58 +0200

Ghyslain,

> >  Note also that if Tsc=1, TS is scaled using context(TS_STRIDE),
> >  not value(TS_STRIDE) as is said in the legend for Extension 3 
> >  in section 5.7.5.
> 
> When reading this, it wasn't clear to me why the TS in 
> extension 3 would not be scaled using value(TS_STRIDE) if 
> present, and thus against what's written in RFC3095. 
> 
> I assume it has to do with not having the proper TS_OFFSET 
> available, as it would need to be recalculated in the 
> possible case where value(TS_STRIDE) != context(TS_STRIDE).

Yes, that is why. One can not really make proper use of
value(TS_STRIDE) if the transmitted TS is scaled (Tsc=1),
since calculating TS_OFFSET requires an unscaled TS plus
TS_STRIDE.

> This seems somehow implied in the text that follows:
> 
> >  When a compressor uses Extension 3 to re-establish a
> >  new value for TS_STRIDE, it must send unscaled TS
> >  together with TS_STRIDE for some packets until
> >  decompressor confidence is obtained. When the
> >  TS_STRIDE field is present in Extension 3, the Tsc
> >  flag must thus be set to 0.
> 
> which basically says that TS_STRIDE if Tsc=1 does not update 
> the context, which would imply that TS_OFFSET is not 
> recalculated in this case - so the decompressor wouldn't have 
> what's needed to use value(TS_STRIDE).

YES!

> Note then the somewhat less coherent wording... the first 
> paragraph says that value(TS_STRIDE) is not used when Tsc=1, 
> while the second paragraph says that the Tsc flag must be set 
> to 0 when sending TS_STRIDE. I'd rather have the consequence 
> being spelled out instead of some half-normative wording that 
> is unclear.

Agree!

> So, assuming that I understood properly the text, I would like
> to see the following two clarifications added to section 4.7:
> 
> o if Tsc=1, TS is scaled using context(TS_STRIDE), not 
> value(TS_STRIDE), because value(TS_STRIDE) does not update
> the context when Tsc=1.
> o In other words, it is meaningless to sent TS_STRIDE in 
> extension 3 when Tsc=1. if the decompressor receives an
> extension 3 with TS_STRIDE and Tsc=1, the decompressor
> simply ignores/discards value(TS_STRIDE)
> 
> ... and remove the wording "must" in the second paragraph, 
> finally I think that switching order between the last two 
> paragraphs of the section would complete the trick properly 
> for my part.

Ok, what about the following?

----------------------------------------------------------------------
4.7. TS_STRIDE and the Tsc flag in Extension 3

  The Tsc flag in Extension 3 indicates whether TS is scaled or not. It
  must be noted that the Tsc value apply to all TS bits, also if there
  are no TS bits in the extension itself.

  When a compressor uses Extension 3 to re-establish a new value for
  TS_STRIDE, it must send unscaled TS together with TS_STRIDE for some
  packets until decompressor confidence is obtained.

  When Tsc=1, TS must be scaled using context(TS_STRIDE) and not
  value(TS_STRIDE), which is incorrectly stated in the legend for
  Extension 3 in section 5.7.5. Instead, if the decompressor receives
  an Extension 3 with TS_STRIDE included while Tsc=1, the decompressor
  must simply ignore/discard value(TS_STRIDE). Since an unscaled TS is
  needed together with TS_STRIDE to recalculate TS_OFFSET, it is thus
  meaningless to include TS_STRIDE in Extension 3 if Tsc is set to 1.
----------------------------------------------------------------------

/L-E