EbmlWriter.h revision 45aec286e984e04cde6ddea6b9eea66f113fc045
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync/* $Id$ */
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync/** @file
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * EbmlWriter.h - EBML writer + WebM container.
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync */
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync/*
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * Copyright (C) 2013-2014 Oracle Corporation
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync *
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * available from http://www.virtualbox.org. This file is free software;
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * General Public License (GPL) as published by the Free Software
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync */
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync/*
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * This code is based on:
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync *
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync *
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * Use of this source code is governed by a BSD-style license
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * that can be found in the LICENSE file in the root of the source
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * tree. An additional intellectual property rights grant can be found
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * in the file PATENTS. All contributing project authors may
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync * be found in the AUTHORS file in the root of the source tree.
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync */
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync#ifndef ____EBMLWRITER
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync#define ____EBMLWRITER
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync#include <vpx/vpx_encoder.h>
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsyncclass WebMWriter_Impl;
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsyncclass WebMWriter
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync{
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsyncpublic:
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync WebMWriter();
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync virtual ~WebMWriter();
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Creates output file
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @param a_pszFilename Name of the file to create.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @returns VBox status code. */
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync int create(const char *a_pszFilename);
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Closes output file. */
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync void close();
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Writes WebM header to file.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * Should be called before any writeBlock call.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @param a_pCfg Pointer to VPX Codec configuration structure.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @param a_pFps Framerate information (frames per second).
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @returns VBox status code.
3851c4a4d158e0776c6774fc21ed986667f34be3vboxsync */
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync int writeHeader(const vpx_codec_enc_cfg_t *a_pCfg, const vpx_rational *a_pFps);
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Writes a block of compressed data
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @param a_pCfg Pointer to VPX Codec configuration structure.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @param a_pPkt VPX data packet.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @returns VBox status code.
3851c4a4d158e0776c6774fc21ed986667f34be3vboxsync */
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync int writeBlock(const vpx_codec_enc_cfg_t *a_pCfg, const vpx_codec_cx_pkt_t *a_pPkt);
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Writes WebM footer.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * No other write functions should be called after this one.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @param a_u64Hash Hash value for the data written.
3851c4a4d158e0776c6774fc21ed986667f34be3vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @returns VBox status code.
3851c4a4d158e0776c6774fc21ed986667f34be3vboxsync */
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync int writeFooter(uint32_t a_u64Hash);
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Gets current output file size.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @returns File size in bytes.
3851c4a4d158e0776c6774fc21ed986667f34be3vboxsync */
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync uint64_t getFileSize();
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Gets current free storage space
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * available for the file.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync *
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * @returns Available storage free space.
3851c4a4d158e0776c6774fc21ed986667f34be3vboxsync */
c278e7d7a71519a4ce9d9ca7f3c2d28989effd1cvboxsync uint64_t getAvailableSpace();
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsyncprivate:
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* WebMWriter implementation.
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync * To isolate some include files */
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync WebMWriter_Impl *m_Impl;
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync
45aec286e984e04cde6ddea6b9eea66f113fc045vboxsync /* Not defined */
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync void operator=(const WebMWriter &);
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync WebMWriter(const WebMWriter &);
c31f30607ddcca383fd7cf1493b10196007e6e64vboxsync};
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync
1fdc81580c82b445d2d7ceae539b3a78ef56c22dvboxsync#endif