--- trunk/xvidcore/src/bitstream/bitstream.c 2003/06/09 17:08:36 1055 +++ trunk/xvidcore/src/bitstream/bitstream.c 2003/07/28 12:39:32 1098 @@ -1159,10 +1159,13 @@ BitstreamPad(bs); BitstreamPutBits(bs, VISOBJ_START_CODE, 32); BitstreamPutBits(bs, 0, 1); // is_visual_object_identifier + + /* Video type */ BitstreamPutBits(bs, VISOBJ_TYPE_VIDEO, 4); // visual_object_type - + BitstreamPutBit(bs, 0); /* video_signal_type */ + // video object_start_code & vo_id - BitstreamPad(bs); + BitstreamPadAlways(bs); // next_start_code() BitstreamPutBits(bs, VIDOBJ_START_CODE|(vo_id&0x5), 32); // video_object_layer_start_code & vol_id @@ -1180,7 +1183,7 @@ { BitstreamPutBit(bs, 1); // is_object_layer_identified BitstreamPutBits(bs, vol_ver_id, 4); // vol_ver_id == 2 - BitstreamPutBits(bs, 4, 3); // vol_ver_priority (1==lowest, 7==highest) ?? + BitstreamPutBits(bs, 4, 3); // vol_ver_priority (1==highest, 7==lowest) } BitstreamPutBits(bs, 1, 4); // aspect_ratio_info (1=1:1) @@ -1276,6 +1279,8 @@ BitstreamPutBit(bs, 0); // scalability + BitstreamPadAlways(bs); // next_start_code() + /* fake divx5 id, to ensure compatibility with divx5 decoder */ #define DIVX5_ID "DivX501b481p" if (pParam->max_bframes > 0 && (pParam->global & XVID_GLOBAL_PACKED)) { @@ -1327,6 +1332,14 @@ if (!vop_coded) { BitstreamPutBits(bs, 0, 1); +#if 0 + BitstreamPadAlways(bs); /* next_start_code() */ +#endif + /* NB: It's up to the function caller to write the next_start_code(). + * At the moment encoder.c respects that requisite because a VOP + * always ends with a next_start_code either if it's coded or not + * and encoder.c terminates a frame with a next_start_code in whatever + * case */ return; }