"Fossies" - the Fresh Open Source Software Archive

Member "gst-plugins-good-1.20.3/gst/isomp4/atomsrecovery.h" (15 Jun 2022, 5733 Bytes) of package /linux/misc/gst-plugins-good-1.20.3.tar.xz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "atomsrecovery.h" see the Fossies "Dox" file reference documentation.

    1 /* Quicktime muxer plugin for GStreamer
    2  * Copyright (C) 2010 Thiago Santos <thiago.sousa.santos@collabora.co.uk>
    3  *
    4  * This library is free software; you can redistribute it and/or
    5  * modify it under the terms of the GNU Library General Public
    6  * License as published by the Free Software Foundation; either
    7  * version 2 of the License, or (at your option) any later version.
    8  *
    9  * This library is distributed in the hope that it will be useful,
   10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
   11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   12  * Library General Public License for more details.
   13  *
   14  * You should have received a copy of the GNU Library General Public
   15  * License along with this library; if not, write to the
   16  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
   17  * Boston, MA 02110-1301, USA.
   18  */
   19 /*
   20  * Unless otherwise indicated, Source Code is licensed under MIT license.
   21  * See further explanation attached in License Statement (distributed in the file
   22  * LICENSE).
   23  *
   24  * Permission is hereby granted, free of charge, to any person obtaining a copy of
   25  * this software and associated documentation files (the "Software"), to deal in
   26  * the Software without restriction, including without limitation the rights to
   27  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
   28  * of the Software, and to permit persons to whom the Software is furnished to do
   29  * so, subject to the following conditions:
   30  *
   31  * The above copyright notice and this permission notice shall be included in all
   32  * copies or substantial portions of the Software.
   33  *
   34  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
   35  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   36  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
   37  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
   38  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
   39  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
   40  * SOFTWARE.
   41  */
   42 
   43 #ifndef __ATOMS_RECOVERY_H__
   44 #define __ATOMS_RECOVERY_H__
   45 
   46 #include <glib.h>
   47 #include <string.h>
   48 #include <stdio.h>
   49 #include <gst/gst.h>
   50 
   51 #include "atoms.h"
   52 
   53 /* Version to be incremented each time we decide
   54  * to change the file layout */
   55 #define ATOMS_RECOV_FILE_VERSION          1
   56 
   57 #define ATOMS_RECOV_QUARK (g_quark_from_string ("qtmux-atoms-recovery"))
   58 
   59 /* gerror error codes */
   60 #define ATOMS_RECOV_ERR_GENERIC           1
   61 #define ATOMS_RECOV_ERR_FILE              2
   62 #define ATOMS_RECOV_ERR_PARSING           3
   63 #define ATOMS_RECOV_ERR_VERSION           4
   64 
   65 /* this struct represents each buffer in a moov file, containing the info
   66  * that is placed in the stsd children atoms
   67  * Fields should be writen in BE order, and booleans should be writen as
   68  * 1byte with 0 for false, anything otherwise */
   69 #define TRAK_BUFFER_ENTRY_INFO_SIZE 34
   70 typedef struct
   71 {
   72   guint32   track_id;
   73   guint32   nsamples;
   74   guint32   delta;
   75   guint32   size;
   76   guint64   chunk_offset;
   77   guint64   pts_offset;
   78   gboolean  sync;
   79   gboolean  do_pts;
   80 } TrakBufferEntryInfo;
   81 
   82 typedef struct
   83 {
   84   guint32 trak_id;
   85   guint32 duration;  /* duration in trak timescale */
   86   guint32 timescale; /* trak's timescale */
   87 
   88   guint64 file_offset;
   89 
   90   /* need for later updating duration */
   91   guint64 tkhd_file_offset;
   92   guint64 mdhd_file_offset;
   93 
   94   /* need these offsets to update size */
   95   guint32 trak_size;
   96   guint64 mdia_file_offset;
   97   guint32 mdia_size;
   98   guint64 minf_file_offset;
   99   guint32 minf_size;
  100   guint64 stbl_file_offset;
  101   guint32 stbl_size;
  102 
  103   guint64 post_stsd_offset;
  104   guint32 stsd_size;
  105 
  106   guint32 extra_atoms_size;
  107   guint32 extra_atoms_offset;
  108 
  109   /* for storing the samples info */
  110   AtomSTBL stbl;
  111 } TrakRecovData;
  112 
  113 typedef struct
  114 {
  115   FILE * file;
  116   gboolean rawfile;
  117 
  118   /* results from parsing the input file */
  119   guint64   data_size;
  120   guint32   mdat_header_size;
  121   guint     mdat_start;
  122 
  123   guint64   mdat_size;
  124 } MdatRecovFile;
  125 
  126 typedef struct
  127 {
  128   FILE * file;
  129   guint32 timescale;
  130 
  131   guint32 mvhd_pos;
  132   guint32 mvhd_size;
  133   guint32 prefix_size; /* prefix + ftyp total size */
  134 
  135   gint num_traks;
  136   TrakRecovData *traks_rd;
  137 } MoovRecovFile;
  138 
  139 gboolean atoms_recov_write_trak_info      (FILE * f, AtomTRAK * trak);
  140 gboolean atoms_recov_write_headers        (FILE * f, AtomFTYP * ftyp,
  141                                            GstBuffer * prefix, AtomMOOV * moov,
  142                                            guint32 timescale,
  143                                            guint32 traks_number);
  144 gboolean atoms_recov_write_trak_samples   (FILE * f, AtomTRAK * trak,
  145                                            guint32 nsamples, guint32 delta,
  146                                            guint32 size, guint64 chunk_offset,
  147                                            gboolean sync, gboolean do_pts,
  148                                            gint64 pts_offset);
  149 
  150 MdatRecovFile * mdat_recov_file_create   (FILE * file, gboolean datafile,
  151                                           GError ** err);
  152 void            mdat_recov_file_free     (MdatRecovFile * mrf);
  153 MoovRecovFile * moov_recov_file_create   (FILE * file, GError ** err);
  154 void            moov_recov_file_free     (MoovRecovFile * moovrf);
  155 gboolean        moov_recov_parse_buffers (MoovRecovFile * moovrf,
  156                                           MdatRecovFile * mdatrf,
  157                                           GError ** err);
  158 gboolean        moov_recov_write_file    (MoovRecovFile * moovrf,
  159                                           MdatRecovFile * mdatrf, FILE * outf,
  160                                           GError ** err, GError ** warn);
  161 
  162 #endif /* __ATOMS_RECOVERY_H__ */