Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-inclu...
File: class-avif-info.php
$status = $this->parse_ipco( $box->content_size );
[500] Fix | Delete
if ( $status != NOT_FOUND ) {
[501] Fix | Delete
return $status;
[502] Fix | Delete
}
[503] Fix | Delete
} else if ( $box->type == 'ipma' ) {
[504] Fix | Delete
// See ISO/IEC 23008-12:2017(E) 9.3.2
[505] Fix | Delete
$num_read_bytes = 4;
[506] Fix | Delete
if ( $box->content_size < $num_read_bytes ) {
[507] Fix | Delete
return INVALID;
[508] Fix | Delete
}
[509] Fix | Delete
if ( !( $data = read( $this->handle, $num_read_bytes ) ) ) {
[510] Fix | Delete
return TRUNCATED;
[511] Fix | Delete
}
[512] Fix | Delete
$entry_count = read_big_endian( $data, 4 );
[513] Fix | Delete
$id_num_bytes = ( $box->version < 1 ) ? 2 : 4;
[514] Fix | Delete
$index_num_bytes = ( $box->flags & 1 ) ? 2 : 1;
[515] Fix | Delete
$essential_bit_mask = ( $box->flags & 1 ) ? 0x8000 : 0x80;
[516] Fix | Delete
[517] Fix | Delete
for ( $entry = 0; $entry < $entry_count; ++$entry ) {
[518] Fix | Delete
if ( $entry >= MAX_PROPS ||
[519] Fix | Delete
count( $this->features->props ) >= MAX_PROPS ) {
[520] Fix | Delete
$this->data_was_skipped = true;
[521] Fix | Delete
break;
[522] Fix | Delete
}
[523] Fix | Delete
$num_read_bytes += $id_num_bytes + 1;
[524] Fix | Delete
if ( $box->content_size < $num_read_bytes ) {
[525] Fix | Delete
return INVALID;
[526] Fix | Delete
}
[527] Fix | Delete
if ( !( $data = read( $this->handle, $id_num_bytes + 1 ) ) ) {
[528] Fix | Delete
return TRUNCATED;
[529] Fix | Delete
}
[530] Fix | Delete
$item_id = read_big_endian(
[531] Fix | Delete
substr( $data, 0, $id_num_bytes ), $id_num_bytes );
[532] Fix | Delete
$association_count = read_big_endian(
[533] Fix | Delete
substr( $data, $id_num_bytes, 1 ), 1 );
[534] Fix | Delete
[535] Fix | Delete
for ( $property = 0; $property < $association_count; ++$property ) {
[536] Fix | Delete
if ( $property >= MAX_PROPS ||
[537] Fix | Delete
count( $this->features->props ) >= MAX_PROPS ) {
[538] Fix | Delete
$this->data_was_skipped = true;
[539] Fix | Delete
break;
[540] Fix | Delete
}
[541] Fix | Delete
$num_read_bytes += $index_num_bytes;
[542] Fix | Delete
if ( $box->content_size < $num_read_bytes ) {
[543] Fix | Delete
return INVALID;
[544] Fix | Delete
}
[545] Fix | Delete
if ( !( $data = read( $this->handle, $index_num_bytes ) ) ) {
[546] Fix | Delete
return TRUNCATED;
[547] Fix | Delete
}
[548] Fix | Delete
$value = read_big_endian( $data, $index_num_bytes );
[549] Fix | Delete
// $essential = ($value & $essential_bit_mask); // Unused.
[550] Fix | Delete
$property_index = ( $value & ~$essential_bit_mask );
[551] Fix | Delete
if ( $property_index <= MAX_VALUE && $item_id <= MAX_VALUE ) {
[552] Fix | Delete
$prop_count = count( $this->features->props );
[553] Fix | Delete
$this->features->props[$prop_count] = new Prop();
[554] Fix | Delete
$this->features->props[$prop_count]->property_index = $property_index;
[555] Fix | Delete
$this->features->props[$prop_count]->item_id = $item_id;
[556] Fix | Delete
} else {
[557] Fix | Delete
$this->data_was_skipped = true;
[558] Fix | Delete
}
[559] Fix | Delete
}
[560] Fix | Delete
if ( $property < $association_count ) {
[561] Fix | Delete
break; // Do not read garbage.
[562] Fix | Delete
}
[563] Fix | Delete
}
[564] Fix | Delete
[565] Fix | Delete
// If all features are available now, do not look further.
[566] Fix | Delete
$status = $this->features->get_primary_item_features();
[567] Fix | Delete
if ( $status != NOT_FOUND ) {
[568] Fix | Delete
return $status;
[569] Fix | Delete
}
[570] Fix | Delete
[571] Fix | Delete
// Mostly if 'data_was_skipped'.
[572] Fix | Delete
if ( !skip( $this->handle, $box->content_size - $num_read_bytes ) ) {
[573] Fix | Delete
return TRUNCATED;
[574] Fix | Delete
}
[575] Fix | Delete
} else {
[576] Fix | Delete
if ( !skip( $this->handle, $box->content_size ) ) {
[577] Fix | Delete
return TRUNCATED;
[578] Fix | Delete
}
[579] Fix | Delete
}
[580] Fix | Delete
$num_remaining_bytes -= $box->size;
[581] Fix | Delete
} while ( $num_remaining_bytes > 0 );
[582] Fix | Delete
return NOT_FOUND;
[583] Fix | Delete
}
[584] Fix | Delete
[585] Fix | Delete
/**
[586] Fix | Delete
* Parses an "iref" box.
[587] Fix | Delete
*
[588] Fix | Delete
* The "dimg" boxes contain links between tiles and their parent items, which
[589] Fix | Delete
* can be used to infer bit depth and number of channels for the primary item
[590] Fix | Delete
* when the latter does not have these properties.
[591] Fix | Delete
*
[592] Fix | Delete
* @param stream $handle The resource the box will be parsed from.
[593] Fix | Delete
* @param int $num_remaining_bytes The number of bytes that should be available from the resource.
[594] Fix | Delete
* @return Status FOUND on success or an error on failure.
[595] Fix | Delete
*/
[596] Fix | Delete
private function parse_iref( $num_remaining_bytes ) {
[597] Fix | Delete
do {
[598] Fix | Delete
$box = new Box();
[599] Fix | Delete
$status = $box->parse( $this->handle, $this->num_parsed_boxes, $num_remaining_bytes );
[600] Fix | Delete
if ( $status != FOUND ) {
[601] Fix | Delete
return $status;
[602] Fix | Delete
}
[603] Fix | Delete
[604] Fix | Delete
if ( $box->type == 'dimg' ) {
[605] Fix | Delete
// See ISO/IEC 14496-12:2015(E) 8.11.12.2
[606] Fix | Delete
$num_bytes_per_id = ( $box->version == 0 ) ? 2 : 4;
[607] Fix | Delete
$num_read_bytes = $num_bytes_per_id + 2;
[608] Fix | Delete
if ( $box->content_size < $num_read_bytes ) {
[609] Fix | Delete
return INVALID;
[610] Fix | Delete
}
[611] Fix | Delete
if ( !( $data = read( $this->handle, $num_read_bytes ) ) ) {
[612] Fix | Delete
return TRUNCATED;
[613] Fix | Delete
}
[614] Fix | Delete
$from_item_id = read_big_endian( $data, $num_bytes_per_id );
[615] Fix | Delete
$reference_count = read_big_endian( substr( $data, $num_bytes_per_id, 2 ), 2 );
[616] Fix | Delete
[617] Fix | Delete
for ( $i = 0; $i < $reference_count; ++$i ) {
[618] Fix | Delete
if ( $i >= MAX_TILES ) {
[619] Fix | Delete
$this->data_was_skipped = true;
[620] Fix | Delete
break;
[621] Fix | Delete
}
[622] Fix | Delete
$num_read_bytes += $num_bytes_per_id;
[623] Fix | Delete
if ( $box->content_size < $num_read_bytes ) {
[624] Fix | Delete
return INVALID;
[625] Fix | Delete
}
[626] Fix | Delete
if ( !( $data = read( $this->handle, $num_bytes_per_id ) ) ) {
[627] Fix | Delete
return TRUNCATED;
[628] Fix | Delete
}
[629] Fix | Delete
$to_item_id = read_big_endian( $data, $num_bytes_per_id );
[630] Fix | Delete
$tile_count = count( $this->features->tiles );
[631] Fix | Delete
if ( $from_item_id <= MAX_VALUE && $to_item_id <= MAX_VALUE &&
[632] Fix | Delete
$tile_count < MAX_TILES ) {
[633] Fix | Delete
$this->features->tiles[$tile_count] = new Tile();
[634] Fix | Delete
$this->features->tiles[$tile_count]->tile_item_id = $to_item_id;
[635] Fix | Delete
$this->features->tiles[$tile_count]->parent_item_id = $from_item_id;
[636] Fix | Delete
} else {
[637] Fix | Delete
$this->data_was_skipped = true;
[638] Fix | Delete
}
[639] Fix | Delete
}
[640] Fix | Delete
[641] Fix | Delete
// If all features are available now, do not look further.
[642] Fix | Delete
$status = $this->features->get_primary_item_features();
[643] Fix | Delete
if ( $status != NOT_FOUND ) {
[644] Fix | Delete
return $status;
[645] Fix | Delete
}
[646] Fix | Delete
[647] Fix | Delete
// Mostly if 'data_was_skipped'.
[648] Fix | Delete
if ( !skip( $this->handle, $box->content_size - $num_read_bytes ) ) {
[649] Fix | Delete
return TRUNCATED;
[650] Fix | Delete
}
[651] Fix | Delete
} else {
[652] Fix | Delete
if ( !skip( $this->handle, $box->content_size ) ) {
[653] Fix | Delete
return TRUNCATED;
[654] Fix | Delete
}
[655] Fix | Delete
}
[656] Fix | Delete
$num_remaining_bytes -= $box->size;
[657] Fix | Delete
} while ( $num_remaining_bytes > 0 );
[658] Fix | Delete
return NOT_FOUND;
[659] Fix | Delete
}
[660] Fix | Delete
[661] Fix | Delete
/**
[662] Fix | Delete
* Parses a "meta" box.
[663] Fix | Delete
*
[664] Fix | Delete
* It looks for the primary item ID in the "pitm" box and recurses into other boxes
[665] Fix | Delete
* to find its features.
[666] Fix | Delete
*
[667] Fix | Delete
* @param stream $handle The resource the box will be parsed from.
[668] Fix | Delete
* @param int $num_remaining_bytes The number of bytes that should be available from the resource.
[669] Fix | Delete
* @return Status FOUND on success or an error on failure.
[670] Fix | Delete
*/
[671] Fix | Delete
private function parse_meta( $num_remaining_bytes ) {
[672] Fix | Delete
do {
[673] Fix | Delete
$box = new Box();
[674] Fix | Delete
$status = $box->parse( $this->handle, $this->num_parsed_boxes, $num_remaining_bytes );
[675] Fix | Delete
if ( $status != FOUND ) {
[676] Fix | Delete
return $status;
[677] Fix | Delete
}
[678] Fix | Delete
[679] Fix | Delete
if ( $box->type == 'pitm' ) {
[680] Fix | Delete
// See ISO/IEC 14496-12:2015(E) 8.11.4.2
[681] Fix | Delete
$num_bytes_per_id = ( $box->version == 0 ) ? 2 : 4;
[682] Fix | Delete
if ( $num_bytes_per_id > $num_remaining_bytes ) {
[683] Fix | Delete
return INVALID;
[684] Fix | Delete
}
[685] Fix | Delete
if ( !( $data = read( $this->handle, $num_bytes_per_id ) ) ) {
[686] Fix | Delete
return TRUNCATED;
[687] Fix | Delete
}
[688] Fix | Delete
$primary_item_id = read_big_endian( $data, $num_bytes_per_id );
[689] Fix | Delete
if ( $primary_item_id > MAX_VALUE ) {
[690] Fix | Delete
return ABORTED;
[691] Fix | Delete
}
[692] Fix | Delete
$this->features->has_primary_item = true;
[693] Fix | Delete
$this->features->primary_item_id = $primary_item_id;
[694] Fix | Delete
if ( !skip( $this->handle, $box->content_size - $num_bytes_per_id ) ) {
[695] Fix | Delete
return TRUNCATED;
[696] Fix | Delete
}
[697] Fix | Delete
} else if ( $box->type == 'iprp' ) {
[698] Fix | Delete
$status = $this->parse_iprp( $box->content_size );
[699] Fix | Delete
if ( $status != NOT_FOUND ) {
[700] Fix | Delete
return $status;
[701] Fix | Delete
}
[702] Fix | Delete
} else if ( $box->type == 'iref' ) {
[703] Fix | Delete
$status = $this->parse_iref( $box->content_size );
[704] Fix | Delete
if ( $status != NOT_FOUND ) {
[705] Fix | Delete
return $status;
[706] Fix | Delete
}
[707] Fix | Delete
} else {
[708] Fix | Delete
if ( !skip( $this->handle, $box->content_size ) ) {
[709] Fix | Delete
return TRUNCATED;
[710] Fix | Delete
}
[711] Fix | Delete
}
[712] Fix | Delete
$num_remaining_bytes -= $box->size;
[713] Fix | Delete
} while ( $num_remaining_bytes != 0 );
[714] Fix | Delete
// According to ISO/IEC 14496-12:2012(E) 8.11.1.1 there is at most one "meta".
[715] Fix | Delete
return INVALID;
[716] Fix | Delete
}
[717] Fix | Delete
[718] Fix | Delete
/**
[719] Fix | Delete
* Parses a file stream.
[720] Fix | Delete
*
[721] Fix | Delete
* The file type is checked through the "ftyp" box.
[722] Fix | Delete
*
[723] Fix | Delete
* @return bool True if the input stream is an AVIF bitstream or false.
[724] Fix | Delete
*/
[725] Fix | Delete
public function parse_ftyp() {
[726] Fix | Delete
$box = new Box();
[727] Fix | Delete
$status = $box->parse( $this->handle, $this->num_parsed_boxes );
[728] Fix | Delete
if ( $status != FOUND ) {
[729] Fix | Delete
return false;
[730] Fix | Delete
}
[731] Fix | Delete
[732] Fix | Delete
if ( $box->type != 'ftyp' ) {
[733] Fix | Delete
return false;
[734] Fix | Delete
}
[735] Fix | Delete
// Iterate over brands. See ISO/IEC 14496-12:2012(E) 4.3.1
[736] Fix | Delete
if ( $box->content_size < 8 ) {
[737] Fix | Delete
return false;
[738] Fix | Delete
}
[739] Fix | Delete
for ( $i = 0; $i + 4 <= $box->content_size; $i += 4 ) {
[740] Fix | Delete
if ( !( $data = read( $this->handle, 4 ) ) ) {
[741] Fix | Delete
return false;
[742] Fix | Delete
}
[743] Fix | Delete
if ( $i == 4 ) {
[744] Fix | Delete
continue; // Skip minor_version.
[745] Fix | Delete
}
[746] Fix | Delete
if ( substr( $data, 0, 4 ) == 'avif' || substr( $data, 0, 4 ) == 'avis' ) {
[747] Fix | Delete
return skip( $this->handle, $box->content_size - ( $i + 4 ) );
[748] Fix | Delete
}
[749] Fix | Delete
if ( $i > 32 * 4 ) {
[750] Fix | Delete
return false; // Be reasonable.
[751] Fix | Delete
}
[752] Fix | Delete
[753] Fix | Delete
}
[754] Fix | Delete
return false; // No AVIF brand no good.
[755] Fix | Delete
}
[756] Fix | Delete
[757] Fix | Delete
/**
[758] Fix | Delete
* Parses a file stream.
[759] Fix | Delete
*
[760] Fix | Delete
* Features are extracted from the "meta" box.
[761] Fix | Delete
*
[762] Fix | Delete
* @return bool True if the main features of the primary item were parsed or false.
[763] Fix | Delete
*/
[764] Fix | Delete
public function parse_file() {
[765] Fix | Delete
$box = new Box();
[766] Fix | Delete
while ( $box->parse( $this->handle, $this->num_parsed_boxes ) == FOUND ) {
[767] Fix | Delete
if ( $box->type === 'meta' ) {
[768] Fix | Delete
if ( $this->parse_meta( $box->content_size ) != FOUND ) {
[769] Fix | Delete
return false;
[770] Fix | Delete
}
[771] Fix | Delete
return true;
[772] Fix | Delete
}
[773] Fix | Delete
if ( !skip( $this->handle, $box->content_size ) ) {
[774] Fix | Delete
return false;
[775] Fix | Delete
}
[776] Fix | Delete
}
[777] Fix | Delete
return false; // No "meta" no good.
[778] Fix | Delete
}
[779] Fix | Delete
}
[780] Fix | Delete
[781] Fix | Delete
12
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function