aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-h263p.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2014-10-04 11:28:35 -0400
committerBill Meier <wmeier@newsguy.com>2014-10-04 15:34:02 +0000
commitebfe8f6d289e3d2649dcfd5a3902ba038b0ee2bd (patch)
treed7cfeb5eb4592086744dbfaa71f1163932bc43a8 /epan/dissectors/packet-h263p.c
parent20795925ffb2f9687e960de8d6798e53482cb175 (diff)
Add editor modelines; Reformat as appropriate.
Change-Id: I8e9c58b75eea85877d22024201e5d8d0e9a3dbfd Reviewed-on: https://code.wireshark.org/review/4459 Reviewed-by: Bill Meier <wmeier@newsguy.com>
Diffstat (limited to 'epan/dissectors/packet-h263p.c')
-rw-r--r--epan/dissectors/packet-h263p.c652
1 files changed, 333 insertions, 319 deletions
diff --git a/epan/dissectors/packet-h263p.c b/epan/dissectors/packet-h263p.c
index e4222e4d8f..e3f669aafc 100644
--- a/epan/dissectors/packet-h263p.c
+++ b/epan/dissectors/packet-h263p.c
@@ -39,7 +39,7 @@
void proto_reg_handoff_h263P(void);
void proto_register_h263P(void);
-static int proto_h263P = -1;
+static int proto_h263P = -1;
/* H.263 RFC 4629 fields */
static int hf_h263P_payload = -1;
@@ -57,9 +57,9 @@ static int hf_h263P_extra_hdr = -1;
/* H.263-1998 fields defining a sub tree */
-static gint ett_h263P = -1;
+static gint ett_h263P = -1;
static gint ett_h263P_extra_hdr = -1;
-static gint ett_h263P_payload = -1;
+static gint ett_h263P_payload = -1;
static gint ett_h263P_data = -1;
/* The dynamic payload type which will be dissected as H.263-1998/H263-2000 */
@@ -70,344 +70,358 @@ static guint temp_dynamic_payload_type = 0;
static void
dissect_h263P( tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree )
{
- proto_item *ti = NULL;
- proto_item *data_item = NULL;
- proto_item *extra_hdr_item = NULL;
- proto_tree *h263P_tree = NULL;
- proto_tree *h263P_extr_hdr_tree = NULL;
- proto_tree *h263P_data_tree = NULL;
- unsigned int offset = 0;
- guint16 data16, plen;
- guint8 startcode;
-
- /*
- tvbuff_t *next_tvb;
- */
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.263 RFC4629 ");
-
- if ( tree ) {
- ti = proto_tree_add_item( tree, proto_h263P, tvb, offset, -1, ENC_NA );
- h263P_tree = proto_item_add_subtree( ti, ett_h263P );
-
- data16 = tvb_get_ntohs(tvb,offset);
- proto_tree_add_item( h263P_tree, hf_h263P_rr, tvb, offset, 2, ENC_BIG_ENDIAN );
- proto_tree_add_item( h263P_tree, hf_h263P_pbit, tvb, offset, 2, ENC_BIG_ENDIAN );
- proto_tree_add_item( h263P_tree, hf_h263P_vbit, tvb, offset, 2, ENC_BIG_ENDIAN );
- proto_tree_add_item( h263P_tree, hf_h263P_plen, tvb, offset, 2, ENC_BIG_ENDIAN );
- proto_tree_add_item( h263P_tree, hf_h263P_pebit, tvb, offset, 2, ENC_BIG_ENDIAN );
- offset = offset +2;
- /*
- * V: 1 bit
- *
- * Indicates the presence of an 8-bit field containing information
- * for Video Redundancy Coding (VRC), which follows immediately after
- * the initial 16 bits of the payload header, if present. For syntax
- * and semantics of that 8-bit VRC field, see Section 5.2.
- */
-
- if ((data16&0x0200)==0x0200){
- /* V bit = 1
- * The format of the VRC header extension is as follows:
- *
- * 0 1 2 3 4 5 6 7
- * +-+-+-+-+-+-+-+-+
- * | TID | Trun |S|
- * +-+-+-+-+-+-+-+-+
- *
- * TID: 3 bits
- *
- * Thread ID. Up to 7 threads are allowed. Each frame of H.263+ VRC
- * data will use as reference information only sync frames or frames
- * within the same thread. By convention, thread 0 is expected to be
- * the "canonical" thread, which is the thread from which the sync frame
- * should ideally be used. In the case of corruption or loss of the
- * thread 0 representation, a representation of the sync frame with a
- * higher thread number can be used by the decoder. Lower thread
- * numbers are expected to contain representations of the sync frames
- * equal to or better than higher thread numbers in the absence of data
- * corruption or loss. See [Vredun] for a detailed discussion of VRC.
- *
- * Trun: 4 bits
- *
- * Monotonically increasing (modulo 16) 4-bit number counting the packet
- * number within each thread.
- *
- * S: 1 bit
- *
- * A bit that indicates that the packet content is for a sync frame.
- * :
- */
- proto_tree_add_item( h263P_tree, hf_h263P_tid, tvb, offset, 1, ENC_BIG_ENDIAN );
- proto_tree_add_item( h263P_tree, hf_h263P_trun, tvb, offset, 1, ENC_BIG_ENDIAN );
- proto_tree_add_item( h263P_tree, hf_h263P_s, tvb, offset, 1, ENC_BIG_ENDIAN );
- offset++;
- }
-
- /* Length, in bytes, of the extra picture header. */
- plen = (data16 & 0x01f8) >> 3;
- if (plen != 0){
- extra_hdr_item = proto_tree_add_item( h263P_tree, hf_h263P_extra_hdr, tvb, offset, plen, ENC_NA );
- h263P_extr_hdr_tree = proto_item_add_subtree( extra_hdr_item, ett_h263P_extra_hdr );
- dissect_h263_picture_layer( tvb, pinfo, h263P_extr_hdr_tree, offset, plen, TRUE);
- offset += plen;
- }
- if ((data16&0x0400)!=0){
- /* P bit = 1 */
- data_item = proto_tree_add_item( h263P_tree, hf_h263P_payload, tvb, offset, -1, ENC_NA );
- h263P_data_tree = proto_item_add_subtree( data_item, ett_h263P_data );
- /* Startc code holds bit 17 -23 of the codeword */
- startcode = tvb_get_guint8(tvb,offset)&0xfe;
- if (startcode & 0x80){
- /* All picture, slice, and EOSBS start codes
- * shall be byte aligned, and GOB and EOS start codes may be byte aligned.
- */
- switch(startcode){
- case 0xf8:
- /* End Of Sub-Bitstream code (EOSBS)
- * EOSBS codes shall be byte aligned
- * ( 1111 100. )
- */
- break;
- case 0x80:
- case 0x82:
- /* Picture Start Code (PSC)
- * ( 1000 00x.)
- */
- col_append_str( pinfo->cinfo, COL_INFO, "(PSC) ");
- dissect_h263_picture_layer( tvb, pinfo, h263P_data_tree, offset, -1, TRUE);
- break;
- case 0xfc:
- case 0xfe:
- /* End Of Sequence (EOS)
- * ( 1111 11x. )
- */
- default:
- /* Group of Block Start Code (GBSC) or
- * Slice Start Code (SSC)
- */
- col_append_str( pinfo->cinfo, COL_INFO, "(GBSC) ");
- dissect_h263_group_of_blocks_layer( tvb, h263P_data_tree, offset,TRUE);
- break;
- }
- }else{
- /* Error */
- }
- return;
- }
- proto_tree_add_item( h263P_tree, hf_h263P_payload, tvb, offset, -1, ENC_NA );
- }
+ proto_item *ti = NULL;
+ proto_item *data_item = NULL;
+ proto_item *extra_hdr_item = NULL;
+ proto_tree *h263P_tree = NULL;
+ proto_tree *h263P_extr_hdr_tree = NULL;
+ proto_tree *h263P_data_tree = NULL;
+ unsigned int offset = 0;
+ guint16 data16, plen;
+ guint8 startcode;
+
+ /*
+ tvbuff_t *next_tvb;
+ */
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "H.263 RFC4629 ");
+
+ if ( tree ) {
+ ti = proto_tree_add_item( tree, proto_h263P, tvb, offset, -1, ENC_NA );
+ h263P_tree = proto_item_add_subtree( ti, ett_h263P );
+
+ data16 = tvb_get_ntohs(tvb,offset);
+ proto_tree_add_item( h263P_tree, hf_h263P_rr, tvb, offset, 2, ENC_BIG_ENDIAN );
+ proto_tree_add_item( h263P_tree, hf_h263P_pbit, tvb, offset, 2, ENC_BIG_ENDIAN );
+ proto_tree_add_item( h263P_tree, hf_h263P_vbit, tvb, offset, 2, ENC_BIG_ENDIAN );
+ proto_tree_add_item( h263P_tree, hf_h263P_plen, tvb, offset, 2, ENC_BIG_ENDIAN );
+ proto_tree_add_item( h263P_tree, hf_h263P_pebit, tvb, offset, 2, ENC_BIG_ENDIAN );
+ offset = offset +2;
+ /*
+ * V: 1 bit
+ *
+ * Indicates the presence of an 8-bit field containing information
+ * for Video Redundancy Coding (VRC), which follows immediately after
+ * the initial 16 bits of the payload header, if present. For syntax
+ * and semantics of that 8-bit VRC field, see Section 5.2.
+ */
+
+ if ((data16&0x0200)==0x0200){
+ /* V bit = 1
+ * The format of the VRC header extension is as follows:
+ *
+ * 0 1 2 3 4 5 6 7
+ * +-+-+-+-+-+-+-+-+
+ * | TID | Trun |S|
+ * +-+-+-+-+-+-+-+-+
+ *
+ * TID: 3 bits
+ *
+ * Thread ID. Up to 7 threads are allowed. Each frame of H.263+ VRC
+ * data will use as reference information only sync frames or frames
+ * within the same thread. By convention, thread 0 is expected to be
+ * the "canonical" thread, which is the thread from which the sync frame
+ * should ideally be used. In the case of corruption or loss of the
+ * thread 0 representation, a representation of the sync frame with a
+ * higher thread number can be used by the decoder. Lower thread
+ * numbers are expected to contain representations of the sync frames
+ * equal to or better than higher thread numbers in the absence of data
+ * corruption or loss. See [Vredun] for a detailed discussion of VRC.
+ *
+ * Trun: 4 bits
+ *
+ * Monotonically increasing (modulo 16) 4-bit number counting the packet
+ * number within each thread.
+ *
+ * S: 1 bit
+ *
+ * A bit that indicates that the packet content is for a sync frame.
+ * :
+ */
+ proto_tree_add_item( h263P_tree, hf_h263P_tid, tvb, offset, 1, ENC_BIG_ENDIAN );
+ proto_tree_add_item( h263P_tree, hf_h263P_trun, tvb, offset, 1, ENC_BIG_ENDIAN );
+ proto_tree_add_item( h263P_tree, hf_h263P_s, tvb, offset, 1, ENC_BIG_ENDIAN );
+ offset++;
+ }
+
+ /* Length, in bytes, of the extra picture header. */
+ plen = (data16 & 0x01f8) >> 3;
+ if (plen != 0){
+ extra_hdr_item = proto_tree_add_item( h263P_tree, hf_h263P_extra_hdr, tvb, offset, plen, ENC_NA );
+ h263P_extr_hdr_tree = proto_item_add_subtree( extra_hdr_item, ett_h263P_extra_hdr );
+ dissect_h263_picture_layer( tvb, pinfo, h263P_extr_hdr_tree, offset, plen, TRUE);
+ offset += plen;
+ }
+ if ((data16&0x0400)!=0){
+ /* P bit = 1 */
+ data_item = proto_tree_add_item( h263P_tree, hf_h263P_payload, tvb, offset, -1, ENC_NA );
+ h263P_data_tree = proto_item_add_subtree( data_item, ett_h263P_data );
+ /* Startc code holds bit 17 -23 of the codeword */
+ startcode = tvb_get_guint8(tvb,offset)&0xfe;
+ if (startcode & 0x80){
+ /* All picture, slice, and EOSBS start codes
+ * shall be byte aligned, and GOB and EOS start codes may be byte aligned.
+ */
+ switch(startcode){
+ case 0xf8:
+ /* End Of Sub-Bitstream code (EOSBS)
+ * EOSBS codes shall be byte aligned
+ * ( 1111 100. )
+ */
+ break;
+ case 0x80:
+ case 0x82:
+ /* Picture Start Code (PSC)
+ * ( 1000 00x.)
+ */
+ col_append_str( pinfo->cinfo, COL_INFO, "(PSC) ");
+ dissect_h263_picture_layer( tvb, pinfo, h263P_data_tree, offset, -1, TRUE);
+ break;
+ case 0xfc:
+ case 0xfe:
+ /* End Of Sequence (EOS)
+ * ( 1111 11x. )
+ */
+ default:
+ /* Group of Block Start Code (GBSC) or
+ * Slice Start Code (SSC)
+ */
+ col_append_str( pinfo->cinfo, COL_INFO, "(GBSC) ");
+ dissect_h263_group_of_blocks_layer( tvb, h263P_data_tree, offset,TRUE);
+ break;
+ }
+ }else{
+ /* Error */
+ }
+ return;
+ }
+ proto_tree_add_item( h263P_tree, hf_h263P_payload, tvb, offset, -1, ENC_NA );
+ }
}
void
proto_reg_handoff_h263P(void)
{
- static dissector_handle_t h263P_handle;
- static guint dynamic_payload_type;
- static gboolean h263P_prefs_initialized = FALSE;
-
- if (!h263P_prefs_initialized) {
- h263P_handle = find_dissector("h263P");
- dissector_add_string("rtp_dyn_payload_type","H263-1998", h263P_handle);
- dissector_add_string("rtp_dyn_payload_type","H263-2000", h263P_handle);
- h263P_prefs_initialized = TRUE;
- }
- else {
- if ( dynamic_payload_type > 95 )
- dissector_delete_uint("rtp.pt", dynamic_payload_type, h263P_handle);
- }
- dynamic_payload_type = temp_dynamic_payload_type;
-
- if ( dynamic_payload_type > 95 ){
- dissector_add_uint("rtp.pt", dynamic_payload_type, h263P_handle);
- }
+ static dissector_handle_t h263P_handle;
+ static guint dynamic_payload_type;
+ static gboolean h263P_prefs_initialized = FALSE;
+
+ if (!h263P_prefs_initialized) {
+ h263P_handle = find_dissector("h263P");
+ dissector_add_string("rtp_dyn_payload_type","H263-1998", h263P_handle);
+ dissector_add_string("rtp_dyn_payload_type","H263-2000", h263P_handle);
+ h263P_prefs_initialized = TRUE;
+ }
+ else {
+ if ( dynamic_payload_type > 95 )
+ dissector_delete_uint("rtp.pt", dynamic_payload_type, h263P_handle);
+ }
+ dynamic_payload_type = temp_dynamic_payload_type;
+
+ if ( dynamic_payload_type > 95 ){
+ dissector_add_uint("rtp.pt", dynamic_payload_type, h263P_handle);
+ }
}
void
proto_register_h263P(void)
{
- module_t *h263P_module;
-
- static hf_register_info hf[] =
- {
- {
- &hf_h263P_payload,
- {
- "H.263 RFC4629 payload",
- "h263p.payload",
- FT_NONE,
- BASE_NONE,
- NULL,
- 0x0,
- "The actual H.263 RFC4629 data", HFILL
- }
- },
- {
- &hf_h263P_rr,
- {
- "Reserved",
- "h263p.rr",
- FT_UINT16,
- BASE_DEC,
- NULL,
- 0xf800,
- "Reserved SHALL be zero", HFILL
- }
- },
- {
- &hf_h263P_pbit,
- {
- "P",
- "h263p.p",
- FT_BOOLEAN,
- 16,
- NULL,
- 0x0400,
- "Indicates (GOB/Slice) start or (EOS or EOSBS)", HFILL
- }
- },
- {
- &hf_h263P_vbit,
- {
- "V",
- "h263p.v",
- FT_BOOLEAN,
- 16,
- NULL,
- 0x0200,
- "presence of Video Redundancy Coding (VRC) field", HFILL
- }
- },
- {
- &hf_h263P_plen,
- {
- "PLEN",
- "h263p.plen",
- FT_UINT16,
- BASE_DEC,
- NULL,
- 0x01f8,
- "Length, in bytes, of the extra picture header", HFILL
- }
- },
- {
- &hf_h263P_pebit,
- {
- "PEBIT",
- "h263p.pebit",
- FT_UINT16,
- BASE_DEC,
- NULL,
- 0x0003,
- "number of bits that shall be ignored in the last byte of the picture header", HFILL
- }
- },
-
-
- {
- &hf_h263P_tid,
- {
- "Thread ID",
- "h263p.tid",
- FT_UINT8,
- BASE_DEC,
- NULL,
- 0xe0,
- NULL, HFILL
- }
- },
- {
- &hf_h263P_trun,
- {
- "Trun",
- "h263p.trun",
- FT_UINT8,
- BASE_DEC,
- NULL,
- 0x1e,
- "Monotonically increasing (modulo 16) 4-bit number counting the packet number within each thread", HFILL
- }
- },
- {
- &hf_h263P_s,
- {
- "S",
- "h263p.s",
- FT_UINT8,
- BASE_DEC,
- NULL,
- 0x01,
- "Indicates that the packet content is for a sync frame", HFILL
- }
- },
- {
- &hf_h263P_extra_hdr,
- {
- "Extra picture header",
- "h263p.extra_hdr",
- FT_BYTES,
- BASE_NONE,
- NULL,
- 0x0,
- NULL, HFILL
- }
- },
+ module_t *h263P_module;
+
+ static hf_register_info hf[] =
+ {
+ {
+ &hf_h263P_payload,
+ {
+ "H.263 RFC4629 payload",
+ "h263p.payload",
+ FT_NONE,
+ BASE_NONE,
+ NULL,
+ 0x0,
+ "The actual H.263 RFC4629 data", HFILL
+ }
+ },
+ {
+ &hf_h263P_rr,
+ {
+ "Reserved",
+ "h263p.rr",
+ FT_UINT16,
+ BASE_DEC,
+ NULL,
+ 0xf800,
+ "Reserved SHALL be zero", HFILL
+ }
+ },
+ {
+ &hf_h263P_pbit,
+ {
+ "P",
+ "h263p.p",
+ FT_BOOLEAN,
+ 16,
+ NULL,
+ 0x0400,
+ "Indicates (GOB/Slice) start or (EOS or EOSBS)", HFILL
+ }
+ },
+ {
+ &hf_h263P_vbit,
+ {
+ "V",
+ "h263p.v",
+ FT_BOOLEAN,
+ 16,
+ NULL,
+ 0x0200,
+ "presence of Video Redundancy Coding (VRC) field", HFILL
+ }
+ },
+ {
+ &hf_h263P_plen,
+ {
+ "PLEN",
+ "h263p.plen",
+ FT_UINT16,
+ BASE_DEC,
+ NULL,
+ 0x01f8,
+ "Length, in bytes, of the extra picture header", HFILL
+ }
+ },
+ {
+ &hf_h263P_pebit,
+ {
+ "PEBIT",
+ "h263p.pebit",
+ FT_UINT16,
+ BASE_DEC,
+ NULL,
+ 0x0003,
+ "number of bits that shall be ignored in the last byte of the picture header", HFILL
+ }
+ },
+
+
+ {
+ &hf_h263P_tid,
+ {
+ "Thread ID",
+ "h263p.tid",
+ FT_UINT8,
+ BASE_DEC,
+ NULL,
+ 0xe0,
+ NULL, HFILL
+ }
+ },
+ {
+ &hf_h263P_trun,
+ {
+ "Trun",
+ "h263p.trun",
+ FT_UINT8,
+ BASE_DEC,
+ NULL,
+ 0x1e,
+ "Monotonically increasing (modulo 16) 4-bit number counting the packet number within each thread", HFILL
+ }
+ },
+ {
+ &hf_h263P_s,
+ {
+ "S",
+ "h263p.s",
+ FT_UINT8,
+ BASE_DEC,
+ NULL,
+ 0x01,
+ "Indicates that the packet content is for a sync frame", HFILL
+ }
+ },
+ {
+ &hf_h263P_extra_hdr,
+ {
+ "Extra picture header",
+ "h263p.extra_hdr",
+ FT_BYTES,
+ BASE_NONE,
+ NULL,
+ 0x0,
+ NULL, HFILL
+ }
+ },
#if 0
- {
- &hf_h263P_PSC,
- {
- "H.263 PSC",
- "h263p.PSC",
- FT_UINT16,
- BASE_HEX,
- NULL,
- 0xfc00,
- "Picture Start Code(PSC)", HFILL
- }
- },
+ {
+ &hf_h263P_PSC,
+ {
+ "H.263 PSC",
+ "h263p.PSC",
+ FT_UINT16,
+ BASE_HEX,
+ NULL,
+ 0xfc00,
+ "Picture Start Code(PSC)", HFILL
+ }
+ },
#endif
#if 0
- {
- &hf_h263P_TR,
- {
- "H.263 Temporal Reference",
- "h263p.tr",
- FT_UINT16,
- BASE_HEX,
- NULL,
- 0x03fc,
- "Temporal Reference, TR", HFILL
- }
- },
+ {
+ &hf_h263P_TR,
+ {
+ "H.263 Temporal Reference",
+ "h263p.tr",
+ FT_UINT16,
+ BASE_HEX,
+ NULL,
+ 0x03fc,
+ "Temporal Reference, TR", HFILL
+ }
+ },
#endif
- };
+ };
- static gint *ett[] =
- {
- &ett_h263P,
- &ett_h263P_extra_hdr,
- &ett_h263P_payload,
- &ett_h263P_data,
- };
+ static gint *ett[] =
+ {
+ &ett_h263P,
+ &ett_h263P_extra_hdr,
+ &ett_h263P_payload,
+ &ett_h263P_data,
+ };
- proto_h263P = proto_register_protocol("ITU-T Recommendation H.263 RTP Payload header (RFC4629)",
- "H263P", "h263p");
+ proto_h263P = proto_register_protocol("ITU-T Recommendation H.263 RTP Payload header (RFC4629)",
+ "H263P", "h263p");
- proto_register_field_array(proto_h263P, hf, array_length(hf));
- proto_register_subtree_array(ett, array_length(ett));
+ proto_register_field_array(proto_h263P, hf, array_length(hf));
+ proto_register_subtree_array(ett, array_length(ett));
- h263P_module = prefs_register_protocol(proto_h263P, proto_reg_handoff_h263P);
+ h263P_module = prefs_register_protocol(proto_h263P, proto_reg_handoff_h263P);
- prefs_register_uint_preference(h263P_module, "dynamic.payload.type",
- "H263-1998 and H263-2000 dynamic payload type",
- "The dynamic payload type which will be interpreted as H264"
- "; The value must be greater than 95",
- 10,
- &temp_dynamic_payload_type);
+ prefs_register_uint_preference(h263P_module,
+ "dynamic.payload.type",
+ "H263-1998 and H263-2000 dynamic payload type",
+ "The dynamic payload type which will be interpreted as H264"
+ "; The value must be greater than 95",
+ 10,
+ &temp_dynamic_payload_type);
- register_dissector("h263P", dissect_h263P, proto_h263P);
+ register_dissector("h263P", dissect_h263P, proto_h263P);
}
+
+/*
+ * Editor modelines - http://www.wireshark.org/tools/modelines.html
+ *
+ * Local variables:
+ * c-basic-offset: 4
+ * tab-width: 8
+ * indent-tabs-mode: nil
+ * End:
+ *
+ * vi: set shiftwidth=4 tabstop=8 expandtab:
+ * :indentSize=4:tabSize=8:noTabs=true:
+ */