MP3-Mplib

 view release on metacpan or  search on metacpan

Mplib.xs  view on Meta::CPAN

        RETVAL = constant(s,len,arg);
    OUTPUT:
        RETVAL

void
get_header(filename)
        char * filename;
    PROTOTYPE: $
    INIT:
        mpeg_header * header;
    PPCODE:
        header = mp_get_mpeg_header_from_file(filename);
        if (header == NULL) 
            XSRETURN_UNDEF;
            
        EXTEND(SP, 1);
        PUSHs(sv_2mortal(map_mpeg_header_to_sv(header)));

void
get_tag(filename, ver)
        char * filename;
        int ver;
    PROTOTYPE: $$
    INIT:
        id3_tag_list * taglist;
        id3_tag * tag;
    PPCODE:
        taglist = mp_get_tag_list_from_file(filename);
        if (taglist == NULL)
            XSRETURN_UNDEF;
        
        tag = get_tag(taglist, ver);
        if (tag == NULL) 
            XSRETURN_UNDEF;
            
        EXTEND(SP, 1);
        PUSHs(sv_2mortal(map_id3_tag_to_sv(tag)));     
        mp_free_list(taglist);

void
get_id3v2_header(filename)
        char * filename;
    PROTOTYPE: $
    INIT:
        id3_tag_list * taglist;
        id3_tag * tag;
    PPCODE:
        taglist = mp_get_tag_list_from_file(filename);
        if (taglist == NULL)
            XSRETURN_UNDEF;
        tag = get_tag(taglist, 2);
        if (tag == NULL) 
            XSRETURN_UNDEF;
        EXTEND(SP, 1);
        PUSHs(sv_2mortal(map_id3v2_header_to_sv(((id3v2_tag*)tag->tag)->header)));
        mp_free_list(taglist);
        
void
set_tag (filename, ver, tag, enc = ISO_8859_1)
        char * filename;
        int ver;
        SV * tag;
        int enc;
    PREINIT:
        int ret;
    PROTOTYPE: $$$;$
    PPCODE:
        if ( (!SvROK(tag)) ||
             (SvTYPE(SvRV(tag)) != SVt_PVHV) )
            croak("MP3::Mplib::set_tag expects a hash-ref as third arg");

        if (ver == 1) 
            ret = set_v1_tag(filename, (HV *) SvRV(tag), enc);
        else if (ver == 2) 
            ret = set_v2_tag(filename, (HV *) SvRV(tag), enc);
        else
            croak("Unsupported tag version (v%i) in MP3::Mplib::set_header", 

Mplib.xs  view on Meta::CPAN

            sv_setpvf(mp3_lib_err, "mp_file\034%i", MP_EERROR);

        EXTEND(SP, 1);
        PUSHs(sv_2mortal(newSViv(ret == 0 ? 1 : 0)));

void
delete_tags(filename, ver)
        char * filename;
        int ver;
    PROTOTYPE: $$
    PPCODE:
        EXTEND(SP, 1);
        switch(mp_del_tags_by_ver_from_file(filename, ver)) {
            case 0: 
                PUSHs(sv_2mortal(newSVuv(1))); 
                break;
            case 1:
                PUSHs(sv_2mortal(newSVuv(0)));
                break;
        }

void 
_clean_up(filename)
        char * filename;
    PROTOTYPE: $
    PPCODE:
        id3_tag_list *taglist;
        id3_tag * tag;
        int i, j;

        taglist = mp_get_tag_list_from_file(filename);
        tag = get_tag(taglist, 2);
        
        if (tag == NULL) 
            XSRETURN_UNDEF;

Mplib.xs  view on Meta::CPAN

            sv_setpvf(mp3_lib_err, "mp_file\034%i", MP_EERROR);
        mp_free_list(taglist->first);

void
_dump_structure(filename)
        char * filename;
    INIT:
        id3_tag_list * taglist, *iter;
        int c = 0;
    PROTOTYPE: $
    PPCODE:
        taglist = mp_get_tag_list_from_file(filename);
        if (taglist == NULL) {
            printf("No tags found\n");
            XSRETURN_UNDEF;
        }
        iter = taglist;
        while (iter) {
            id3_tag *tag = iter->tag;
            printf("Tag at position %i:\n", ++c);
            printf("Version: %i", tag->version);



( run in 0.762 second using v1.01-cache-2.11-cpan-5511b514fd6 )