import type {InputVideoTrack} from 'mediabunny'; import React, {useEffect, useState} from 'react'; import {Table, TableBody, TableCell, TableRow} from '@/components/ui/table'; import {renderHumanReadableVideoCodec} from '~/lib/render-codec-label'; import {PacketList} from './PacketList'; import {TextButtonWithChevron} from './TexrButtonWithChevron'; import {usePackets} from './use-packets'; export const VideoTrackOverview: React.FC<{ readonly track: InputVideoTrack; readonly showPackets: boolean; readonly setShowPackets: (showPackets: boolean) => void; }> = ({track, showPackets, setShowPackets}) => { const [colorSpace, setColorSpace] = useState( null, ); useEffect(() => { track.getColorSpace().then((space) => { setColorSpace(space); }); }, [track]); const packets = usePackets({track}); if (showPackets) { return ; } return ( Type Video Packets setShowPackets(true)}> {packets.length} Codec {renderHumanReadableVideoCodec(track.codec)} WebCodecs Codec String {track.codec} Dimensions {track.displayWidth}x{track.displayHeight} Timescale {track.timeResolution} Rotation {track.rotation}° Unrotated dimensions {track.codedWidth}x{track.codedHeight} {colorSpace ? ( <> Color Primaries {colorSpace.primaries ?? 'N/A'} Color Matrix {colorSpace.matrix ?? 'N/A'} Color Transfer Characteristics {colorSpace.transfer ?? 'N/A'} Color Full Range {colorSpace.fullRange ? 'Yes' : colorSpace.fullRange === false ? 'No' : 'N/A'} ) : null}
); };