mirror of
				https://github.com/nyanmisaka/ffmpeg-rockchip.git
				synced 2025-10-31 20:42:49 +08:00 
			
		
		
		
	 73f6cce936
			
		
	
	73f6cce936
	
	
	
		
			
			Signed-off-by: Pierre-Anthony Lemieux <pal@palemieux.com> Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
		
			
				
	
	
		
			208 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			208 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * This file is part of FFmpeg.
 | |
|  *
 | |
|  * FFmpeg is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * FFmpeg 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
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with FFmpeg; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | |
|  */
 | |
| 
 | |
| /*
 | |
|  *
 | |
|  * Copyright (c) Sandflow Consulting LLC
 | |
|  *
 | |
|  * Redistribution and use in source and binary forms, with or without
 | |
|  * modification, are permitted provided that the following conditions are met:
 | |
|  *
 | |
|  * * Redistributions of source code must retain the above copyright notice, this
 | |
|  *   list of conditions and the following disclaimer.
 | |
|  * * Redistributions in binary form must reproduce the above copyright notice,
 | |
|  *   this list of conditions and the following disclaimer in the documentation
 | |
|  *   and/or other materials provided with the distribution.
 | |
|  *
 | |
|  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 | |
|  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 | |
|  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 | |
|  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 | |
|  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 | |
|  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 | |
|  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 | |
|  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 | |
|  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 | |
|  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 | |
|  * POSSIBILITY OF SUCH DAMAGE.
 | |
|  */
 | |
| 
 | |
| /**
 | |
|  * Public header file for the processing of Interoperable Master Format (IMF)
 | |
|  * packages.
 | |
|  *
 | |
|  * @author Pierre-Anthony Lemieux
 | |
|  * @author Valentin Noel
 | |
|  * @file
 | |
|  * @ingroup lavu_imf
 | |
|  */
 | |
| 
 | |
| #ifndef AVFORMAT_IMF_H
 | |
| #define AVFORMAT_IMF_H
 | |
| 
 | |
| #include "avformat.h"
 | |
| #include "libavformat/avio.h"
 | |
| #include "libavutil/rational.h"
 | |
| #include <libxml/tree.h>
 | |
| 
 | |
| #define FF_IMF_UUID_FORMAT                            \
 | |
|     "urn:uuid:%02hhx%02hhx%02hhx%02hhx-%02hhx%02hhx-" \
 | |
|     "%02hhx%02hhx-%02hhx%02hhx-%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx"
 | |
| 
 | |
| /**
 | |
|  * UUID as defined in IETF RFC 422
 | |
|  */
 | |
| typedef uint8_t FFIMFUUID[16];
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist Base Resource
 | |
|  */
 | |
| typedef struct FFIMFBaseResource {
 | |
|     AVRational edit_rate;  /**< BaseResourceType/EditRate */
 | |
|     uint32_t entry_point;  /**< BaseResourceType/EntryPoint */
 | |
|     uint32_t duration;     /**< BaseResourceType/Duration */
 | |
|     uint32_t repeat_count; /**< BaseResourceType/RepeatCount */
 | |
| } FFIMFBaseResource;
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist Track File Resource
 | |
|  */
 | |
| typedef struct FFIMFTrackFileResource {
 | |
|     FFIMFBaseResource base;
 | |
|     FFIMFUUID track_file_uuid; /**< TrackFileResourceType/TrackFileId */
 | |
| } FFIMFTrackFileResource;
 | |
| 
 | |
| /**
 | |
|  * IMF Marker
 | |
|  */
 | |
| typedef struct FFIMFMarker {
 | |
|     xmlChar *label_utf8; /**< Marker/Label */
 | |
|     xmlChar *scope_utf8; /**< Marker/Label/\@scope */
 | |
|     uint32_t offset;     /**< Marker/Offset */
 | |
| } FFIMFMarker;
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist Marker Resource
 | |
|  */
 | |
| typedef struct FFIMFMarkerResource {
 | |
|     FFIMFBaseResource base;
 | |
|     uint32_t marker_count; /**< Number of Marker elements */
 | |
|     FFIMFMarker *markers;  /**< Marker elements */
 | |
| } FFIMFMarkerResource;
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist Virtual Track
 | |
|  */
 | |
| typedef struct FFIMFBaseVirtualTrack {
 | |
|     FFIMFUUID id_uuid; /**< TrackId associated with the Virtual Track */
 | |
| } FFIMFBaseVirtualTrack;
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist Virtual Track that consists of Track File Resources
 | |
|  */
 | |
| typedef struct FFIMFTrackFileVirtualTrack {
 | |
|     FFIMFBaseVirtualTrack base;
 | |
|     uint32_t resource_count;           /**< Number of Resource elements present in the Virtual Track */
 | |
|     FFIMFTrackFileResource *resources; /**< Resource elements of the Virtual Track */
 | |
|     unsigned int resources_alloc_sz;   /**< Size of the resources buffer */
 | |
| } FFIMFTrackFileVirtualTrack;
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist Virtual Track that consists of Marker Resources
 | |
