xref: /aosp_15_r20/external/libxaac/test/decoder/ixheaacd_metadata_read.c (revision 15dc779a375ca8b5125643b829a8aa4b70d7f451)
1*15dc779aSAndroid Build Coastguard Worker /******************************************************************************
2*15dc779aSAndroid Build Coastguard Worker  *                                                                            *
3*15dc779aSAndroid Build Coastguard Worker  * Copyright (C) 2018 The Android Open Source Project
4*15dc779aSAndroid Build Coastguard Worker  *
5*15dc779aSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
6*15dc779aSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
7*15dc779aSAndroid Build Coastguard Worker  * You may obtain a copy of the License at:
8*15dc779aSAndroid Build Coastguard Worker  *
9*15dc779aSAndroid Build Coastguard Worker  * http://www.apache.org/licenses/LICENSE-2.0
10*15dc779aSAndroid Build Coastguard Worker  *
11*15dc779aSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
12*15dc779aSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
13*15dc779aSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*15dc779aSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
15*15dc779aSAndroid Build Coastguard Worker  * limitations under the License.
16*15dc779aSAndroid Build Coastguard Worker  *
17*15dc779aSAndroid Build Coastguard Worker  *****************************************************************************
18*15dc779aSAndroid Build Coastguard Worker  * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
19*15dc779aSAndroid Build Coastguard Worker */
20*15dc779aSAndroid Build Coastguard Worker #include "ixheaac_type_def.h"
21*15dc779aSAndroid Build Coastguard Worker #include <stdlib.h>
22*15dc779aSAndroid Build Coastguard Worker #include <stdio.h>
23*15dc779aSAndroid Build Coastguard Worker #include <string.h>
24*15dc779aSAndroid Build Coastguard Worker #include "ixheaacd_metadata_read.h"
25*15dc779aSAndroid Build Coastguard Worker 
26*15dc779aSAndroid Build Coastguard Worker #define IA_MAX_CMDLINE_LENGTH 100
27*15dc779aSAndroid Build Coastguard Worker 
metadata_mp4_stsz_size_free(metadata_info * meta_info)28*15dc779aSAndroid Build Coastguard Worker void metadata_mp4_stsz_size_free(metadata_info *meta_info) {
29*15dc779aSAndroid Build Coastguard Worker   if (meta_info->ia_mp4_stsz_size != NULL) {
30*15dc779aSAndroid Build Coastguard Worker     free(meta_info->ia_mp4_stsz_size);
31*15dc779aSAndroid Build Coastguard Worker     meta_info->ia_mp4_stsz_size = NULL;
32*15dc779aSAndroid Build Coastguard Worker   }
33*15dc779aSAndroid Build Coastguard Worker }
34*15dc779aSAndroid Build Coastguard Worker 
ixheaacd_read_metadata_info(FILE * g_pf_metadata,metadata_info * meta_info)35*15dc779aSAndroid Build Coastguard Worker int ixheaacd_read_metadata_info(FILE *g_pf_metadata, metadata_info *meta_info) {
36*15dc779aSAndroid Build Coastguard Worker   char cmd[IA_MAX_CMDLINE_LENGTH];
37*15dc779aSAndroid Build Coastguard Worker 
38*15dc779aSAndroid Build Coastguard Worker   WORD32 i, j, k, l;
39*15dc779aSAndroid Build Coastguard Worker   i = j = k = l = 0;
40*15dc779aSAndroid Build Coastguard Worker   metadata_mp4_stsz_size_free(meta_info);
41*15dc779aSAndroid Build Coastguard Worker   while (fgets((char *)cmd, IA_MAX_CMDLINE_LENGTH, g_pf_metadata)) {
42*15dc779aSAndroid Build Coastguard Worker     if (!strncmp((pCHAR8)cmd, "-dec_info_init:", 15)) {
43*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 15);
44*15dc779aSAndroid Build Coastguard Worker       UWORD32 dec_info_init = atoi(pb_arg_val);
45*15dc779aSAndroid Build Coastguard Worker       meta_info->dec_info_init = dec_info_init;
46*15dc779aSAndroid Build Coastguard Worker     } else if (!strncmp((pCHAR8)cmd, "-g_track_count:", 15)) {
47*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 15);
48*15dc779aSAndroid Build Coastguard Worker       UWORD32 g_track_count = atoi(pb_arg_val);
49*15dc779aSAndroid Build Coastguard Worker       meta_info->g_track_count = g_track_count;
50*15dc779aSAndroid Build Coastguard Worker     }
51*15dc779aSAndroid Build Coastguard Worker 
52*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-movie_time_scale:", 18)) {
53*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 18);
54*15dc779aSAndroid Build Coastguard Worker       UWORD32 movie_time_scale = atoi(pb_arg_val);
55*15dc779aSAndroid Build Coastguard Worker       meta_info->movie_time_scale = movie_time_scale;
56*15dc779aSAndroid Build Coastguard Worker     }
57*15dc779aSAndroid Build Coastguard Worker 
58*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-media_time_scale:", 18)) {
59*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 18);
60*15dc779aSAndroid Build Coastguard Worker       UWORD32 media_time_scale = atoi(pb_arg_val);
61*15dc779aSAndroid Build Coastguard Worker       meta_info->media_time_scale = media_time_scale;
62*15dc779aSAndroid Build Coastguard Worker     }
63*15dc779aSAndroid Build Coastguard Worker 
64*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-ia_mp4_stsz_entries:", 21)) {
65*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 21);
66*15dc779aSAndroid Build Coastguard Worker       UWORD32 ia_mp4_stsz_entries = atoi(pb_arg_val);
67*15dc779aSAndroid Build Coastguard Worker       meta_info->ia_mp4_stsz_entries = ia_mp4_stsz_entries;
68*15dc779aSAndroid Build Coastguard Worker       metadata_mp4_stsz_size_free(meta_info);
69*15dc779aSAndroid Build Coastguard Worker       meta_info->ia_mp4_stsz_size =
70*15dc779aSAndroid Build Coastguard Worker           (UWORD32 *)malloc(sizeof(UWORD32) * ia_mp4_stsz_entries);
71*15dc779aSAndroid Build Coastguard Worker       memset(meta_info->ia_mp4_stsz_size, 0,
72*15dc779aSAndroid Build Coastguard Worker              sizeof(UWORD32) * ia_mp4_stsz_entries);
73*15dc779aSAndroid Build Coastguard Worker     }
74*15dc779aSAndroid Build Coastguard Worker     /*
75*15dc779aSAndroid Build Coastguard Worker     else if {
76*15dc779aSAndroid Build Coastguard Worker       //printf("Wrong file order,Check file order");
77*15dc779aSAndroid Build Coastguard Worker       //return -1;
78*15dc779aSAndroid Build Coastguard Worker     }
79*15dc779aSAndroid Build Coastguard Worker     */
80*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-playTimeInSamples:", 19)) {
81*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 19);
82*15dc779aSAndroid Build Coastguard Worker       UWORD32 playTimeInSamples = atoi(pb_arg_val);
83*15dc779aSAndroid Build Coastguard Worker       meta_info->playTimeInSamples[i] = playTimeInSamples;
84*15dc779aSAndroid Build Coastguard Worker       i++;
85*15dc779aSAndroid Build Coastguard Worker     }
86*15dc779aSAndroid Build Coastguard Worker 
87*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-startOffsetInSamples:", 22)) {
88*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 22);
89*15dc779aSAndroid Build Coastguard Worker       UWORD32 startOffsetInSamples = atoi(pb_arg_val);
90*15dc779aSAndroid Build Coastguard Worker       meta_info->startOffsetInSamples[j] = startOffsetInSamples;
91*15dc779aSAndroid Build Coastguard Worker       j++;
92*15dc779aSAndroid Build Coastguard Worker     }
93*15dc779aSAndroid Build Coastguard Worker 
94*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-useEditlist:", 13)) {
95*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 13);
96*15dc779aSAndroid Build Coastguard Worker       UWORD32 useEditlist = atoi(pb_arg_val);
97*15dc779aSAndroid Build Coastguard Worker       meta_info->useEditlist[k] = useEditlist;
98*15dc779aSAndroid Build Coastguard Worker       k++;
99*15dc779aSAndroid Build Coastguard Worker     }
100*15dc779aSAndroid Build Coastguard Worker 
101*15dc779aSAndroid Build Coastguard Worker     else if (!strncmp((pCHAR8)cmd, "-ia_mp4_stsz_size:", 18)) {
102*15dc779aSAndroid Build Coastguard Worker       pCHAR8 pb_arg_val = (pCHAR8)(cmd + 18);
103*15dc779aSAndroid Build Coastguard Worker       UWORD32 ia_mp4_stsz_size = atoi(pb_arg_val);
104*15dc779aSAndroid Build Coastguard Worker       meta_info->ia_mp4_stsz_size[l] = ia_mp4_stsz_size;
105*15dc779aSAndroid Build Coastguard Worker       l++;
106*15dc779aSAndroid Build Coastguard Worker     }
107*15dc779aSAndroid Build Coastguard Worker 
108*15dc779aSAndroid Build Coastguard Worker     else {
109*15dc779aSAndroid Build Coastguard Worker       printf("Command not found");
110*15dc779aSAndroid Build Coastguard Worker       return -1;
111*15dc779aSAndroid Build Coastguard Worker     }
112*15dc779aSAndroid Build Coastguard Worker   }
113*15dc779aSAndroid Build Coastguard Worker 
114*15dc779aSAndroid Build Coastguard Worker   for (; i < MAX_TRACKS_PER_LAYER; i++) {
115*15dc779aSAndroid Build Coastguard Worker     meta_info->playTimeInSamples[i] = 0;
116*15dc779aSAndroid Build Coastguard Worker   }
117*15dc779aSAndroid Build Coastguard Worker 
118*15dc779aSAndroid Build Coastguard Worker   for (; j < MAX_TRACKS_PER_LAYER; j++) {
119*15dc779aSAndroid Build Coastguard Worker     meta_info->startOffsetInSamples[j] = 0;
120*15dc779aSAndroid Build Coastguard Worker   }
121*15dc779aSAndroid Build Coastguard Worker 
122*15dc779aSAndroid Build Coastguard Worker   for (; k < MAX_TRACKS_PER_LAYER; k++) {
123*15dc779aSAndroid Build Coastguard Worker     meta_info->useEditlist[k] = 0;
124*15dc779aSAndroid Build Coastguard Worker   }
125*15dc779aSAndroid Build Coastguard Worker 
126*15dc779aSAndroid Build Coastguard Worker   return 0;
127*15dc779aSAndroid Build Coastguard Worker }
128*15dc779aSAndroid Build Coastguard Worker 
get_metadata_dec_info_init(metadata_info meta_info)129*15dc779aSAndroid Build Coastguard Worker int get_metadata_dec_info_init(metadata_info meta_info) {
130*15dc779aSAndroid Build Coastguard Worker   return meta_info.dec_info_init;
131*15dc779aSAndroid Build Coastguard Worker }
132*15dc779aSAndroid Build Coastguard Worker 
get_metadata_dec_exec(metadata_info meta_info,int frame)133*15dc779aSAndroid Build Coastguard Worker WORD32 get_metadata_dec_exec(metadata_info meta_info, int frame) {
134*15dc779aSAndroid Build Coastguard Worker   if (frame < (int)meta_info.ia_mp4_stsz_entries) {
135*15dc779aSAndroid Build Coastguard Worker     return meta_info.ia_mp4_stsz_size[frame];
136*15dc779aSAndroid Build Coastguard Worker   } else {
137*15dc779aSAndroid Build Coastguard Worker     return 0;
138*15dc779aSAndroid Build Coastguard Worker   }
139*15dc779aSAndroid Build Coastguard Worker }
140*15dc779aSAndroid Build Coastguard Worker 
get_movie_time_scale(metadata_info meta_info)141*15dc779aSAndroid Build Coastguard Worker int get_movie_time_scale(metadata_info meta_info) {
142*15dc779aSAndroid Build Coastguard Worker   return meta_info.movie_time_scale;
143*15dc779aSAndroid Build Coastguard Worker }
144*15dc779aSAndroid Build Coastguard Worker 
get_media_time_scale(metadata_info meta_info)145*15dc779aSAndroid Build Coastguard Worker int get_media_time_scale(metadata_info meta_info) {
146*15dc779aSAndroid Build Coastguard Worker   return meta_info.media_time_scale;
147*15dc779aSAndroid Build Coastguard Worker }
148*15dc779aSAndroid Build Coastguard Worker 
get_g_track_count(metadata_info meta_info)149*15dc779aSAndroid Build Coastguard Worker int get_g_track_count(metadata_info meta_info) {
150*15dc779aSAndroid Build Coastguard Worker   return meta_info.g_track_count;
151*15dc779aSAndroid Build Coastguard Worker }
152*15dc779aSAndroid Build Coastguard Worker 
get_use_edit_list(metadata_info meta_info)153*15dc779aSAndroid Build Coastguard Worker int get_use_edit_list(metadata_info meta_info) {
154*15dc779aSAndroid Build Coastguard Worker   return meta_info.useEditlist[0];
155*15dc779aSAndroid Build Coastguard Worker }
156*15dc779aSAndroid Build Coastguard Worker 
get_start_offset_in_samples(metadata_info meta_info)157*15dc779aSAndroid Build Coastguard Worker int get_start_offset_in_samples(metadata_info meta_info) {
158*15dc779aSAndroid Build Coastguard Worker   return (meta_info.startOffsetInSamples[0] + 2048);
159*15dc779aSAndroid Build Coastguard Worker }
160*15dc779aSAndroid Build Coastguard Worker 
get_play_time_in_samples(metadata_info meta_info)161*15dc779aSAndroid Build Coastguard Worker int get_play_time_in_samples(metadata_info meta_info) {
162*15dc779aSAndroid Build Coastguard Worker   return meta_info.playTimeInSamples[0];
163*15dc779aSAndroid Build Coastguard Worker }
164*15dc779aSAndroid Build Coastguard Worker /*
165*15dc779aSAndroid Build Coastguard Worker void update_start_offset_in_samples(metadata_info meta_info, int update)
166*15dc779aSAndroid Build Coastguard Worker {
167*15dc779aSAndroid Build Coastguard Worker 
168*15dc779aSAndroid Build Coastguard Worker         meta_info.startOffsetInSamples[0]=update;
169*15dc779aSAndroid Build Coastguard Worker }
170*15dc779aSAndroid Build Coastguard Worker */
171*15dc779aSAndroid Build Coastguard Worker 
172*15dc779aSAndroid Build Coastguard Worker /*
173*15dc779aSAndroid Build Coastguard Worker void update_play_time_in_samples(metadata_info meta_info, int update)
174*15dc779aSAndroid Build Coastguard Worker {
175*15dc779aSAndroid Build Coastguard Worker 
176*15dc779aSAndroid Build Coastguard Worker         meta_info.playTimeInSamples[0]=update;
177*15dc779aSAndroid Build Coastguard Worker 
178*15dc779aSAndroid Build Coastguard Worker }
179*15dc779aSAndroid Build Coastguard Worker */
180