📄 lqt_qtvr.c
字号:
file->qtvr_node[0].obji.defaultTilt = deftilt; } else { file->moov.udta.navg.startHPan = mintilt; file->moov.udta.navg.endHPan = maxtilt; file->moov.udta.navg.initialHPan = deftilt; }}/* FOV "Zoom" */void lqt_qtvr_get_fov(quicktime_t *file, float *minfov, float *maxfov, float *deffov){ if (lqt_qtvr_get_qtvr_track(file) >= 0 ) { if (lqt_qtvr_get_object_track(file) >= 0) { if (minfov != NULL ) *minfov = file->qtvr_node[0].obji.minFOV; if (maxfov != NULL ) *maxfov = file->qtvr_node[0].obji.FOV; if (deffov != NULL ) *deffov = file->qtvr_node[0].obji.defaultFOV; } else if (lqt_qtvr_get_panorama_track(file) >= 0) { if (minfov != NULL) *minfov = file->qtvr_node[0].pdat.minFOV; if (maxfov != NULL) *maxfov = file->qtvr_node[0].pdat.maxFOV; if (deffov != NULL) *deffov = file->qtvr_node[0].pdat.defaultFOV; } } else { if (lqt_is_qtvr(file) == QTVR_OBJ) { if (minfov != NULL ) *minfov = file->moov.udta.navg.fieldofview; if (maxfov != NULL ) *maxfov = file->moov.udta.navg.fieldofview; if (deffov != NULL ) *deffov = file->moov.udta.navg.fieldofview; } else if (lqt_is_qtvr(file) == QTVR_PAN) { if (minfov != NULL ) *minfov = file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.MinZoom; if (maxfov != NULL ) *maxfov = file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.MaxZoom; if (deffov != NULL ) *deffov = file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.MinZoom; } }}void lqt_qtvr_set_fov(quicktime_t *file, float minfov, float maxfov, float deffov){ if (lqt_qtvr_get_object_track(file) >= 0) { file->qtvr_node[0].obji.minFOV = minfov; file->qtvr_node[0].obji.FOV = maxfov; file->qtvr_node[0].obji.defaultFOV = deffov; } else { file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.MinZoom = minfov; file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.MaxZoom = maxfov; }}/* frame to start at */int lqt_qtvr_get_initial_position(quicktime_t *file){ if (lqt_qtvr_get_object_track(file) >= 0) { return deg2frame(file, file->qtvr_node[0].obji.defaultPan, file->qtvr_node[0].obji.defaultTilt); } else { return deg2frame(file, file->moov.udta.navg.initialHPan, file->moov.udta.navg.initialVPan); } return -1;}/* movietype */int lqt_qtvr_get_movietype(quicktime_t *file){ if (lqt_qtvr_get_object_track(file) >= 0) { return file->qtvr_node[0].obji.movieType; } else { return file->moov.udta.navg.movietype; }}int lqt_qtvr_set_movietype(quicktime_t *file, int movietype){ if (movietype == QTVR_GRABBER_SCROLLER_UI || movietype == QTVR_OLD_JOYSTICK_UI || movietype == QTVR_JOYSTICK_UI || movietype == QTVR_GRABBER_UI || movietype == QTVR_ABSOLUTE_UI) { if (lqt_qtvr_get_object_track(file) >= 0) { file->qtvr_node[0].obji.movieType = movietype; } else { file->moov.udta.navg.movietype = movietype; } return 0; } return -1;}/* Set number of rows */int lqt_qtvr_set_rows(quicktime_t *file, int rows){ if (rows > 0) { if (lqt_is_qtvr(file) == QTVR_OBJ) { file->qtvr_node[0].obji.rows = rows; return 0; } else if (lqt_is_qtvr(file) == QTVR_PAN) { file->qtvr_node[0].pdat.imageNumFramesX = rows; return 0; } } return -1;}/* Set number of columns */int lqt_qtvr_set_columns(quicktime_t *file, int columns){ if (columns > 0) { if (lqt_is_qtvr(file) == QTVR_OBJ) { file->qtvr_node[0].obji.columns = columns; return 0; } else if (lqt_is_qtvr(file) == QTVR_PAN) { file->qtvr_node[0].pdat.imageNumFramesY = columns; return 0; } } return -1;}/* dimensions of the player window */int lqt_qtvr_get_display_width(quicktime_t *file){ if (lqt_is_qtvr(file) == QTVR_OBJ) { return quicktime_video_width(file, 0); } else if (lqt_is_qtvr(file) == QTVR_PAN) { return (int)file->moov.trak[lqt_qtvr_get_panorama_track(file)]->tkhd.track_width; } return -1;}int lqt_qtvr_set_display_width(quicktime_t *file, int width){ if (lqt_is_qtvr(file) == QTVR_OBJ) { file->moov.trak[lqt_qtvr_get_qtvr_track(file)]->tkhd.track_width = (float)width; file->moov.trak[lqt_qtvr_get_object_track(file)]->tkhd.track_width = (float)width; } else if (lqt_is_qtvr(file) == QTVR_PAN) { file->moov.trak[lqt_qtvr_get_panorama_track(file)]->tkhd.track_width = (float)width; } return -1;}int lqt_qtvr_get_display_height(quicktime_t *file){ if (lqt_is_qtvr(file) == QTVR_OBJ) { return quicktime_video_height(file, 0); } else if (lqt_is_qtvr(file) == QTVR_PAN) { return (int)file->moov.trak[lqt_qtvr_get_panorama_track(file)]->tkhd.track_height; } return -1;}int lqt_qtvr_set_display_height(quicktime_t *file, int height){ if (lqt_is_qtvr(file) == QTVR_OBJ) { file->moov.trak[lqt_qtvr_get_qtvr_track(file)]->tkhd.track_height = height; file->moov.trak[lqt_qtvr_get_object_track(file)]->tkhd.track_height = height; } else if (lqt_is_qtvr(file) == QTVR_PAN) { file->moov.trak[lqt_qtvr_get_panorama_track(file)]->tkhd.track_height = height; } return -1;}/* get depth */int lqt_qtvr_get_depth(quicktime_t *file){ if (lqt_is_qtvr(file) == QTVR_OBJ) { return quicktime_video_depth(file, 0); } else if (lqt_is_qtvr(file) == QTVR_PAN) { // add v2 return (int)file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.SDepth; } return -1;}/* get/set full pano dimensions */int lqt_qtvr_get_width(quicktime_t *file){ if (lqt_is_qtvr(file) == QTVR_OBJ) { return quicktime_video_width(file, 0); } else if (lqt_is_qtvr(file) == QTVR_PAN) { if (lqt_qtvr_get_qtvr_track(file) >= 0) { if (lqt_qtvr_get_panotype(file) == QTVR_PANO_HORZ) { return file->qtvr_node[0].pdat.imageSizeX; } else { return file->qtvr_node[0].pdat.imageSizeY; } } else { return file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.SWidth; } } return -1;}int lqt_qtvr_get_height(quicktime_t *file){ if (lqt_is_qtvr(file) == QTVR_OBJ) { return quicktime_video_height(file, 0); } else if (lqt_is_qtvr(file) == QTVR_PAN) { if (lqt_qtvr_get_qtvr_track(file) >= 0) { if (lqt_qtvr_get_panotype(file) == QTVR_PANO_HORZ) { return file->qtvr_node[0].pdat.imageSizeY; } else { return file->qtvr_node[0].pdat.imageSizeX; } } else { return file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.SHeight; } } return -1;}/* Panorama specific */int lqt_qtvr_get_panorama_track(quicktime_t *file){ int i; for(i = 0; i < file->moov.total_tracks; i++) { if (quicktime_match_32(file->moov.trak[i]->mdia.hdlr.component_subtype, "STpn")) { return i; } if (quicktime_match_32(file->moov.trak[i]->mdia.hdlr.component_subtype, "pano")) { return i; } } return -1;}int lqt_qtvr_get_panotype(quicktime_t *file){ if (lqt_is_qtvr(file) == QTVR_PAN) { if (lqt_qtvr_get_qtvr_track(file) >= 0 && quicktime_match_32(file->qtvr_node[0].pdat.panoType, "hcyl")) { return QTVR_PANO_HORZ; } return QTVR_PANO_VERT; } return -1;}/* object specific */int lqt_qtvr_get_object_track(quicktime_t *file){ int i; for(i = 0; i < file->moov.total_tracks; i++) { if (quicktime_match_32(file->moov.trak[i]->mdia.hdlr.component_subtype, "obje")) { return i; } } return -1;}/* get qtvr track */int lqt_qtvr_get_qtvr_track(quicktime_t *file){ int i; for(i = 0; i < file->moov.total_tracks; i++) { if (quicktime_match_32(file->moov.trak[i]->mdia.hdlr.component_subtype, "qtvr")) { return i; } } return -1;}/* set/get image track */int lqt_qtvr_set_image_track(quicktime_t *file, int track){ if (lqt_qtvr_get_object_track(file) >= 0) { int otrack = lqt_qtvr_get_object_track(file); if (otrack != -1 && file->total_vtracks > track) { file->moov.trak[otrack]->tref.references[0].tracks[0] = file->vtracks[track].track->tkhd.track_id; return 0; } } else { int ptrack = lqt_qtvr_get_panorama_track(file); if (ptrack != -1 && file->total_vtracks > track) { /* reset the prevous vtracks flags if required */ if (file->moov.trak[ptrack]->mdia.minf.stbl.stsd.table->pano.STrack != 0) file->moov.trak[lqt_track_from_id(file, file->moov.trak[ptrack]->mdia.minf.stbl.stsd.table->pano.STrack)]->tkhd.flags = 15; file->moov.trak[ptrack]->mdia.minf.stbl.stsd.table->pano.STrack = file->vtracks[track].track->tkhd.track_id; file->vtracks[track].track->tkhd.flags = 14; /* deactivate this vtrack */ return 0; } } return -1;}// This will not work correctly with movies that contain panos and obj movies in the same file// possibly replace with _get_object_image_track() and _get_pano_image_track()int lqt_qtvr_get_image_track(quicktime_t *file){ if (lqt_qtvr_get_qtvr_track(file) >= 0) { if (lqt_qtvr_get_object_track(file) != -1) { return file->moov.trak[lqt_qtvr_get_object_track(file)]->tref.references[0].tracks[0]; } else if (lqt_qtvr_get_panorama_track(file) != -1) { return file->qtvr_node[0].pdat.imageRefTrackIndex; } } else { if (lqt_qtvr_get_panorama_track(file) != -1) { return file->moov.trak[lqt_qtvr_get_panorama_track(file)]->mdia.minf.stbl.stsd.table->pano.STrack; } } return -1;}/* get track by track id */int lqt_track_from_id(quicktime_t *file, int track_id){ int i; for(i = 0; i < file->moov.total_tracks; i++) { if (file->moov.trak[i]->tkhd.track_id == track_id ) return i; } return -1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -