本文整理汇总了C++中DB_decoder_t::write_metadata方法的典型用法代码示例。如果您正苦于以下问题:C++ DB_decoder_t::write_metadata方法的具体用法?C++ DB_decoder_t::write_metadata怎么用?C++ DB_decoder_t::write_metadata使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DB_decoder_t
的用法示例。
在下文中一共展示了DB_decoder_t::write_metadata方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: strdupa
static int
_rg_write_meta (DB_playItem_t *track) {
const char *path = NULL;
const char *decoder_id = NULL;
deadbeef->pl_lock ();
path = strdupa (deadbeef->pl_find_meta_raw (track, ":URI"));
int is_subtrack = deadbeef->pl_get_item_flags (track) & DDB_IS_SUBTRACK;
if (is_subtrack) {
trace ("rg_scanner: Can't write to subtrack of file: %s\n", path);
deadbeef->pl_unlock ();
return -1;
}
decoder_id = deadbeef->pl_find_meta_raw (track, ":DECODER");
if (!decoder_id) {
trace ("rg_scanner: Invalid decoder in track %s\n", path);
deadbeef->pl_unlock ();
return -1;
}
decoder_id = strdupa (decoder_id);
int match = track && decoder_id;
deadbeef->pl_unlock ();
if (match) {
int is_subtrack = deadbeef->pl_get_item_flags (track) & DDB_IS_SUBTRACK;
if (is_subtrack) {
return 0; // only write tags for actual tracks
}
// find decoder
DB_decoder_t *dec = NULL;
DB_decoder_t **decoders = deadbeef->plug_get_decoder_list ();
for (int i = 0; decoders[i]; i++) {
if (!strcmp (decoders[i]->plugin.id, decoder_id)) {
dec = decoders[i];
if (dec->write_metadata) {
if (dec->write_metadata (track)) {
trace ("rg_scanner: Failed to write tag to %s\n", path);
return -1;
}
}
else {
trace ("rg_scanner: Writing tags is not supported for the file %s\n", path);
}
break;
}
}
}
else {
trace ("rg_scanner: Could not find matching decoder for %s\n", path);
return -1;
}
return 0;
}
示例2: strncpy
static void
write_meta_worker (void *ctx) {
for (int t = 0; t < numtracks; t++) {
if (progress_aborted) {
break;
}
DB_playItem_t *track = tracks[t];
deadbeef->pl_lock ();
const char *dec = deadbeef->pl_find_meta_raw (track, ":DECODER");
char decoder_id[100];
if (dec) {
strncpy (decoder_id, dec, sizeof (decoder_id));
}
int match = track && dec;
deadbeef->pl_unlock ();
if (match) {
int is_subtrack = deadbeef->pl_get_item_flags (track) & DDB_IS_SUBTRACK;
if (is_subtrack) {
continue;
}
deadbeef->pl_item_ref (track);
g_idle_add (set_progress_cb, track);
// find decoder
DB_decoder_t *dec = NULL;
DB_decoder_t **decoders = deadbeef->plug_get_decoder_list ();
for (int i = 0; decoders[i]; i++) {
if (!strcmp (decoders[i]->plugin.id, decoder_id)) {
dec = decoders[i];
if (dec->write_metadata) {
dec->write_metadata (track);
}
break;
}
}
}
}
g_idle_add (write_finished_cb, ctx);
}
示例3: if
//.........这里部分代码省略.........
temp_file = -1;
}
if (enc_pipe) {
pclose (enc_pipe);
enc_pipe = NULL;
}
if (dec && fileinfo) {
dec->free (fileinfo);
fileinfo = NULL;
}
if (abort && *abort && out[0]) {
unlink (out);
}
if (input_file_name[0] && strcmp (input_file_name, "-")) {
unlink (input_file_name);
}
if (err != 0) {
return err;
}
// write junklib tags
DB_playItem_t *out_it = NULL;
if (encoder_preset->tag_id3v2 || encoder_preset->tag_id3v1 || encoder_preset->tag_apev2 || encoder_preset->tag_flac || encoder_preset->tag_oggvorbis) {
out_it = deadbeef->pl_item_alloc ();
deadbeef->pl_item_copy (out_it, it);
deadbeef->pl_set_item_flags (out_it, 0);
DB_metaInfo_t *m = deadbeef->pl_get_metadata_head (out_it);
while (m) {
DB_metaInfo_t *next = m->next;
if (m->key[0] == ':' || m->key[0] == '!' || !strcasecmp (m->key, "cuesheet")) {
deadbeef->pl_delete_metadata (out_it, m);
}
m = next;
}
deadbeef->pl_replace_meta (out_it, ":URI", out);
}
uint32_t tagflags = 0;
if (encoder_preset->tag_id3v2) {
tagflags |= JUNK_WRITE_ID3V2;
}
if (encoder_preset->tag_id3v1) {
tagflags |= JUNK_WRITE_ID3V1;
}
if (encoder_preset->tag_apev2) {
tagflags |= JUNK_WRITE_APEV2;
}
if (tagflags) {
tagflags |= JUNK_STRIP_ID3V2 | JUNK_STRIP_APEV2 | JUNK_STRIP_ID3V1;
deadbeef->junk_rewrite_tags (out_it, tagflags, encoder_preset->id3v2_version + 3, "iso8859-1");
}
// write flac tags
if (encoder_preset->tag_flac) {
// find flac decoder plugin
DB_decoder_t **plugs = deadbeef->plug_get_decoder_list ();
DB_decoder_t *flac = NULL;
for (int i = 0; plugs[i]; i++) {
if (!strcmp (plugs[i]->plugin.id, "stdflac")) {
flac = plugs[i];
break;
}
}
if (!flac) {
fprintf (stderr, "converter: flac plugin not found, cannot write flac metadata\n");
}
else {
if (0 != flac->write_metadata (out_it)) {
fprintf (stderr, "converter: failed to write flac metadata, not a flac file?\n");
}
}
}
// write vorbis tags
if (encoder_preset->tag_oggvorbis) {
// find flac decoder plugin
DB_decoder_t **plugs = deadbeef->plug_get_decoder_list ();
int res = -1;
for (int i = 0; plugs[i]; i++) {
if (!strcmp (plugs[i]->plugin.id, "stdogg")
|| !strcmp (plugs[i]->plugin.id, "stdopus")) {
res = plugs[i]->write_metadata (out_it);
if (!res) {
break;
}
}
}
if (res) {
fprintf (stderr, "converter: failed to write ogg metadata, not an ogg file?\n");
}
}
if (out_it) {
deadbeef->pl_item_unref (out_it);
}
return err;
}
示例4: if
//.........这里部分代码省略.........
}
if (temp_file && temp_file != enc_pipe) {
fseek (temp_file, wavehdr_size, SEEK_SET);
fwrite (&outsize, 1, 4, temp_file);
fclose (temp_file);
temp_file = NULL;
}
if (encoder_preset->encoder[0] && encoder_preset->method == DDB_ENCODER_METHOD_FILE) {
enc_pipe = popen (enc, "w");
}
}
}
err = 0;
error:
if (temp_file && temp_file != enc_pipe) {
fclose (temp_file);
temp_file = NULL;
}
if (enc_pipe) {
pclose (enc_pipe);
enc_pipe = NULL;
}
if (dec && fileinfo) {
dec->free (fileinfo);
fileinfo = NULL;
}
if (abort && *abort && out[0]) {
unlink (out);
}
if (input_file_name[0] && strcmp (input_file_name, "-")) {
unlink (input_file_name);
}
// write junklib tags
uint32_t tagflags = JUNK_STRIP_ID3V2 | JUNK_STRIP_APEV2 | JUNK_STRIP_ID3V1;
if (encoder_preset->tag_id3v2) {
tagflags |= JUNK_WRITE_ID3V2;
}
if (encoder_preset->tag_id3v1) {
tagflags |= JUNK_WRITE_ID3V1;
}
if (encoder_preset->tag_apev2) {
tagflags |= JUNK_WRITE_APEV2;
}
DB_playItem_t *out_it = deadbeef->pl_item_alloc ();
deadbeef->pl_item_copy (out_it, it);
deadbeef->pl_replace_meta (out_it, ":URI", out);
deadbeef->pl_delete_meta (out_it, "cuesheet");
deadbeef->junk_rewrite_tags (out_it, tagflags, encoder_preset->id3v2_version + 3, "iso8859-1");
// write flac tags
if (encoder_preset->tag_flac) {
// find flac decoder plugin
DB_decoder_t **plugs = deadbeef->plug_get_decoder_list ();
DB_decoder_t *flac = NULL;
for (int i = 0; plugs[i]; i++) {
if (!strcmp (plugs[i]->plugin.id, "stdflac")) {
flac = plugs[i];
break;
}
}
if (!flac) {
fprintf (stderr, "converter: flac plugin not found, cannot write flac metadata\n");
}
else {
if (0 != flac->write_metadata (out_it)) {
fprintf (stderr, "converter: failed to write flac metadata, not a flac file?\n");
}
}
}
// write vorbis tags
if (encoder_preset->tag_oggvorbis) {
// find flac decoder plugin
DB_decoder_t **plugs = deadbeef->plug_get_decoder_list ();
DB_decoder_t *ogg = NULL;
for (int i = 0; plugs[i]; i++) {
if (!strcmp (plugs[i]->plugin.id, "stdogg")) {
ogg = plugs[i];
break;
}
}
if (!ogg) {
fprintf (stderr, "converter: ogg plugin not found, cannot write ogg metadata\n");
}
else {
if (0 != ogg->write_metadata (out_it)) {
fprintf (stderr, "converter: failed to write ogg metadata, not an ogg file?\n");
}
}
}
deadbeef->pl_item_unref (out_it);
return err;
}