#include "para.h"
#include "mp4.h"
-#define USE_TAGGING
int32_t mp4ff_total_tracks(const mp4ff_t * f)
{
return f->total_tracks;
d = (uint8_t) data[3];
result = (a << 24) | (b << 16) | (c << 8) | d;
- //if (result > 0 && result < 8) result = 8;
-
return (int32_t) result;
}
*header_size = 16;
size = mp4ff_read_int64(f);
}
- //printf("%c%c%c%c\n", atom_header[4], atom_header[5], atom_header[6], atom_header[7]);
-
*atom_type = mp4ff_atom_name_to_type(atom_header[4], atom_header[5],
atom_header[6], atom_header[7]);
return size;
{
switch (atom_type) {
case ATOM_EDTS:
-// case ATOM_MDIA:
-// case ATOM_MINF:
case ATOM_DRMS:
case ATOM_SINF:
case ATOM_SCHI:
-// case ATOM_STBL:
-// case ATOM_STSD:
case ATOM_STTS:
case ATOM_STSZ:
case ATOM_STZ2:
case ATOM_STCO:
case ATOM_STSC:
-// case ATOM_CTTS:
case ATOM_FRMA:
case ATOM_IVIV:
case ATOM_PRIV:
done = 1;
}
} else if (parent_atom_type == ATOM_TRACK || parent_atom_type == ATOM_DISC) {
- /* if (!done && subsize - header_size >= 8 + 8) */
- /* modified by AJS */
if (!done && (subsize - header_size) >= (sizeof (char) + sizeof (uint8_t) * 3 + sizeof (uint32_t) + /* version + flags + reserved */
+(parent_atom_type == ATOM_TRACK ? sizeof (uint16_t) : 0) /* leading uint16_t if ATOM_TRACK */
+sizeof (uint16_t) /* track / disc */
} else if (atom_type == ATOM_MDHD) {
/* track header */
mp4ff_read_mdhd(f);
-#ifdef USE_TAGGING
} else if (atom_type == ATOM_META) {
/* iTunes Metadata box */
mp4ff_read_meta(f, size);
-#endif
}
mp4ff_set_position(f, dest_position);
f->file_size += size;
f->last_atom = atom_type;
- if (atom_type == ATOM_MDAT && f->moov_read) {
- /* moov atom is before mdat, we can stop reading when mdat is encountered */
- /* file position will stay at beginning of mdat data */
-// break;
- }
-
if (atom_type == ATOM_MOOV && size > header_size) {
- f->moov_read = 1;
f->moov_offset = mp4ff_position(f) - header_size;
f->moov_size = size;
}
free(ff->track[i]->ctts_sample_count);
if (ff->track[i]->ctts_sample_offset)
free(ff->track[i]->ctts_sample_offset);
-#ifdef ITUNES_DRM
- if (ff->track[i]->p_drms)
- drms_free(ff->track[i]->p_drms);
-#endif
free(ff->track[i]);
}
}
-#ifdef USE_TAGGING
mp4ff_tag_delete(&(ff->tags));
-#endif
if (ff)
free(ff);
return chunk_offset2;
}
-int32_t mp4ff_set_sample_position(mp4ff_t * f, const int32_t track,
- const int32_t sample)
+void mp4ff_set_sample_position(mp4ff_t *f, const int32_t track,
+ const int32_t sample)
{
- int32_t offset;
-
- offset = mp4ff_sample_to_offset(f, track, sample);
+ int32_t offset = mp4ff_sample_to_offset(f, track, sample);
mp4ff_set_position(f, offset);
-
- return 0;
}
-static int32_t mp4ff_audio_frame_size(const mp4ff_t * f, const int32_t track,
- const int32_t sample)
+int32_t mp4ff_get_sample_size(const mp4ff_t *f, int track, int sample)
{
- int32_t bytes;
- const mp4ff_track_t *p_track = f->track[track];
+ const mp4ff_track_t *t = f->track[track];
- if (p_track->stsz_sample_size) {
- bytes = p_track->stsz_sample_size;
- } else {
- bytes = p_track->stsz_table[sample];
- }
-
- return bytes;
-}
-
-int32_t mp4ff_read_sample_getsize(mp4ff_t * f, const int track,
- const int sample)
-{
- int32_t temp = mp4ff_audio_frame_size(f, track, sample);
- if (temp < 0)
- temp = 0;
- return temp;
+ if (t->stsz_sample_size != 0)
+ return t->stsz_sample_size;
+ return t->stsz_table[sample];
}
uint32_t mp4ff_get_sample_rate(const mp4ff_t * f, const int32_t track)
return bytes;
}
-#define membuffer_write_data membuffer_write
-
static unsigned membuffer_write_atom_name(membuffer * buf, const char *data)
{
- return membuffer_write_data(buf, data, 4) == 4 ? 1 : 0;
+ return membuffer_write(buf, data, 4) == 4 ? 1 : 0;
}
static unsigned membuffer_write_int16(membuffer * buf, uint16_t data)
{
uint8_t temp[2] = { (uint8_t) (data >> 8), (uint8_t) data };
- return membuffer_write_data(buf, temp, 2);
+ return membuffer_write(buf, temp, 2);
}
static unsigned membuffer_write_int32(membuffer * buf, uint32_t data)
{
uint8_t temp[4] = { (uint8_t) (data >> 24), (uint8_t) (data >> 16),
(uint8_t) (data >> 8), (uint8_t) data };
- return membuffer_write_data(buf, temp, 4);
+ return membuffer_write(buf, temp, 4);
}
static void membuffer_write_track_tag(membuffer * buf, const char *name,
{"\xA9" "day", "date"},
{"\xA9" "too", "tool"},
{"\xA9" "cmt", "comment"},
-// {"\xA9" "gen","genre"},
{"cpil", "compilation"},
-// {"trkn","track"},
-// {"disk","disc"},
-// {"gnre","genre"},
{"covr", "cover"},
- /* added by AJS */
{"aART", "album_artist"},
};
static void membuffer_write_std_tag(membuffer * buf, const char *name,
const char *value)
{
- /* added by AJS */
uint32_t flags = 1;
/* special check for compilation flag */
membuffer_write_atom_name(buf, "data");
membuffer_write_int32(buf, flags); //flags
membuffer_write_int32(buf, 0); //reserved
- membuffer_write_data(buf, value, strlen(value));
+ membuffer_write(buf, value, strlen(value));
}
static void membuffer_write_custom_tag(membuffer * buf, const char *name,
membuffer_write_int32(buf, 0x1C); //weirdo itunes atom
membuffer_write_atom_name(buf, "mean");
membuffer_write_int32(buf, 0);
- membuffer_write_data(buf, "com.apple.iTunes", 16);
+ membuffer_write(buf, "com.apple.iTunes", 16);
membuffer_write_int32(buf, 12 + strlen(name));
membuffer_write_atom_name(buf, "name");
membuffer_write_int32(buf, 0);
- membuffer_write_data(buf, name, strlen(name));
+ membuffer_write(buf, name, strlen(name));
membuffer_write_int32(buf,
8 /*data atom header */ +
8 /*flags + reserved */ + strlen(value));
membuffer_write_atom_name(buf, "data");
membuffer_write_int32(buf, 1); //flags
membuffer_write_int32(buf, 0); //reserved
- membuffer_write_data(buf, value, strlen(value));
+ membuffer_write(buf, value, strlen(value));
}
static unsigned membuffer_error(const membuffer * buf)
{
membuffer_write_int32(buf, size + 8);
membuffer_write_atom_name(buf, name);
- membuffer_write_data(buf, data, size);
+ membuffer_write(buf, data, size);
}
static void *membuffer_get_ptr(const membuffer * buf)
void *bufptr;
oldsize = membuffer_get_size(buf);
- if (membuffer_write_data(buf, 0, bytes) != bytes)
+ if (membuffer_write(buf, 0, bytes) != bytes)
return 0;
bufptr = membuffer_get_ptr(buf);