|  */
 | |
| typedef struct FFIMFMarkerVirtualTrack {
 | |
|     FFIMFBaseVirtualTrack base;
 | |
|     uint32_t resource_count;        /**< Number of Resource elements present in the Virtual Track */
 | |
|     FFIMFMarkerResource *resources; /**< Resource elements of the Virtual Track */
 | |
| } FFIMFMarkerVirtualTrack;
 | |
| 
 | |
| /**
 | |
|  * IMF Composition Playlist
 | |
|  */
 | |
| typedef struct FFIMFCPL {
 | |
|     FFIMFUUID id_uuid;                               /**< CompositionPlaylist/Id element */
 | |
|     xmlChar *content_title_utf8;                     /**< CompositionPlaylist/ContentTitle element */
 | |
|     AVRational edit_rate;                            /**< CompositionPlaylist/EditRate element */
 | |
|     FFIMFMarkerVirtualTrack *main_markers_track;     /**< Main Marker Virtual Track */
 | |
|     FFIMFTrackFileVirtualTrack *main_image_2d_track; /**< Main Image Virtual Track */
 | |
|     uint32_t main_audio_track_count;                 /**< Number of Main Audio Virtual Tracks */
 | |
|     FFIMFTrackFileVirtualTrack *main_audio_tracks;   /**< Main Audio Virtual Tracks */
 | |
| } FFIMFCPL;
 | |
| 
 | |
| /**
 | |
|  * Parse an IMF CompositionPlaylist element into the FFIMFCPL data structure.
 | |
|  * @param[in] doc An XML document from which the CPL is read.
 | |
|  * @param[out] cpl Pointer to a memory area (allocated by the client), where the
 | |
|  *  function writes a pointer to the newly constructed FFIMFCPL structure (or
 | |
|  *  NULL if the CPL could not be parsed). The client is responsible for freeing
 | |
|  *  the FFIMFCPL structure using ff_imf_cpl_free().
 | |
|  * @return A non-zero value in case of an error.
 | |
|  */
 | |
| int ff_imf_parse_cpl_from_xml_dom(xmlDocPtr doc, FFIMFCPL **cpl);
 | |
| 
 | |
| /**
 | |
|  * Parse an IMF Composition Playlist document into the FFIMFCPL data structure.
 | |
|  * @param[in] in The context from which the CPL is read.
 | |
|  * @param[out] cpl Pointer to a memory area (allocated by the client), where the
 | |
|  * function writes a pointer to the newly constructed FFIMFCPL structure (or
 | |
|  * NULL if the CPL could not be parsed). The client is responsible for freeing
 | |
|  * the FFIMFCPL structure using ff_imf_cpl_free().
 | |
|  * @return A non-zero value in case of an error.
 | |
|  */
 | |
| int ff_imf_parse_cpl(AVIOContext *in, FFIMFCPL **cpl);
 | |
| 
 | |
| /**
 | |
|  * Allocates and initializes an FFIMFCPL data structure.
 | |
|  * @return A pointer to the newly constructed FFIMFCPL structure (or NULL if the
 | |
|  * structure could not be constructed). The client is responsible for freeing
 | |
|  * the FFIMFCPL structure using ff_imf_cpl_free().
 | |
|  */
 | |
| FFIMFCPL *ff_imf_cpl_alloc(void);
 | |
| 
 | |
| /**
 | |
|  * Deletes an FFIMFCPL data structure previously instantiated with ff_imf_cpl_alloc().
 | |
|  * @param[in] cpl The FFIMFCPL structure to delete.
 | |
|  */
 | |
| void ff_imf_cpl_free(FFIMFCPL *cpl);
 | |
| 
 | |
| /**
 | |
|  * Reads an unsigned 32-bit integer from an XML element
 | |
|  * @return 0 on success, < 0 AVERROR code on error.
 | |
|  */
 | |
| int ff_imf_xml_read_uint32(xmlNodePtr element, uint32_t *number);
 | |
| 
 | |
| /**
 | |
|  * Reads an AVRational from an XML element
 | |
|  * @return 0 on success, < 0 AVERROR code on error.
 | |
|  */
 | |
| int ff_imf_xml_read_rational(xmlNodePtr element, AVRational *rational);
 | |
| 
 | |
| /**
 | |
|  * Reads a UUID from an XML element
 | |
|  * @return 0 on success, < 0 AVERROR code on error.
 | |
|  */
 | |
| int ff_imf_xml_read_uuid(xmlNodePtr element, uint8_t uuid[16]);
 | |
| 
 | |
| /**
 | |
|  * Returns the first child element with the specified local name
 | |
|  * @return A pointer to the child element, or NULL if no such child element exists.
 | |
|  */
 | |
| xmlNodePtr ff_imf_xml_get_child_element_by_name(xmlNodePtr parent, const char *name_utf8);
 | |
| 
 | |
| #endif
 |