00001 #include "funcprotos.h"
00002 #include "quicktime.h"
00003
00004
00005 void quicktime_mdia_init(quicktime_mdia_t *mdia)
00006 {
00007 quicktime_mdhd_init(&(mdia->mdhd));
00008 quicktime_hdlr_init(&(mdia->hdlr));
00009 quicktime_minf_init(&(mdia->minf));
00010 }
00011
00012 void quicktime_mdia_init_video(quicktime_t *file,
00013 quicktime_mdia_t *mdia,
00014 int frame_w,
00015 int frame_h,
00016 float frame_rate,
00017 char *compressor)
00018 {
00019
00020 quicktime_mdhd_init_video(file, &(mdia->mdhd), frame_w, frame_h, frame_rate);
00021
00022 quicktime_minf_init_video(file, &(mdia->minf), frame_w, frame_h, mdia->mdhd.time_scale, frame_rate, compressor);
00023
00024 quicktime_hdlr_init_video(&(mdia->hdlr));
00025
00026 }
00027
00028 void quicktime_mdia_init_audio(quicktime_t *file,
00029 quicktime_mdia_t *mdia,
00030 int channels,
00031 int sample_rate,
00032 int bits,
00033 char *compressor)
00034 {
00035 quicktime_mdhd_init_audio(&(mdia->mdhd),
00036 sample_rate);
00037 quicktime_minf_init_audio(file,
00038 &(mdia->minf),
00039 channels,
00040 sample_rate,
00041 bits,
00042 compressor);
00043 quicktime_hdlr_init_audio(&(mdia->hdlr));
00044 }
00045
00046 void quicktime_mdia_delete(quicktime_mdia_t *mdia)
00047 {
00048 quicktime_mdhd_delete(&(mdia->mdhd));
00049 quicktime_hdlr_delete(&(mdia->hdlr));
00050 quicktime_minf_delete(&(mdia->minf));
00051 }
00052
00053 void quicktime_mdia_dump(quicktime_mdia_t *mdia)
00054 {
00055 printf(" media\n");
00056 quicktime_mdhd_dump(&(mdia->mdhd));
00057 quicktime_hdlr_dump(&(mdia->hdlr));
00058 quicktime_minf_dump(&(mdia->minf));
00059 }
00060
00061 int quicktime_read_mdia(quicktime_t *file, quicktime_mdia_t *mdia, quicktime_atom_t *trak_atom)
00062 {
00063 quicktime_atom_t leaf_atom;
00064
00065 do
00066 {
00067 quicktime_atom_read_header(file, &leaf_atom);
00068
00069
00070
00071 if(quicktime_atom_is(&leaf_atom, "mdhd"))
00072 { quicktime_read_mdhd(file, &(mdia->mdhd)); }
00073 else
00074 if(quicktime_atom_is(&leaf_atom, "hdlr"))
00075 {
00076 quicktime_read_hdlr(file, &(mdia->hdlr));
00077
00078 quicktime_atom_skip(file, &leaf_atom);
00079 }
00080 else
00081 if(quicktime_atom_is(&leaf_atom, "minf"))
00082 { quicktime_read_minf(file, &(mdia->minf), &leaf_atom); }
00083 else
00084 quicktime_atom_skip(file, &leaf_atom);
00085 }while(quicktime_position(file) < trak_atom->end);
00086
00087 return 0;
00088 }
00089
00090 void quicktime_write_mdia(quicktime_t *file, quicktime_mdia_t *mdia)
00091 {
00092 quicktime_atom_t atom;
00093 quicktime_atom_write_header(file, &atom, "mdia");
00094
00095 quicktime_write_mdhd(file, &(mdia->mdhd));
00096 quicktime_write_hdlr(file, &(mdia->hdlr));
00097 quicktime_write_minf(file, &(mdia->minf));
00098
00099 quicktime_atom_write_footer(file, &atom);
00100 }