… | |
… | |
334 | { |
334 | { |
335 | if (dec_sv) |
335 | if (dec_sv) |
336 | SvREFCNT_dec (dec_sv); |
336 | SvREFCNT_dec (dec_sv); |
337 | |
337 | |
338 | dec_sv = newSVsv (data); |
338 | dec_sv = newSVsv (data); |
339 | dec_data = SvPVbyte (dec_sv, dec_len); |
339 | dec_data = (u8 *)SvPVbyte (dec_sv, dec_len); |
340 | dec_ofs = 0; |
340 | dec_ofs = 0; |
341 | dec_len8 = dec_len << 3; |
341 | dec_len8 = dec_len << 3; |
342 | } |
342 | } |
343 | |
343 | |
344 | static U32 |
344 | static U32 |
… | |
… | |
410 | |
410 | |
411 | static SV * |
411 | static SV * |
412 | text2sv (u8 *data, U32 len) |
412 | text2sv (u8 *data, U32 len) |
413 | { |
413 | { |
414 | dSP; |
414 | dSP; |
415 | SV *sv = newSVpvn (data, clamp (len)); |
415 | SV *sv = newSVpvn ((char *)data, clamp (len)); |
416 | |
416 | |
417 | PUSHMARK (SP); |
417 | PUSHMARK (SP); |
418 | XPUSHs (sv); |
418 | XPUSHs (sv); |
419 | PUTBACK; |
419 | PUTBACK; |
420 | call_pv ("Linux::DVB::Decode::text", G_VOID); |
420 | call_pv ("Linux::DVB::Decode::text", G_VOID); |
… | |
… | |
422 | return sv; |
422 | return sv; |
423 | } |
423 | } |
424 | |
424 | |
425 | #define DEC_I(hv, bits, name) HVS (hv, name, newSViv (decode_field (bits))) |
425 | #define DEC_I(hv, bits, name) HVS (hv, name, newSViv (decode_field (bits))) |
426 | #define DEC_T(hv, bytes, name) HVS (hv, name, text2sv (dec_data + (dec_ofs >> 3), clamp (bytes))), dec_ofs += clamp (bytes) << 3 |
426 | #define DEC_T(hv, bytes, name) HVS (hv, name, text2sv (dec_data + (dec_ofs >> 3), clamp (bytes))), dec_ofs += clamp (bytes) << 3 |
427 | #define DEC_S(hv, bytes, name) HVS (hv, name, newSVpvn (dec_data + (dec_ofs >> 3), clamp (bytes))), dec_ofs += clamp (bytes) << 3 |
427 | #define DEC_S(hv, bytes, name) HVS (hv, name, newSVpvn ((char *)dec_data + (dec_ofs >> 3), clamp (bytes))), dec_ofs += clamp (bytes) << 3 |
428 | |
428 | |
429 | static AV * |
429 | static AV * |
430 | decode_descriptors (long end) |
430 | decode_descriptors (long end) |
431 | { |
431 | { |
432 | AV *av = newAV (); |
432 | AV *av = newAV (); |
… | |
… | |
871 | RETVAL |
871 | RETVAL |
872 | |
872 | |
873 | MODULE = Linux::DVB PACKAGE = Linux::DVB::Decode PREFIX = decode_ |
873 | MODULE = Linux::DVB PACKAGE = Linux::DVB::Decode PREFIX = decode_ |
874 | |
874 | |
875 | void |
875 | void |
876 | set (SV *data) |
876 | decode_set (SV *data) |
877 | CODE: |
877 | CODE: |
878 | |
878 | |
879 | int |
879 | int |
880 | len () |
880 | decode_len () |
881 | CODE: |
881 | CODE: |
882 | RETVAL = (dec_ofs + 7) >> 3; |
882 | RETVAL = (dec_ofs + 7) >> 3; |
883 | OUTPUT: |
883 | OUTPUT: |
884 | RETVAL |
884 | RETVAL |
885 | |
885 | |
886 | U32 |
886 | U32 |
887 | field (int bits) |
887 | decode_field (int bits) |
888 | |
888 | |
889 | SV * |
889 | SV * |
890 | si (SV *stream) |
890 | decode_si (SV *stream) |
891 | CODE: |
891 | CODE: |
892 | HV *hv = newHV (); |
892 | HV *hv = newHV (); |
893 | |
893 | |
894 | int syntax_indicator; |
894 | int syntax_indicator; |
895 | U8 table_id; |
895 | U8 table_id; |