MP3-Mplib
view release on metacpan or search on metacpan
if (strcmp(key, "WXXX") == 0) {
SV *wxval = hv_iterval(t, iter_struct);
if (isHaSHref(wxval)) {
SV **wxurl, **wxdesc;
HV *wxhsh = (HV *) SvRV(wxval);
wxurl = hv_fetch(wxhsh, "url", 3, FALSE);
wxdesc = hv_fetch(wxhsh, "description", 11, FALSE);
content = mp_assemble_wxxx_content(
wxurl != NULL ? SvPV_nolen(*wxurl) : "",
wxdesc != NULL ? SvPV_nolen(*wxdesc) : "",
enc);
} else {
val = SvPV_nolen(hv_iterval(t, iter_struct));
content = mp_assemble_wxxx_content(
val != NULL ? val : "", "", enc);
}
mp_set_custom_content_at_pos(new_tag, "WXXX", content, 0);
continue;
} /* WXXX */
/* all other frames */
val = SvPV_nolen(hv_iterval(t, iter_struct));
content = mp_assemble_text_content(val, enc);
ret = mp_set_custom_content_at_pos(new_tag, key, content, 0);
mp_free_content(content);
if (ret != 0) {
sv_setpv(mp3_lib_err, "");
sv_catpvf(mp3_lib_err, "%s%c%i", key, '\034', MP_EFNF);
}
}
newlist = add_tag(taglist, new_tag);
ret = mp_write_to_file(newlist, filename);
mp_free_list(newlist);
return ret;
}
MODULE = MP3::Mplib PACKAGE = MP3::Mplib
double
constant(sv,arg)
PREINIT:
STRLEN len;
INPUT:
SV * sv
char * s = SvPV(sv, len);
int arg
CODE:
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",
ver);
if (ret == MP_EERROR)
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;
for (i = 0; i < V2FRAMES; i++) {
j = 1;
while (1) {
if (mp_get_content_custom_at_pos(tag, fields[i], j))
mp_set_custom_content_at_pos(tag, (char*) fields[i],
NULL, j);
else
break;
j++;
}
}
if (mp_write_to_file(taglist, filename) == MP_EERROR)
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);
if (tag->version == 2) {
int i, j;
id3v2_header* head = ((id3v2_tag*)tag->tag)->header;
printf(" (id3v2.%i.%i)\n", head->version_minor,
head->version_revision);
printf("Fields set:\n");
for (i = 0; i < V2FRAMES; i++, j = 0) {
while (mp_get_content_custom_at_pos(tag, fields[i], j)) {
int k;
char ind[4*(j+1)+1];
for (k = 0; k < j+1; k++) {
strcpy(&ind[4*k], " ");
}
ind[4*k+1] = 0;
printf("%s+%s at pos %i\n", ind, fields[i], j++);
}
}
printf("\n");
}
if (tag->version == 1) {
int i;
printf(" (id3v1.1)\n");
printf("Fields set:\n");
for (i = MP_ARTIST; i <= MP_TRACK; i++) {
if (mp_get_content(tag, i))
printf("\t+%s\n", fieldsv1[i - 1]);
}
printf("\n");
}
iter = iter->next;
}
mp_free_list(taglist);
BOOT:
mp3_lib_err = get_sv("MP3::Mplib::Error", TRUE);
( run in 1.118 second using v1.01-cache-2.11-cpan-5511b514fd6 )