📄 ifowriter.cc
字号:
//// Copyright (c) 2003 by Istv醤 V醨adi//// This file is part of dxr3Player, a DVD player written specifically // for the DXR3 (aka Hollywood+) decoder card.// This program is free software; you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation; either version 2 of the License, or// (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA//------------------------------------------------------------------------------#include "IFOWriter.h"//------------------------------------------------------------------------------using ifodump::IFOWriter;using dvd::DVDDump;//------------------------------------------------------------------------------// Hidden methods (for GCC <3.0)//------------------------------------------------------------------------------inline void IFOWriter::write(uint8_t x){ FileWriter::write(x);}inline void IFOWriter::write(uint16_t x){ FileWriter::write(x);}inline void IFOWriter::write(uint32_t x){ FileWriter::write(x);}inline void IFOWriter::write(uint64_t x){ FileWriter::write(x);}inline void IFOWriter::write(const void* buffer, size_t length){ FileWriter::write(buffer, length);}inline void IFOWriter::write(const vm_cmd_t& cmd){ Writer<IFOWriter>::write(cmd);}inline void IFOWriter::write(const user_ops_t& userOperations){ Writer<IFOWriter>::write(userOperations);}//------------------------------------------------------------------------------//------------------------------------------------------------------------------void IFOWriter::write(const dvd_time_t& t){ write(t.hour); write(t.minute); write(t.second); write(t.frame_u);}//------------------------------------------------------------------------------void IFOWriter::write(const video_attr_t& attr){ write(&attr, sizeof(video_attr_t));}//------------------------------------------------------------------------------void IFOWriter::write(const audio_attr_t& attr){ write(&attr, 2); write(attr.lang_code); write(attr.lang_extension); write(attr.code_extension); write(attr.unknown3); write(&attr.app_info, 1);}//------------------------------------------------------------------------------void IFOWriter::write(const subp_attr_t& attr){ write(attr.type); write(attr.zero1); write(attr.lang_code); write(attr.lang_extension); write(attr.zero2);}//------------------------------------------------------------------------------void IFOWriter::write(const pgc_command_tbl_t& commandTable){ write(commandTable.zero_1); writeArray(commandTable.nr_of_pre, commandTable.pre_cmds); writeArray(commandTable.nr_of_post, commandTable.post_cmds); writeArray(commandTable.nr_of_cell, commandTable.cell_cmds);}//------------------------------------------------------------------------------void IFOWriter::write(const cell_playback_t& cellPlayback){ write(&cellPlayback, 2); write(cellPlayback.still_time); write(cellPlayback.cell_cmd_nr); write(cellPlayback.playback_time); write(cellPlayback.first_sector); write(cellPlayback.first_ilvu_end_sector); write(cellPlayback.last_vobu_start_sector); write(cellPlayback.last_sector);}//------------------------------------------------------------------------------void IFOWriter::write(const cell_position_t& cellPosition){ write(cellPosition.vob_id_nr); write(cellPosition.zero_1); write(cellPosition.cell_nr);}//------------------------------------------------------------------------------void IFOWriter::write(const pgc_t& pgc){ write(pgc.zero_1); write(pgc.playback_time); write(pgc.prohibited_ops); writeFixedArray(sizeof(pgc.audio_control), pgc.audio_control); writeFixedArray(sizeof(pgc.subp_control), pgc.subp_control); write(pgc.next_pgc_nr); write(pgc.prev_pgc_nr); write(pgc.goup_pgc_nr); write(pgc.still_time); write(pgc.pg_playback_mode); writeFixedArray(sizeof(pgc.palette), pgc.palette); write(pgc.command_tbl_offset); write(pgc.program_map_offset); write(pgc.cell_playback_offset); write(pgc.cell_position_offset); writePointer(pgc.command_tbl); writeArray(pgc.nr_of_programs, pgc.program_map); writeArray(pgc.nr_of_cells, pgc.cell_playback); writeArray(pgc.nr_of_cells, pgc.cell_position);}//------------------------------------------------------------------------------void IFOWriter::write(const pgci_srp_t& pgciSRP){ write(pgciSRP.entry_id); write((&pgciSRP.entry_id)+1, 1); write(pgciSRP.ptl_id_mask); write(pgciSRP.pgc_start_byte); writePointer(pgciSRP.pgc);}//------------------------------------------------------------------------------void IFOWriter::write(const pgcit_t& pgci){ write(pgci.zero_1); write(pgci.last_byte); writeArray(pgci.nr_of_pgci_srp, pgci.pgci_srp);}//------------------------------------------------------------------------------void IFOWriter::write(const pgci_lu_t& pgciLanguageUnit){ write(pgciLanguageUnit.lang_code); write(pgciLanguageUnit.lang_extension); write(pgciLanguageUnit.exists); write(pgciLanguageUnit.lang_start_byte); writePointer(pgciLanguageUnit.pgcit);}//------------------------------------------------------------------------------void IFOWriter::write(const pgci_ut_t& pgciUnitTable){ write(pgciUnitTable.zero_1); write(pgciUnitTable.last_byte); writeArray(pgciUnitTable.nr_of_lus, pgciUnitTable.lu);}//------------------------------------------------------------------------------void IFOWriter::write(const cell_adr_t& cellAddress){ write(cellAddress.vob_id); write(cellAddress.cell_id); write(cellAddress.zero_1); write(cellAddress.start_sector); write(cellAddress.last_sector);}//------------------------------------------------------------------------------void IFOWriter::write(const c_adt_t& cellAddressTable){ write(cellAddressTable.nr_of_vobs); write(cellAddressTable.zero_1); writeLastArray(cellAddressTable.last_byte, cellAddressTable.cell_adr_table);}//------------------------------------------------------------------------------void IFOWriter::write(const vobu_admap_t& vobuAddressMap){ writeLastArray(vobuAddressMap.last_byte, vobuAddressMap.vobu_start_sectors);}//------------------------------------------------------------------------------void IFOWriter::write(const vmgi_mat_t& vmgiMat){ write(vmgiMat.vmg_identifier, sizeof(vmgiMat.vmg_identifier)); write(vmgiMat.vmg_last_sector); write(vmgiMat.zero_1, sizeof(vmgiMat.zero_1)); write(vmgiMat.vmgi_last_sector); write(vmgiMat.zero_2); write(vmgiMat.specification_version); write(vmgiMat.vmg_category); write(vmgiMat.vmg_nr_of_volumes); write(vmgiMat.vmg_this_volume_nr); write(vmgiMat.disc_side); write(vmgiMat.zero_3, sizeof(vmgiMat.zero_3)); write(vmgiMat.vmg_nr_of_title_sets); write(vmgiMat.provider_identifier, sizeof(vmgiMat.provider_identifier)); write(vmgiMat.vmg_pos_code); write(vmgiMat.zero_4, sizeof(vmgiMat.zero_4)); write(vmgiMat.vmgi_last_byte); write(vmgiMat.first_play_pgc); write(vmgiMat.zero_5, sizeof(vmgiMat.zero_5)); write(vmgiMat.vmgm_vobs); write(vmgiMat.tt_srpt); write(vmgiMat.vmgm_pgci_ut); write(vmgiMat.ptl_mait); write(vmgiMat.vts_atrt); write(vmgiMat.txtdt_mgi); write(vmgiMat.vmgm_c_adt);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -