[M4IF Technotes] What makes up an DecoderSpecificConfig for video ?

Chandra Sekhar Reddy gchandra tataelxsi.co.in
Sat Jul 12 12:44:08 EDT 2003


Hi Bill May,
Here follows a long explanation.
Please correct me if I am not correct.
Below is the cut/paste of the syntax from the spec.
If we observe "user_data()" field,
it is part of the structures "VisualObjectSequence()" and "VisualObject()"
itself.
Moreover, in "VisualObjectSequence()", all syntax before "VisualObject()"
can be considered as the *Header* part of the "VisualObjectSequence()".
And in "VisualObject()", all syntax before "VideoObjectLayer()"
can be considered as the *Header* part of the "VisualObject()".
Similarly, in "VideoObjectLayer()", all syntax before "VideoObjectPlane()"
can be considered as the *Header* part of the "VideoObjectLayer()".
So, here in "VideoObjectLayer()", the "user_data()" field is part of the
VOL-header.
And the "DecoderSpecificInfo" consist of VOS-H, VO-H and VOL-H,
and they automatically include their own "user_data()" fields.
**************************************
VisualObjectSequence()
{
 do {
  visual_object_sequence_start_code 32 bslbf;
  profile_and_level_indication 8 uimsbf;
  while ( next_bits()== user_data_start_code)
  {
   user_data();
  }
  VisualObject();
 } while ( next_bits() != visual_object_sequence_end_code);
 visual_object_sequence_end_code 32 bslbf;
}
**************************************
**************************************
VisualObject()
{
 visual_object_start_code 32 bslbf;
- - - - - - - - - - - - -- - - - - -  -
- - - - - - - - - - - - - - - - - - - -
 next_start_code();
 while ( next_bits()== user_data_start_code)
 {
  user_data();
 }
 if (visual_object_type == "video ID")
 {
  video_object_start_code 32 bslbf;
  VideoObjectLayer();
 }
- - - - - - - - - - - - -- - - - - -  -
- - - - - - - - - - - - - - - - - - - -
}
**************************************
**************************************
VideoObjectLayer()
{
- - - - - - - - - - - - -- - - - - -  -
- - - - - - - - - - - - - - - - - - - -
  while ( next_bits()== user_data_start_code)
  {
   user_data();
  }
  if (sprite_enable == "static" && !low_latency_sprite_enable)
  {
   VideoObjectPlane();
  }
  do {
     if (next_bits() == group_of_vop_start_code)
     {
      Group_of_VideoObjectPlane();
     }
     VideoObjectPlane();
     if ((preceding_vop_coding_type == "B" ||
      preceding_vop_coding_type == "S" ||
      video_object_layer_shape != "rectangular") &&
      next_bits() == stuffing_start_code)
     {
      stuffing_start_code 32 bslbf;
      while (next_bits() != ‘0000 0000 0000 0000 0000 0001’)
      {
       stuffing_byte 8 bslbf;
      }
     }
    } while ((next_bits() == group_of_vop_start_code) ||
   (next_bits() == vop_start_code));
- - - - - - - - - - - - -- - - - - -  -
- - - - - - - - - - - - - - - - - - - -
}
Regards,
Chandra
Bill May wrote:
> In creating an mpeg4 file, we have found a situation where a
> userdata field comes between the VOL and the first VOP.
>
> Should the userdata field be considered part of the DecoderSpecificConfig,
> or should it just consist of VOSH, VO and VOL ?
>
> Thanks,
> Bill May
> mpeg4ip
>
> _______________________________________________
> Technotes mailing list
> Technotes   lists.m4if.org
> http://lists.m4if.org/mailman/listinfo/technotes
-------------- next part --------------
An HTML attachment was scrubbed...
URL: /pipermail/mp4-tech/attachments/20030712/a67edebb/attachment.html


More information about the Mp4-tech mailing list