1538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber/* 2538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * Copyright © 2010 Mozilla Foundation 3538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * 4538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * This program is made available under an ISC-style license. See the 5538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber * accompanying file LICENSE for details. 6538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber */ 7538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include <assert.h> 8538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include <stdarg.h> 9538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include <stdio.h> 10538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include <stdlib.h> 11538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include <stdint.h> 12538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#include "nestegg/nestegg.h" 13538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 14538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#undef DEBUG 15538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#define SEEK_TEST 16538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 17538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstatic int 18538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstdio_read(void * p, size_t length, void * fp) 19538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 20538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber size_t r; 21538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 22538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = fread(p, length, 1, fp); 23538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 0 && feof(fp)) 24538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return 0; 25538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return r == 0 ? -1 : 1; 26538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 27538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 28538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstatic int 29538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstdio_seek(int64_t offset, int whence, void * fp) 30538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 31538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return fseek(fp, offset, whence); 32538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 33538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 34538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstatic int64_t 35538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstdio_tell(void * fp) 36538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 37538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return ftell(fp); 38538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 39538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 40538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberstatic void 41538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberlog_callback(nestegg * ctx, unsigned int severity, char const * fmt, ...) 42538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 43538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber va_list ap; 44538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber char const * sev = NULL; 45538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 46538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifndef DEBUG 47538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (severity < NESTEGG_LOG_WARNING) 48538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return; 49538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 50538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 51538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber switch (severity) { 52538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber case NESTEGG_LOG_DEBUG: 53538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber sev = "debug: "; 54538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber break; 55538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber case NESTEGG_LOG_WARNING: 56538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber sev = "warning: "; 57538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber break; 58538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber case NESTEGG_LOG_CRITICAL: 59538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber sev = "critical:"; 60538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber break; 61538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber default: 62538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber sev = "unknown: "; 63538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 64538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 65538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "%p %s ", (void *) ctx, sev); 66538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 67538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber va_start(ap, fmt); 68538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vfprintf(stderr, fmt, ap); 69538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber va_end(ap); 70538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 71538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "\n"); 72538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 73538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 74538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huberint 75538f6170b788de7408b06efc6613dc98579aa6a6Andreas Hubermain(int argc, char * argv[]) 76538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber{ 77538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber FILE * fp; 78538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber int r, type; 79538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg * ctx; 80538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_audio_params aparams; 81538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet * pkt; 82538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_video_params vparams; 83538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber size_t length, size; 84538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber uint64_t duration, tstamp, pkt_tstamp; 85538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned char * codec_data, * ptr; 86538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int cnt, i, j, track, tracks, pkt_cnt, pkt_track; 87538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber unsigned int data_items = 0; 88538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_io io = { 89538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber stdio_read, 90538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber stdio_seek, 91538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber stdio_tell, 92538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber NULL 93538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber }; 94538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 95538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (argc != 2) 96538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return EXIT_FAILURE; 97538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 98538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fp = fopen(argv[1], "rb"); 99538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (!fp) 100538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return EXIT_FAILURE; 101538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 102538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber io.userdata = fp; 103538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 104538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber ctx = NULL; 105538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_init(&ctx, io, log_callback); 106538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r != 0) 107538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return EXIT_FAILURE; 108538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 109538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_track_count(ctx, &tracks); 110538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_duration(ctx, &duration); 111538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 112538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "media has %u tracks and duration %fs\n", tracks, duration / 1e9); 113538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 114538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 115538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber for (i = 0; i < tracks; ++i) { 116538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber type = nestegg_track_type(ctx, i); 117538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 118538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "track %u: type: %d codec: %d", i, 119538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber type, nestegg_track_codec_id(ctx, i)); 120538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 121538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_track_codec_data_count(ctx, i, &data_items); 122538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber for (j = 0; j < data_items; ++j) { 123538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_track_codec_data(ctx, i, j, &codec_data, &length); 124538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 125538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, " (%p, %u)", codec_data, (unsigned int) length); 126538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 127538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 128538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (type == NESTEGG_TRACK_VIDEO) { 129538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_track_video_params(ctx, i, &vparams); 130538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 131538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, " video: %ux%u (d: %ux%u %ux%ux%ux%u)", 132538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vparams.width, vparams.height, 133538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vparams.display_width, vparams.display_height, 134538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber vparams.crop_top, vparams.crop_left, vparams.crop_bottom, vparams.crop_right); 135538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 136538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } else if (type == NESTEGG_TRACK_AUDIO) { 137538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_track_audio_params(ctx, i, &aparams); 138538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 139538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, " audio: %.2fhz %u bit %u channels", 140538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber aparams.rate, aparams.depth, aparams.channels); 141538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 142538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 143538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 144538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "\n"); 145538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 146538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 147538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 148538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef SEEK_TEST 149538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 150538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "seek to middle\n"); 151538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 152538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_track_seek(ctx, 0, duration / 2); 153538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 0) { 154538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 155538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "middle "); 156538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 157538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_read_packet(ctx, &pkt); 158538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 1) { 159538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_track(pkt, &track); 160538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_count(pkt, &cnt); 161538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_tstamp(pkt, &tstamp); 162538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 163538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt); 164538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 165538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_free_packet(pkt); 166538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } else { 167538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 168538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "middle seek failed\n"); 169538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 170538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 171538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 172538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 173538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 174538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "seek to ~end\n"); 175538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 176538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_track_seek(ctx, 0, duration - (duration / 10)); 177538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 0) { 178538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 179538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "end "); 180538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 181538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_read_packet(ctx, &pkt); 182538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 1) { 183538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_track(pkt, &track); 184538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_count(pkt, &cnt); 185538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_tstamp(pkt, &tstamp); 186538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 187538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt); 188538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 189538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_free_packet(pkt); 190538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } else { 191538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 192538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "end seek failed\n"); 193538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 194538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 195538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 196538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 197538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 198538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "seek to ~start\n"); 199538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 200538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_track_seek(ctx, 0, duration / 10); 201538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 0) { 202538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 203538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "start "); 204538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 205538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber r = nestegg_read_packet(ctx, &pkt); 206538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber if (r == 1) { 207538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_track(pkt, &track); 208538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_count(pkt, &cnt); 209538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_tstamp(pkt, &tstamp); 210538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 211538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "* t %u pts %f frames %u\n", track, tstamp / 1e9, cnt); 212538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 213538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_free_packet(pkt); 214538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } else { 215538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 216538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "start seek failed\n"); 217538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 218538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 219538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 220538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 221538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 222538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber while (nestegg_read_packet(ctx, &pkt) > 0) { 223538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_track(pkt, &pkt_track); 224538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_count(pkt, &pkt_cnt); 225538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_tstamp(pkt, &pkt_tstamp); 226538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 227538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 228538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "t %u pts %f frames %u: ", pkt_track, pkt_tstamp / 1e9, pkt_cnt); 229538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 230538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 231538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber for (i = 0; i < pkt_cnt; ++i) { 232538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_packet_data(pkt, i, &ptr, &size); 233538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 234538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "%u ", (unsigned int) size); 235538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 236538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 237538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#ifdef DEBUG 238538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fprintf(stderr, "\n"); 239538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber#endif 240538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 241538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_free_packet(pkt); 242538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber } 243538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 244538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber nestegg_destroy(ctx); 245538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber fclose(fp); 246538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber 247538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber return EXIT_SUCCESS; 248538f6170b788de7408b06efc6613dc98579aa6a6Andreas Huber} 249