[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