diff options
author | Viktor Semykin <thesame.ml@gmail.com> | 2010-05-28 19:30:38 +0300 |
---|---|---|
committer | Viktor Semykin <thesame.ml@gmail.com> | 2010-05-28 19:30:38 +0300 |
commit | 9e389b88fa239d43a9b64f88e61d42df1774cdaa (patch) | |
tree | 07824e976cd3e12cfab2c93956f8416abd729152 | |
parent | 748736d307de33c1ffab45fdc05dc0bcbaa5de89 (diff) | |
parent | ad71971955594ada4a0b14d176a192d050c9ee36 (diff) |
Merge branch 'master' of git://deadbeef.git.sourceforge.net/gitroot/deadbeef/deadbeef into tmp
-rw-r--r-- | ChangeLog | 22 | ||||
-rw-r--r-- | playlist.c | 4 | ||||
-rw-r--r-- | plugins/artwork/artwork.c | 12 | ||||
-rw-r--r-- | plugins/gtkui/ddblistview.c | 50 | ||||
-rw-r--r-- | plugins/gtkui/trkproperties.c | 4 | ||||
-rw-r--r-- | plugins/vfs_curl/vfs_curl.c | 33 | ||||
-rw-r--r-- | streamer.c | 32 |
7 files changed, 95 insertions, 62 deletions
@@ -1,26 +1,36 @@ version 0.4.1 - fixed search window size - better tag reader in ffmpeg plugin + reload metadata support + better default/minimal search window size + improved tag reader in ffmpeg plugin + reload metadata support fixed EQ drawing unwanted current value at initialization allow editing previous custom grouping value increased sort speed - fixed alsa and oss plugins writing zero samples at start of tracks + fixed alsa and oss plugins writing zero samples at start of tracks (TheMaister) fixed recover from suspend in alsa plugin fixed md5 structure buffer overflow - added support for gtk3 (2.90), enabled with --enable-gtk3 - improved oss plugin responsiveness on pause + added experimental support for gtk3 (2.90), enabled with --enable-gtk3 + improved oss plugin responsiveness on pause (TheMaister) fixed vfs_curl crashing randomly when loading album art ignore currently paused song when opening new file(s) from commandline fixed playlist moving bugs fixed memory leaks in id3v2 parser increased maximum limit on id3v2 APIC frame size to 2MiB - added cd text support + added cd text support (Viktor Semykin) fixed wavpack crash on corrupted files fixed random crash when using File -> Open added remember/restore current folder in playlist save/load dialogs fixed reversing track order after drag-n-drop fixed "Loop single file" mode after track was moved or deleted removed apply button from Global Hotkeys preferences window + fixed FLAC bitrate calculation + fixed ID3v2 "extra size" field parser + fixed memory leaks in vorbis plugin + fixed several crash-bugs in mp3 plugin + fixed known bugs in album artwork code + added automatic backtrace printing on SIGSEGV + added multi-track vorbis files support + added %C(composer) expansion to title formatting + fixed few theming/colors issues + fixed replaygain field parsing when reading cuesheets and r.g. peak scale handling (David Bryant) version 0.4.0 multiple tabbed playlists @@ -819,13 +819,13 @@ pl_process_cue_track (playItem_t *after, const char *fname, playItem_t **prev, c pl_add_meta (it, "year", date); } if (replaygain_album_gain[0]) { - it->replaygain_album_gain = db_to_amp (atof (replaygain_album_gain)); + it->replaygain_album_gain = atof (replaygain_album_gain); } if (replaygain_album_peak[0]) { it->replaygain_album_peak = atof (replaygain_album_peak); } if (replaygain_track_gain[0]) { - it->replaygain_track_gain = db_to_amp (atof (replaygain_track_gain)); + it->replaygain_track_gain = atof (replaygain_track_gain); } if (replaygain_track_peak[0]) { it->replaygain_track_peak = atof (replaygain_track_peak); diff --git a/plugins/artwork/artwork.c b/plugins/artwork/artwork.c index 4af9658b..88052e6e 100644 --- a/plugins/artwork/artwork.c +++ b/plugins/artwork/artwork.c @@ -159,11 +159,6 @@ check_dir (const char *dir, mode_t mode) static int copy_file (const char *in, const char *out) { trace ("copying %s to %s\n", in, out); - char *buf = malloc (BUFFER_SIZE); - if (!buf) { - trace ("artwork: failed to alloc %d bytes\n", BUFFER_SIZE); - return -1; - } FILE *fin = fopen (in, "rb"); if (!fin) { trace ("artwork: failed to open file %s for reading\n", in); @@ -175,6 +170,13 @@ copy_file (const char *in, const char *out) { trace ("artwork: failed to open file %s for writing\n", out); return -1; } + char *buf = malloc (BUFFER_SIZE); + if (!buf) { + trace ("artwork: failed to alloc %d bytes\n", BUFFER_SIZE); + fclose (fin); + fclose (fout); + return -1; + } fseek (fin, 0, SEEK_END); size_t sz = ftell (fin); diff --git a/plugins/gtkui/ddblistview.c b/plugins/gtkui/ddblistview.c index 0412581b..7156f147 100644 --- a/plugins/gtkui/ddblistview.c +++ b/plugins/gtkui/ddblistview.c @@ -72,8 +72,8 @@ typedef struct _DdbListviewColumn DdbListviewColumn; struct _DdbListviewGroup { DdbListviewIter head; - uint32_t height; - uint32_t num_items; + int32_t height; + int32_t num_items; struct _DdbListviewGroup *next; }; typedef struct _DdbListviewGroup DdbListviewGroup; @@ -302,6 +302,7 @@ ddb_listview_init(DdbListview *listview) // listview->areaselect_dx = -1; // listview->areaselect_dy = -1; listview->dragwait = 0; + listview->drag_source_playlist = -1; listview->shift_sel_anchor = -1; listview->header_dragging = -1; @@ -718,13 +719,34 @@ ddb_listview_list_expose_event (GtkWidget *widget, return FALSE; } +static void +ddb_listview_draw_dnd_marker (DdbListview *ps) { + if (ps->drag_motion_y < 0) { + return; + } + int drag_motion_y = ps->drag_motion_y - ps->scrollpos; + + GtkWidget *widget = ps->list; + GdkColor clr; + gtkui_get_listview_cursor_color (&clr); + GdkGC *gc = gdk_gc_new (widget->window); + gdk_gc_set_rgb_fg_color (gc, &clr); + gdk_draw_rectangle (widget->window, gc, TRUE, 0, drag_motion_y-1, widget->allocation.width, 3); + gdk_draw_rectangle (widget->window, gc, TRUE, 0, drag_motion_y-3, 3, 7); + gdk_draw_rectangle (widget->window, gc, TRUE, widget->allocation.width-3, drag_motion_y-3, 3, 7); + g_object_unref (gc); + +} + void ddb_listview_list_expose (DdbListview *listview, int x, int y, int w, int h) { -// printf ("listview height: %d\n", listview->list->allocation.height); GtkWidget *widget = listview->list; if (widget->window && listview->backbuf) { draw_drawable (widget->window, widget->style->black_gc, listview->backbuf, x, y, x, y, w, h); } + if (listview->drag_motion_y >= 0 && listview->drag_motion_y-listview->scrollpos-3 < y+h && listview->drag_motion_y-listview->scrollpos+3 >= y) { + ddb_listview_draw_dnd_marker (listview); + } } gboolean @@ -1952,31 +1974,29 @@ ddb_listview_list_track_dragdrop (DdbListview *ps, int y) { GtkWidget *widget = ps->list; if (ps->drag_motion_y != -1) { // erase previous track - draw_drawable (widget->window, widget->style->black_gc, ps->backbuf, 0, ps->drag_motion_y-3, 0, ps->drag_motion_y-3, widget->allocation.width, 7); + draw_drawable (widget->window, widget->style->black_gc, ps->backbuf, 0, ps->drag_motion_y-3-ps->scrollpos, 0, ps->drag_motion_y-ps->scrollpos-3, widget->allocation.width, 7); } + if (y == -1) { + ps->drag_motion_y = -1; + return; + } int sel = ddb_listview_dragdrop_get_row_from_coord (ps, y); if (sel == -1) { if (ps->binding->count () == 0) { ps->drag_motion_y = 0; } else { - ps->drag_motion_y = ddb_listview_get_row_pos (ps, ps->binding->count ()-1) - ps->scrollpos + ps->rowheight; + // after last row + ps->drag_motion_y = ddb_listview_get_row_pos (ps, ps->binding->count ()-1) + ps->rowheight; } } else { - ps->drag_motion_y = ddb_listview_get_row_pos (ps, sel) - ps->scrollpos; + ps->drag_motion_y = ddb_listview_get_row_pos (ps, sel); } - GdkColor clr; - gtkui_get_listview_cursor_color (&clr); - GdkGC *gc = gdk_gc_new (widget->window); - gdk_gc_set_rgb_fg_color (gc, &clr); - gdk_draw_rectangle (widget->window, gc, TRUE, 0, ps->drag_motion_y-1, widget->allocation.width, 3); - gdk_draw_rectangle (widget->window, gc, TRUE, 0, ps->drag_motion_y-3, 3, 7); - gdk_draw_rectangle (widget->window, gc, TRUE, widget->allocation.width-3, ps->drag_motion_y-3, 3, 7); - g_object_unref (gc); - + ddb_listview_draw_dnd_marker (ps); + if (y < 10) { ps->scroll_pointer_y = y; ps->scroll_mode = 1; diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c index 80e343d6..3dca1718 100644 --- a/plugins/gtkui/trkproperties.c +++ b/plugins/gtkui/trkproperties.c @@ -176,14 +176,14 @@ trkproperties_fill_metadata (void) { gtk_list_store_set (propstore, &iter, 0, "Embedded Cuesheet", 1, (deadbeef->pl_get_item_flags (track) & DDB_HAS_EMBEDDED_CUESHEET) ? "Yes" : "No", -1); gtk_list_store_append (propstore, &iter); - snprintf (temp, sizeof (temp), "%0.2f dB", amp_to_db (track->replaygain_album_gain)); + snprintf (temp, sizeof (temp), "%0.2f dB", track->replaygain_album_gain); gtk_list_store_set (propstore, &iter, 0, "REPLAYGAIN_ALBUM_GAIN", 1, temp, -1); gtk_list_store_append (propstore, &iter); snprintf (temp, sizeof (temp), "%0.6f", track->replaygain_album_peak); gtk_list_store_set (propstore, &iter, 0, "REPLAYGAIN_ALBUM_PEAK", 1, temp, -1); gtk_list_store_append (propstore, &iter); - snprintf (temp, sizeof (temp), "%0.2f dB", amp_to_db (track->replaygain_track_gain)); + snprintf (temp, sizeof (temp), "%0.2f dB", track->replaygain_track_gain); gtk_list_store_set (propstore, &iter, 0, "REPLAYGAIN_TRACK_GAIN", 1, temp, -1); gtk_list_store_append (propstore, &iter); snprintf (temp, sizeof (temp), "%0.6f", track->replaygain_track_peak); diff --git a/plugins/vfs_curl/vfs_curl.c b/plugins/vfs_curl/vfs_curl.c index eb64b17d..6f65f4e6 100644 --- a/plugins/vfs_curl/vfs_curl.c +++ b/plugins/vfs_curl/vfs_curl.c @@ -25,10 +25,8 @@ #include <time.h> #include "../../deadbeef.h" -#pragma GCC optimize("O0") - -#define trace(...) { fprintf(stderr, __VA_ARGS__); } -//#define trace(fmt,...) +//#define trace(...) { fprintf(stderr, __VA_ARGS__); } +#define trace(fmt,...) #define min(x,y) ((x)<(y)?(x):(y)) #define max(x,y) ((x)>(y)?(x):(y)) @@ -556,18 +554,18 @@ http_thread_func (void *ctx) { deadbeef->mutex_lock (fp->mutex); if (status == 0 && fp->length < 0 && fp->status != STATUS_ABORTED && fp->status != STATUS_SEEK) { trace ("vfs_curl: restarting stream\n"); + // NOTE: don't do http_stream_reset here - we don't want to cut the ending fp->status = STATUS_INITIAL; - fp->skipbytes = 0; - if (fp->content_type) { - free (fp->content_type); - fp->content_type = NULL; - } - fp->seektoend = 0; fp->gotheader = 0; fp->icyheader = 0; fp->gotsomeheader = 0; - fp->wait_meta = 0; + fp->metadata_size = 0; + fp->metadata_have_size = 0; + fp->skipbytes = 0; + fp->nheaderpackets = 0; + fp->seektoend = 0; fp->icy_metaint = 0; + fp->wait_meta = 0; deadbeef->mutex_unlock (fp->mutex); continue; } @@ -636,15 +634,16 @@ http_set_track (DB_FILE *f, DB_playItem_t *it) { static void http_close (DB_FILE *stream) { - trace ("http_close\n"); + trace ("http_close %p\n", stream); assert (stream); HTTP_FILE *fp = (HTTP_FILE *)stream; + + deadbeef->mutex_lock (fp->mutex); if (fp->tid) { - deadbeef->mutex_lock (fp->mutex); fp->status = STATUS_ABORTED; + trace ("http_close thread_join\n"); deadbeef->mutex_unlock (fp->mutex); deadbeef->thread_join (fp->tid); - deadbeef->mutex_free (fp->mutex); } if (fp->content_type) { free (fp->content_type); @@ -655,7 +654,9 @@ http_close (DB_FILE *stream) { if (fp->url) { free (fp->url); } + deadbeef->mutex_free (fp->mutex); free (stream); + trace ("http_close done\n"); } static size_t @@ -851,14 +852,14 @@ http_get_content_type (DB_FILE *stream) { void http_abort (DB_FILE *fp) { - trace ("http_abort\n"); + trace ("http_abort %p\n", fp); HTTP_FILE *f = (HTTP_FILE *)fp; if (f->tid) { deadbeef->mutex_lock (f->mutex); f->status = STATUS_ABORTED; deadbeef->mutex_unlock (f->mutex); - deadbeef->thread_join (f->tid); } + trace ("http_abort done\n"); } static int @@ -1140,22 +1140,22 @@ apply_replay_gain_int16 (playItem_t *it, char *bytes, int size) { if (it->replaygain_track_gain == 0) { return; } + vol = db_to_amp (streaming_track->replaygain_track_gain) * 1000; if (conf_replaygain_scale && replaygain_scale) { - vol = db_to_amp (streaming_track->replaygain_track_gain)/streaming_track->replaygain_track_peak * 1000; - } - else { - vol = db_to_amp (streaming_track->replaygain_track_gain) * 1000; + if (vol * streaming_track->replaygain_track_peak > 1000) { + vol = 1000 / streaming_track->replaygain_track_peak; + } } } else if (conf_replaygain_mode == 2) { if (it->replaygain_album_gain == 0) { return; } + vol = db_to_amp (streaming_track->replaygain_album_gain) * 1000; if (conf_replaygain_scale && replaygain_scale) { - vol = db_to_amp (streaming_track->replaygain_album_gain)/streaming_track->replaygain_album_peak * 1000; - } - else { - vol = db_to_amp (streaming_track->replaygain_album_gain) * 1000; + if (vol * streaming_track->replaygain_album_peak > 1000) { + vol = 1000 / streaming_track->replaygain_album_peak; + } } } int16_t *s = (int16_t*)bytes; @@ -1182,22 +1182,22 @@ apply_replay_gain_float32 (playItem_t *it, char *bytes, int size) { if (it->replaygain_track_gain == 0) { return; } + vol = db_to_amp (it->replaygain_track_gain); if (conf_replaygain_scale && replaygain_scale) { - vol = db_to_amp (it->replaygain_track_gain)/it->replaygain_track_peak; - } - else { - vol = db_to_amp (it->replaygain_track_gain); + if (vol * it->replaygain_track_peak > 1.f) { + vol = 1.f / it->replaygain_track_peak; + } } } else if (conf_replaygain_mode == 2) { if (it->replaygain_album_gain == 0) { return; } + vol = db_to_amp (it->replaygain_album_gain); if (conf_replaygain_scale && replaygain_scale) { - vol = db_to_amp (it->replaygain_album_gain)/it->replaygain_album_peak; - } - else { - vol = db_to_amp (it->replaygain_album_gain); + if (vol * it->replaygain_album_peak > 1.f) { + vol = 1.f / it->replaygain_album_peak; + } } } float *s = (float*)bytes; |