Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "avformat.h"
00022 #include "internal.h"
00023
00024
00025 void ff_dynarray_add(intptr_t **tab_ptr, int *nb_ptr, intptr_t elem)
00026 {
00027
00028 int nb, nb_alloc;
00029 intptr_t *tab;
00030
00031 nb = *nb_ptr;
00032 tab = *tab_ptr;
00033 if ((nb & (nb - 1)) == 0) {
00034 if (nb == 0)
00035 nb_alloc = 1;
00036 else
00037 nb_alloc = nb * 2;
00038 tab = av_realloc(tab, nb_alloc * sizeof(intptr_t));
00039 *tab_ptr = tab;
00040 }
00041 tab[nb++] = elem;
00042 *nb_ptr = nb;
00043 }
00044
00045 #define ISLEAP(y) (((y) % 4 == 0) && (((y) % 100) != 0 || ((y) % 400) == 0))
00046 #define LEAPS_COUNT(y) ((y)/4 - (y)/100 + (y)/400)
00047
00048
00049
00050 struct tm *brktimegm(time_t secs, struct tm *tm)
00051 {
00052 int days, y, ny, m;
00053 int md[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
00054
00055 days = secs / 86400;
00056 secs %= 86400;
00057 tm->tm_hour = secs / 3600;
00058 tm->tm_min = (secs % 3600) / 60;
00059 tm->tm_sec = secs % 60;
00060
00061
00062 y = 1970;
00063 while (days > 365) {
00064 ny = (y + days/366);
00065 days -= (ny - y) * 365 + LEAPS_COUNT(ny - 1) - LEAPS_COUNT(y - 1);
00066 y = ny;
00067 }
00068 if (days==365 && !ISLEAP(y)) { days=0; y++; }
00069 md[1] = ISLEAP(y)?29:28;
00070 for (m=0; days >= md[m]; m++)
00071 days -= md[m];
00072
00073 tm->tm_year = y;
00074 tm->tm_mon = m+1;
00075 tm->tm_mday = days+1;
00076
00077 return tm;
00078 }