annotate src/http/modules/ngx_http_mp4_module.c @ 4248:2fad4d19ea4b stable-1.0

Merging r4151, r4152, r4177: HTTP cache related fixes: *) Cache: fix for sending of empty responses. Revert wrong fix for empty responses introduced in 0.8.31 and apply new one, rewritten to match things done by static module as close as possible. *) Cache: fix for sending of stale responses. For normal cached responses ngx_http_cache_send() sends last buffer and then request finalized via ngx_http_finalize_request() call, i.e. everything is ok. But for stale responses (i.e. when upstream died, but we have something in cache) the same ngx_http_cache_send() sends last buffer, but then in ngx_http_upstream_finalize_request() another last buffer is send. This causes duplicate final chunk to appear if chunked encoding is used (and resulting problems with keepalive connections and so on). Fix this by not sending in ngx_http_upstream_finalize_request() another last buffer if we know response was from cache. *) Fixed cache bypass caching of non-cacheable replies (ticket #21). If cache was bypassed with proxy_cache_bypass, cache-controlling headers (Cache-Control, Expires) wasn't considered and response was cached even if it was actually non-cacheable. Patch by John Ferlito.
author Igor Sysoev <igor@sysoev.ru>
date Tue, 01 Nov 2011 13:49:31 +0000
parents aaa936b2cab5
children cc7ea429170d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6 #include <ngx_config.h>
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 #include <ngx_core.h>
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_http.h>
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #define NGX_HTTP_MP4_TRAK_ATOM 0
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #define NGX_HTTP_MP4_TKHD_ATOM 1
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #define NGX_HTTP_MP4_MDIA_ATOM 2
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 #define NGX_HTTP_MP4_MDHD_ATOM 3
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 #define NGX_HTTP_MP4_HDLR_ATOM 4
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 #define NGX_HTTP_MP4_MINF_ATOM 5
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #define NGX_HTTP_MP4_VMHD_ATOM 6
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #define NGX_HTTP_MP4_SMHD_ATOM 7
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 #define NGX_HTTP_MP4_DINF_ATOM 8
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 #define NGX_HTTP_MP4_STBL_ATOM 9
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 #define NGX_HTTP_MP4_STSD_ATOM 10
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 #define NGX_HTTP_MP4_STTS_ATOM 11
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 #define NGX_HTTP_MP4_STTS_DATA 12
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 #define NGX_HTTP_MP4_STSS_ATOM 13
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 #define NGX_HTTP_MP4_STSS_DATA 14
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 #define NGX_HTTP_MP4_CTTS_ATOM 15
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 #define NGX_HTTP_MP4_CTTS_DATA 16
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 #define NGX_HTTP_MP4_STSC_ATOM 17
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 #define NGX_HTTP_MP4_STSC_CHUNK 18
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 #define NGX_HTTP_MP4_STSC_DATA 19
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 #define NGX_HTTP_MP4_STSZ_ATOM 20
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 #define NGX_HTTP_MP4_STSZ_DATA 21
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 #define NGX_HTTP_MP4_STCO_ATOM 22
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 #define NGX_HTTP_MP4_STCO_DATA 23
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 #define NGX_HTTP_MP4_CO64_ATOM 24
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 #define NGX_HTTP_MP4_CO64_DATA 25
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 #define NGX_HTTP_MP4_LAST_ATOM NGX_HTTP_MP4_CO64_DATA
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 size_t buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 size_t max_buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 } ngx_http_mp4_conf_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 u_char chunk[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 u_char samples[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 u_char id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 } ngx_mp4_stsc_entry_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 uint32_t time_to_sample_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 uint32_t sample_to_chunk_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 uint32_t sync_samples_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 uint32_t composition_offset_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 uint32_t sample_sizes_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 uint32_t chunks;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 ngx_uint_t start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64 ngx_uint_t start_chunk;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 ngx_uint_t chunk_samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 uint64_t chunk_samples_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 off_t start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 size_t tkhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70 size_t mdhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 size_t hdlr_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 size_t vmhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 size_t smhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 size_t dinf_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 size_t size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 ngx_chain_t out[NGX_HTTP_MP4_LAST_ATOM + 1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 ngx_buf_t trak_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 ngx_buf_t tkhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 ngx_buf_t mdia_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82 ngx_buf_t mdhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_buf_t hdlr_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84 ngx_buf_t minf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 ngx_buf_t vmhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 ngx_buf_t smhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87 ngx_buf_t dinf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 ngx_buf_t stbl_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 ngx_buf_t stsd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90 ngx_buf_t stts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_buf_t stts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 ngx_buf_t stss_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93 ngx_buf_t stss_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_buf_t ctts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_buf_t ctts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96 ngx_buf_t stsc_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 ngx_buf_t stsc_chunk_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 ngx_buf_t stsc_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99 ngx_buf_t stsz_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 ngx_buf_t stsz_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 ngx_buf_t stco_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 ngx_buf_t stco_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103 ngx_buf_t co64_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 ngx_buf_t co64_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106 ngx_mp4_stsc_entry_t stsc_chunk_entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 } ngx_http_mp4_trak_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 ngx_file_t file;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 u_char *buffer;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 u_char *buffer_start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 u_char *buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 u_char *buffer_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 size_t buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119 off_t offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 off_t end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 off_t content_length;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 ngx_uint_t start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 ngx_http_request_t *request;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125 ngx_array_t trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 ngx_http_mp4_trak_t traks[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 size_t ftyp_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129 size_t moov_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 ngx_chain_t *out;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 ngx_chain_t ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 ngx_chain_t moov_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 ngx_chain_t mvhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
135 ngx_chain_t mdat_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 ngx_chain_t mdat_data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 ngx_buf_t ftyp_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139 ngx_buf_t moov_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 ngx_buf_t mvhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 ngx_buf_t mdat_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 ngx_buf_t mdat_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 u_char moov_atom_header[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 u_char mdat_atom_header[16];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146 } ngx_http_mp4_file_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
148
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 char *name;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
151 ngx_int_t (*handler)(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153 } ngx_http_mp4_atom_handler_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
154
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156 #define ngx_mp4_atom_header(mp4) (mp4->buffer_pos - 8)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
157 #define ngx_mp4_atom_data(mp4) mp4->buffer_pos
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
158 #define ngx_mp4_atom_next(mp4, n) mp4->buffer_pos += n; mp4->offset += n
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
159
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
160
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 #define ngx_mp4_set_atom_name(p, n1, n2, n3, n4) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 ((u_char *) (p))[4] = n1; \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163 ((u_char *) (p))[5] = n2; \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
164 ((u_char *) (p))[6] = n3; \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
165 ((u_char *) (p))[7] = n4
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
166
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 #define ngx_mp4_get_32value(p) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 ( (((u_char *) (p))[0] << 24) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169 + (((u_char *) (p))[1] << 16) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 + (((u_char *) (p))[2] << 8) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
171 + (((u_char *) (p))[3]) )
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173 #define ngx_mp4_set_32value(p, n) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174 ((u_char *) (p))[0] = (u_char) ((n) >> 24); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
175 ((u_char *) (p))[1] = (u_char) ((n) >> 16); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 ((u_char *) (p))[2] = (u_char) ((n) >> 8); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177 ((u_char *) (p))[3] = (u_char) (n)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
178
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
179 #define ngx_mp4_get_64value(p) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
180 ( ((uint64_t) ((u_char *) (p))[0] << 56) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
181 + ((uint64_t) ((u_char *) (p))[1] << 48) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
182 + ((uint64_t) ((u_char *) (p))[2] << 40) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
183 + ((uint64_t) ((u_char *) (p))[3] << 32) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
184 + ((uint64_t) ((u_char *) (p))[4] << 24) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
185 + ( ((u_char *) (p))[5] << 16) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 + ( ((u_char *) (p))[6] << 8) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
187 + ( ((u_char *) (p))[7]) )
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 #define ngx_mp4_set_64value(p, n) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190 ((u_char *) (p))[0] = (u_char) ((uint64_t) (n) >> 56); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 ((u_char *) (p))[1] = (u_char) ((uint64_t) (n) >> 48); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
192 ((u_char *) (p))[2] = (u_char) ((uint64_t) (n) >> 40); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193 ((u_char *) (p))[3] = (u_char) ((uint64_t) (n) >> 32); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194 ((u_char *) (p))[4] = (u_char) ( (n) >> 24); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195 ((u_char *) (p))[5] = (u_char) ( (n) >> 16); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 ((u_char *) (p))[6] = (u_char) ( (n) >> 8); \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 ((u_char *) (p))[7] = (u_char) (n)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
198
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199 #define ngx_mp4_last_trak(mp4) \
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
200 &((ngx_http_mp4_trak_t *) mp4->trak.elts)[mp4->trak.nelts - 1]
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
201
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
202
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 static ngx_int_t ngx_http_mp4_process(ngx_http_mp4_file_t *mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 static ngx_int_t ngx_http_mp4_read_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
205 ngx_http_mp4_atom_handler_t *atom, uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206 static ngx_int_t ngx_http_mp4_read(ngx_http_mp4_file_t *mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
207 static ngx_int_t ngx_http_mp4_read_ftyp_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
209 static ngx_int_t ngx_http_mp4_read_moov_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
210 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 static ngx_int_t ngx_http_mp4_read_mdat_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
213 static size_t ngx_http_mp4_update_mdat_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
214 off_t start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
215 static ngx_int_t ngx_http_mp4_read_mvhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
216 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 static ngx_int_t ngx_http_mp4_read_trak_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 static void ngx_http_mp4_update_trak_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
221 static ngx_int_t ngx_http_mp4_read_cmov_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
222 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
223 static ngx_int_t ngx_http_mp4_read_tkhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
224 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 static ngx_int_t ngx_http_mp4_read_mdia_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227 static void ngx_http_mp4_update_mdia_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
229 static ngx_int_t ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
230 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 static ngx_int_t ngx_http_mp4_read_hdlr_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 static ngx_int_t ngx_http_mp4_read_minf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 static void ngx_http_mp4_update_minf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237 static ngx_int_t ngx_http_mp4_read_dinf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239 static ngx_int_t ngx_http_mp4_read_vmhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
241 static ngx_int_t ngx_http_mp4_read_smhd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
242 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
243 static ngx_int_t ngx_http_mp4_read_stbl_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
244 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
245 static void ngx_http_mp4_update_stbl_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
246 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
247 static ngx_int_t ngx_http_mp4_read_stsd_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
248 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
249 static ngx_int_t ngx_http_mp4_read_stts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
250 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
251 static ngx_int_t ngx_http_mp4_update_stts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
252 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
253 static ngx_int_t ngx_http_mp4_read_stss_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
254 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
255 static ngx_int_t ngx_http_mp4_update_stss_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
256 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
257 static ngx_int_t ngx_http_mp4_read_ctts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
258 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
259 static void ngx_http_mp4_update_ctts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
260 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
261 static ngx_int_t ngx_http_mp4_read_stsc_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
262 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
263 static ngx_int_t ngx_http_mp4_update_stsc_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
264 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
265 static ngx_int_t ngx_http_mp4_read_stsz_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
266 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
267 static void ngx_http_mp4_update_stsz_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
268 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
269 static ngx_int_t ngx_http_mp4_read_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
270 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
271 static ngx_int_t ngx_http_mp4_update_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
272 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
273 static void ngx_http_mp4_adjust_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
274 ngx_http_mp4_trak_t *trak, int32_t adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
275 static ngx_int_t ngx_http_mp4_read_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
276 uint64_t atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
277 static ngx_int_t ngx_http_mp4_update_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
278 ngx_http_mp4_trak_t *trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
279 static void ngx_http_mp4_adjust_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
280 ngx_http_mp4_trak_t *trak, off_t adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
281 static char *ngx_http_mp4(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
282 static void *ngx_http_mp4_create_conf(ngx_conf_t *cf);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
283 static char *ngx_http_mp4_merge_conf(ngx_conf_t *cf, void *parent, void *child);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
284
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
285 static ngx_command_t ngx_http_mp4_commands[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
286
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
287 { ngx_string("mp4"),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
288 NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
289 ngx_http_mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
290 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
291 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
292 NULL },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
293
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
294 { ngx_string("mp4_buffer_size"),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
295 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
296 ngx_conf_set_size_slot,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
297 NGX_HTTP_LOC_CONF_OFFSET,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
298 offsetof(ngx_http_mp4_conf_t, buffer_size),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
299 NULL },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
300
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
301 { ngx_string("mp4_max_buffer_size"),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
302 NGX_HTTP_MAIN_CONF|NGX_HTTP_SRV_CONF|NGX_HTTP_LOC_CONF|NGX_CONF_TAKE1,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
303 ngx_conf_set_size_slot,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
304 NGX_HTTP_LOC_CONF_OFFSET,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
305 offsetof(ngx_http_mp4_conf_t, max_buffer_size),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
306 NULL },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
307
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
308 ngx_null_command
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
309 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
310
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
311
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
312 static ngx_http_module_t ngx_http_mp4_module_ctx = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
313 NULL, /* preconfiguration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
314 NULL, /* postconfiguration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
315
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
316 NULL, /* create main configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
317 NULL, /* init main configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
318
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
319 NULL, /* create server configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
320 NULL, /* merge server configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
321
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
322 ngx_http_mp4_create_conf, /* create location configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
323 ngx_http_mp4_merge_conf /* merge location configuration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
324 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
325
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
326
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
327 ngx_module_t ngx_http_mp4_module = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
328 NGX_MODULE_V1,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
329 &ngx_http_mp4_module_ctx, /* module context */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
330 ngx_http_mp4_commands, /* module directives */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
331 NGX_HTTP_MODULE, /* module type */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
332 NULL, /* init master */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
333 NULL, /* init module */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
334 NULL, /* init process */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
335 NULL, /* init thread */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
336 NULL, /* exit thread */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
337 NULL, /* exit process */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
338 NULL, /* exit master */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
339 NGX_MODULE_V1_PADDING
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
340 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
341
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
342
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
343 static ngx_http_mp4_atom_handler_t ngx_http_mp4_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
344 { "ftyp", ngx_http_mp4_read_ftyp_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
345 { "moov", ngx_http_mp4_read_moov_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
346 { "mdat", ngx_http_mp4_read_mdat_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
347 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
348 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
349
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
350 static ngx_http_mp4_atom_handler_t ngx_http_mp4_moov_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
351 { "mvhd", ngx_http_mp4_read_mvhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
352 { "trak", ngx_http_mp4_read_trak_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
353 { "cmov", ngx_http_mp4_read_cmov_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
354 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
355 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
356
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
357 static ngx_http_mp4_atom_handler_t ngx_http_mp4_trak_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
358 { "tkhd", ngx_http_mp4_read_tkhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
359 { "mdia", ngx_http_mp4_read_mdia_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
360 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
361 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
362
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
363 static ngx_http_mp4_atom_handler_t ngx_http_mp4_mdia_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
364 { "mdhd", ngx_http_mp4_read_mdhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
365 { "hdlr", ngx_http_mp4_read_hdlr_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
366 { "minf", ngx_http_mp4_read_minf_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
367 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
368 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
369
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
370 static ngx_http_mp4_atom_handler_t ngx_http_mp4_minf_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
371 { "vmhd", ngx_http_mp4_read_vmhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
372 { "smhd", ngx_http_mp4_read_smhd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
373 { "dinf", ngx_http_mp4_read_dinf_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
374 { "stbl", ngx_http_mp4_read_stbl_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
375 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
376 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
377
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
378 static ngx_http_mp4_atom_handler_t ngx_http_mp4_stbl_atoms[] = {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
379 { "stsd", ngx_http_mp4_read_stsd_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
380 { "stts", ngx_http_mp4_read_stts_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
381 { "stss", ngx_http_mp4_read_stss_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
382 { "ctts", ngx_http_mp4_read_ctts_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
383 { "stsc", ngx_http_mp4_read_stsc_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
384 { "stsz", ngx_http_mp4_read_stsz_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
385 { "stco", ngx_http_mp4_read_stco_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
386 { "co64", ngx_http_mp4_read_co64_atom },
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
387 { NULL, NULL }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
388 };
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
389
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
390
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
391 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
392 ngx_http_mp4_handler(ngx_http_request_t *r)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
393 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
394 u_char *last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
395 size_t root;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
396 ngx_int_t rc, start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
397 ngx_uint_t level;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
398 ngx_str_t path, value;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
399 ngx_log_t *log;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
400 ngx_buf_t *b;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401 ngx_chain_t out;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
402 ngx_http_mp4_file_t *mp4;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
403 ngx_open_file_info_t of;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
404 ngx_http_core_loc_conf_t *clcf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
405
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
406 if (!(r->method & (NGX_HTTP_GET|NGX_HTTP_HEAD))) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
407 return NGX_HTTP_NOT_ALLOWED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
408 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
409
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
410 if (r->uri.data[r->uri.len - 1] == '/') {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
411 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
412 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
413
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
414 rc = ngx_http_discard_request_body(r);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
415
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
416 if (rc != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
417 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
418 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
419
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
420 last = ngx_http_map_uri_to_path(r, &path, &root, 0);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
421 if (last == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
422 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
423 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
424
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
425 log = r->connection->log;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
426
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
427 path.len = last - path.data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
428
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
429 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
430 "http mp4 filename: \"%V\"", &path);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
431
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
432 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
433
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
434 ngx_memzero(&of, sizeof(ngx_open_file_info_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
435
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
436 of.read_ahead = clcf->read_ahead;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
437 of.directio = NGX_MAX_OFF_T_VALUE;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
438 of.valid = clcf->open_file_cache_valid;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
439 of.min_uses = clcf->open_file_cache_min_uses;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
440 of.errors = clcf->open_file_cache_errors;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
441 of.events = clcf->open_file_cache_events;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
442
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
443 if (ngx_open_cached_file(clcf->open_file_cache, &path, &of, r->pool)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
444 != NGX_OK)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
445 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
446 switch (of.err) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
447
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
448 case 0:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
449 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
450
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
451 case NGX_ENOENT:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
452 case NGX_ENOTDIR:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
453 case NGX_ENAMETOOLONG:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
454
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
455 level = NGX_LOG_ERR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
456 rc = NGX_HTTP_NOT_FOUND;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
457 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
458
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
459 case NGX_EACCES:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
460
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
461 level = NGX_LOG_ERR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
462 rc = NGX_HTTP_FORBIDDEN;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
463 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
464
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
465 default:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
466
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
467 level = NGX_LOG_CRIT;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
468 rc = NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
469 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
470 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
471
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
472 if (rc != NGX_HTTP_NOT_FOUND || clcf->log_not_found) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
473 ngx_log_error(level, log, of.err,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
474 "%s \"%s\" failed", of.failed, path.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
475 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
476
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
477 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
478 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
479
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
480 if (!of.is_file) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
481
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
482 if (ngx_close_file(of.fd) == NGX_FILE_ERROR) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
483 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
484 ngx_close_file_n " \"%s\" failed", path.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
485 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
486
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
487 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
488 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
489
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
490 r->root_tested = !r->error_page;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
491 r->allow_ranges = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
492
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
493 start = -1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
494 r->headers_out.content_length_n = of.size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
495 mp4 = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
496 b = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
497
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
498 if (r->args.len) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
499
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
500 if (ngx_http_arg(r, (u_char *) "start", 5, &value) == NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
501
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
502 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
503 * A Flash player may send start value with a lot of digits
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
504 * after dot so strtod() is used instead of atofp(). NaNs and
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
505 * infinities become negative numbers after (int) conversion.
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
506 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
507
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
508 ngx_set_errno(0);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
509 start = (int) (strtod((char *) value.data, NULL) * 1000);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
510
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
511 if (ngx_errno == 0 && start >= 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
512 r->allow_ranges = 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
513
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
514 mp4 = ngx_pcalloc(r->pool, sizeof(ngx_http_mp4_file_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
515 if (mp4 == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
516 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
517 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
518
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
519 mp4->file.fd = of.fd;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
520 mp4->file.name = path;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
521 mp4->file.log = r->connection->log;;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
522 mp4->end = of.size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
523 mp4->start = (ngx_uint_t) start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
524 mp4->request = r;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
525
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
526 switch (ngx_http_mp4_process(mp4)) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
527
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
528 case NGX_DECLINED:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
529 if (mp4->buffer) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
530 ngx_pfree(r->pool, mp4->buffer);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
531 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
532
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
533 ngx_pfree(r->pool, mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
534 mp4 = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
535
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
536 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
537
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
538 case NGX_OK:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
539 r->headers_out.content_length_n = mp4->content_length;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
540 break;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
541
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
542 default: /* NGX_ERROR */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
543 if (mp4->buffer) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
544 ngx_pfree(r->pool, mp4->buffer);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
545 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
546
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
547 ngx_pfree(r->pool, mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
548
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
549 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
550 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
551 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
552 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
553 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
554
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
555 log->action = "sending mp4 to client";
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
556
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
557 if (clcf->directio <= of.size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
558
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
559 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
560 * DIRECTIO is set on transfer only
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
561 * to allow kernel to cache "moov" atom
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
562 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
563
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
564 if (ngx_directio_on(of.fd) == NGX_FILE_ERROR) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
565 ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
566 ngx_directio_on_n " \"%s\" failed", path.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
567 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
568
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
569 of.is_directio = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
570
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
571 if (mp4) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
572 mp4->file.directio = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
573 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
574 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
575
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
576 r->headers_out.status = NGX_HTTP_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
577 r->headers_out.last_modified_time = of.mtime;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
578
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
579 if (ngx_http_set_content_type(r) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
580 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
581 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
582
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
583 if (mp4 == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
584 b = ngx_pcalloc(r->pool, sizeof(ngx_buf_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
585 if (b == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
586 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
587 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
588
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
589 b->file = ngx_pcalloc(r->pool, sizeof(ngx_file_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
590 if (b->file == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
591 return NGX_HTTP_INTERNAL_SERVER_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
593 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
594
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
595 rc = ngx_http_send_header(r);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
596
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
597 if (rc == NGX_ERROR || rc > NGX_OK || r->header_only) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
598 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
599 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
600
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
601 if (mp4) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
602 return ngx_http_output_filter(r, mp4->out);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
603 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
604
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
605 b->file_pos = 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
606 b->file_last = of.size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
607
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
608 b->in_file = b->file_last ? 1 : 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
609 b->last_buf = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
610 b->last_in_chain = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
611
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
612 b->file->fd = of.fd;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
613 b->file->name = path;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
614 b->file->log = log;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
615 b->file->directio = of.is_directio;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
616
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
617 out.buf = b;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
618 out.next = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
619
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
620 return ngx_http_output_filter(r, &out);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
621 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
622
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
623
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
624 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
625 ngx_http_mp4_process(ngx_http_mp4_file_t *mp4)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
626 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
627 off_t start_offset, adjustment;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
628 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
629 ngx_uint_t i, j;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
630 ngx_chain_t **prev;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
632 ngx_http_mp4_conf_t *conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
633
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
634 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
635 "mp4 start:%ui", mp4->start);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
636
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
637 conf = ngx_http_get_module_loc_conf(mp4->request, ngx_http_mp4_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
638
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
639 mp4->buffer_size = conf->buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
640
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
641 rc = ngx_http_mp4_read_atom(mp4, ngx_http_mp4_atoms, mp4->end);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
642 if (rc != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
643 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
644 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
645
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
646 if (mp4->trak.nelts == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
647 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
648 "no mp4 trak atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
649 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
650 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
651 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
652
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
653 if (mp4->mdat_atom.buf == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
654 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
655 "no mp4 mdat atom was found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
656 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
657 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
658 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
659
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
660 prev = &mp4->out;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
661
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
662 if (mp4->ftyp_atom.buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
663 *prev = &mp4->ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
664 prev = &mp4->ftyp_atom.next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
665 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
666
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
667 *prev = &mp4->moov_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
668 prev = &mp4->moov_atom.next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
669
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
670 if (mp4->mvhd_atom.buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
671 mp4->moov_size += mp4->mvhd_atom_buf.last - mp4->mvhd_atom_buf.pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
672 *prev = &mp4->mvhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
673 prev = &mp4->mvhd_atom.next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
674 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
675
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
676 start_offset = mp4->end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
677 trak = mp4->trak.elts;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
678
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
679 for (i = 0; i < mp4->trak.nelts; i++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
680
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
681 if (ngx_http_mp4_update_stts_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
682 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
683 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
684
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
685 if (ngx_http_mp4_update_stss_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
686 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
687 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
688
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
689 ngx_http_mp4_update_ctts_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
690
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
691 if (ngx_http_mp4_update_stsc_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
692 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
693 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
694
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
695 ngx_http_mp4_update_stsz_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
696
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
697 if (trak[i].out[NGX_HTTP_MP4_CO64_DATA].buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
698 if (ngx_http_mp4_update_co64_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
699 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
700 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
701
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
702 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
703 if (ngx_http_mp4_update_stco_atom(mp4, &trak[i]) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
704 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
705 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
706 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
707
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
708 ngx_http_mp4_update_stbl_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
709 ngx_http_mp4_update_minf_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
710 trak[i].size += trak[i].mdhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
711 trak[i].size += trak[i].hdlr_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
712 ngx_http_mp4_update_mdia_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
713 trak[i].size += trak[i].tkhd_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
714 ngx_http_mp4_update_trak_atom(mp4, &trak[i]);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
715
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
716 mp4->moov_size += trak[i].size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
717
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
718 if (start_offset > trak[i].start_offset) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
719 start_offset = trak[i].start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
720 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
721
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
722 *prev = &trak[i].out[NGX_HTTP_MP4_TRAK_ATOM];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
723 prev = &trak[i].out[NGX_HTTP_MP4_TRAK_ATOM].next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
724
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
725 for (j = 0; j < NGX_HTTP_MP4_LAST_ATOM + 1; j++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
726 if (trak[i].out[j].buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
727 *prev = &trak[i].out[j];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
728 prev = &trak[i].out[j].next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
729 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
730 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
731 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
732
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
733 mp4->moov_size += 8;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
734
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
735 ngx_mp4_set_32value(mp4->moov_atom_header, mp4->moov_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
736 ngx_mp4_set_atom_name(mp4->moov_atom_header, 'm', 'o', 'o', 'v');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
737 mp4->content_length += mp4->moov_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
738
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
739 *prev = &mp4->mdat_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
740
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
741 adjustment = mp4->ftyp_size + mp4->moov_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
742 + ngx_http_mp4_update_mdat_atom(mp4, start_offset)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
743 - start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
744
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
745 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
746 "mp4 adjustment:%D", adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
747
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
748 for (i = 0; i < mp4->trak.nelts; i++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
749 if (trak[i].out[NGX_HTTP_MP4_CO64_DATA].buf) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
750 ngx_http_mp4_adjust_co64_atom(mp4, &trak[i], adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
751 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
752 ngx_http_mp4_adjust_stco_atom(mp4, &trak[i], (int32_t) adjustment);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
753 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
754 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
755
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
756 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
757 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
758
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
759
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
760 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
761 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
762 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
763 } ngx_mp4_atom_header_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
764
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
765 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
766 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
767 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
768 u_char size64[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
769 } ngx_mp4_atom_header64_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
770
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
771
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
772 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
773 ngx_http_mp4_read_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
774 ngx_http_mp4_atom_handler_t *atom, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
775 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
776 off_t end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
777 size_t atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
778 u_char *atom_header, *atom_name;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
779 uint64_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
780 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
781 ngx_uint_t n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
782
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
783 end = mp4->offset + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
784
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
785 while (mp4->offset < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
786
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
787 if (mp4->buffer_pos + sizeof(uint32_t) > mp4->buffer_end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
788 if (ngx_http_mp4_read(mp4) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
789 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
790 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
791 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
792
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
793 atom_header = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
794 atom_size = ngx_mp4_get_32value(atom_header);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
795 atom_header_size = sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
796
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
797 if (atom_size == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
798 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
799 "mp4 atom end");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
800 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
801 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
802
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
803 if (atom_size < sizeof(ngx_mp4_atom_header_t)) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
804
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
805 if (atom_size == 1) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
806
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
807 if (mp4->buffer_pos + sizeof(ngx_mp4_atom_header64_t)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
808 > mp4->buffer_end)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
809 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
810 if (ngx_http_mp4_read(mp4) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
811 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
812 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
813
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
814 atom_header = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
815 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
816
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
817 /* 64-bit atom size */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
818 atom_size = ngx_mp4_get_64value(atom_header + 8);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
819 atom_header_size = sizeof(ngx_mp4_atom_header64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
820
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
821 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
822 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
823 "\"%s\" mp4 atom is too small:%uL",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
824 mp4->file.name.data, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
825 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
826 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
827 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
828
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
829 if (mp4->buffer_pos + sizeof(ngx_mp4_atom_header_t) > mp4->buffer_end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
830 if (ngx_http_mp4_read(mp4) != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
831 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
832 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
833
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
834 atom_header = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
835 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
836
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
837 atom_name = atom_header + sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
838
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
839 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
840 "mp4 atom: %*s @%O:%uL",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
841 4, atom_name, mp4->offset, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
842
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
843 for (n = 0; atom[n].name; n++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
844
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
845 if (ngx_strncmp(atom_name, atom[n].name, 4) == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
846
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
847 ngx_mp4_atom_next(mp4, atom_header_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
848
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
849 rc = atom[n].handler(mp4, atom_size - atom_header_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
850 if (rc != NGX_OK) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
851 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
852 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
853
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
854 goto next;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
855 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
856 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
857
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
858 ngx_mp4_atom_next(mp4, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
859
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
860 next:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
861 continue;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
862 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
863
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
864 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
865 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
866
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
867
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
868 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
869 ngx_http_mp4_read(ngx_http_mp4_file_t *mp4)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
870 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
871 ngx_int_t n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
872
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
873 if (mp4->offset + (off_t) mp4->buffer_size > mp4->end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
874 mp4->buffer_size = (size_t) (mp4->end - mp4->offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
875 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
876
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
877 if (mp4->buffer == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
878 mp4->buffer = ngx_palloc(mp4->request->pool, mp4->buffer_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
879 if (mp4->buffer == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
880 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
881 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
882
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
883 mp4->buffer_start = mp4->buffer;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
884 mp4->buffer_end = mp4->buffer + mp4->buffer_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
885 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
886
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
887 n = ngx_read_file(&mp4->file, mp4->buffer_start, mp4->buffer_size,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
888 mp4->offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
889
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
890 if (n == NGX_ERROR) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
891 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
892 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
893
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
894 if (n == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
895 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
896 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
897
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
898 mp4->buffer_pos = mp4->buffer_start;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
899
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
900 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
901 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
902
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
903
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
904 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
905 ngx_http_mp4_read_ftyp_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
906 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
907 u_char *ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
908 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
909 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
910
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
911 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 ftyp atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
912
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
913 if (atom_data_size > 1024) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
914 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
915 "\"%s\" mp4 ftyp atom is too large:%uL",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
916 mp4->file.name.data, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
917 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
918 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
919
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
920 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
921
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
922 ftyp_atom = ngx_palloc(mp4->request->pool, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
923 if (ftyp_atom == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
924 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
925 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
926
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
927 ngx_mp4_set_32value(ftyp_atom, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
928 ngx_mp4_set_atom_name(ftyp_atom, 'f', 't', 'y', 'p');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
929
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
930 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
931 * only moov atom content is guaranteed to be in mp4->buffer
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
932 * during sending response, so ftyp atom content should be copied
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
933 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
934 ngx_memcpy(ftyp_atom + sizeof(ngx_mp4_atom_header_t),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
935 ngx_mp4_atom_data(mp4), (size_t) atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
936
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
937 atom = &mp4->ftyp_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
938 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
939 atom->pos = ftyp_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
940 atom->last = ftyp_atom + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
941
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
942 mp4->ftyp_atom.buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
943 mp4->ftyp_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
944 mp4->content_length = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
945
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
946 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
947
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
948 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
949 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
950
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
951
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
952 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
953 * Small excess buffer to process atoms after moov atom, mp4->buffer_start
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
954 * will be set to this buffer part after moov atom processing.
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
955 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
956 #define NGX_HTTP_MP4_MOOV_BUFFER_EXCESS (4 * 1024)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
957
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
958 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
959 ngx_http_mp4_read_moov_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
960 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
961 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
962 ngx_uint_t no_mdat;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
963 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
964 ngx_http_mp4_conf_t *conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
965
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
966 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 moov atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
967
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
968 no_mdat = (mp4->mdat_atom.buf == NULL);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
969
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
970 if (no_mdat && mp4->start == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
971 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
972 * send original file if moov atom resides before
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
973 * mdat atom and client requests integral file
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
974 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
975 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
976 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
977
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
978 conf = ngx_http_get_module_loc_conf(mp4->request, ngx_http_mp4_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
979
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
980 if (atom_data_size > mp4->buffer_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
981
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
982 if (atom_data_size > conf->max_buffer_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
983 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
984 "\"%s\" mp4 moov atom is too large:%uL, "
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
985 "you may want to increase mp4_max_buffer_size",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
986 mp4->file.name.data, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
987 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
988 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
989
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
990 ngx_pfree(mp4->request->pool, mp4->buffer);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
991 mp4->buffer = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
992 mp4->buffer_pos = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
993 mp4->buffer_end = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
994
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
995 mp4->buffer_size = (size_t) atom_data_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
996 + NGX_HTTP_MP4_MOOV_BUFFER_EXCESS * no_mdat;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
997 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
998
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
999 mp4->trak.elts = &mp4->traks;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1000 mp4->trak.size = sizeof(ngx_http_mp4_trak_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1001 mp4->trak.nalloc = 2;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1002 mp4->trak.pool = mp4->request->pool;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1003
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1004 atom = &mp4->moov_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1005 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1006 atom->pos = mp4->moov_atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1007 atom->last = mp4->moov_atom_header + 8;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1008
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1009 mp4->moov_atom.buf = &mp4->moov_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1010
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1011 rc = ngx_http_mp4_read_atom(mp4, ngx_http_mp4_moov_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1012
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1013 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 moov atom done");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1014
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1015 if (no_mdat) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1016 mp4->buffer_start = mp4->buffer_pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1017 mp4->buffer_size = NGX_HTTP_MP4_MOOV_BUFFER_EXCESS;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1018
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1019 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1020 /* skip atoms after moov atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1021 mp4->offset = mp4->end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1022 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1023
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1024 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1025 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1026
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1027
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1028 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1029 ngx_http_mp4_read_mdat_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1030 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1031 ngx_buf_t *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1032
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1033 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 mdat atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1034
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1035 data = &mp4->mdat_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1036 data->file = &mp4->file;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1037 data->in_file = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1038 data->last_buf = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1039 data->last_in_chain = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1040 data->file_last = mp4->offset + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1041
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1042 mp4->mdat_atom.buf = &mp4->mdat_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1043 mp4->mdat_atom.next = &mp4->mdat_data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1044 mp4->mdat_data.buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1045
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1046 if (mp4->trak.nelts) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1047 /* skip atoms after mdat atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1048 mp4->offset = mp4->end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1049
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1050 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1051 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1052 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1053
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1054 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1055 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1056
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1057
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1058 static size_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1059 ngx_http_mp4_update_mdat_atom(ngx_http_mp4_file_t *mp4, off_t start_offset)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1060 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1061 off_t atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1062 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1063 uint32_t atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1064 uint64_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1065 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1066
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1067 atom_data_size = mp4->mdat_data.buf->file_last - start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1068 mp4->mdat_data.buf->file_pos = start_offset;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1069 mp4->content_length += atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1070
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
1071 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1072 "mdat new offset @%O:%O", start_offset, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1073
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1074 atom_header = mp4->mdat_atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1075
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1076 if ((uint64_t) atom_data_size > 0xffffffff) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1077 atom_size = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1078 atom_header_size = sizeof(ngx_mp4_atom_header64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1079 ngx_mp4_set_64value(atom_header + sizeof(ngx_mp4_atom_header_t),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1080 sizeof(ngx_mp4_atom_header64_t) + atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1081 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1082 atom_size = sizeof(ngx_mp4_atom_header_t) + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1083 atom_header_size = sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1084 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1085
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1086 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1087 ngx_mp4_set_atom_name(atom_header, 'm', 'd', 'a', 't');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1088
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1089 atom = &mp4->mdat_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1090 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1091 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1092 atom->last = atom_header + atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1093
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1094 return atom_header_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1095 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1096
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1097
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1098 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1099 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1100 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1101 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1102 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1103 u_char creation_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1104 u_char modification_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1105 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1106 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1107 u_char rate[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1108 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1109 u_char reserved[10];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1110 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1111 u_char preview_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1112 u_char preview_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1113 u_char poster_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1114 u_char selection_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1115 u_char selection_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1116 u_char current_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1117 u_char next_track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1118 } ngx_mp4_mvhd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1119
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1120 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1121 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1122 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1123 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1124 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1125 u_char creation_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1126 u_char modification_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1127 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1128 u_char duration[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1129 u_char rate[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1130 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1131 u_char reserved[10];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1132 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1133 u_char preview_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1134 u_char preview_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1135 u_char poster_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1136 u_char selection_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1137 u_char selection_duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1138 u_char current_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1139 u_char next_track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1140 } ngx_mp4_mvhd64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1141
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1142
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1143 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1144 ngx_http_mp4_read_mvhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1145 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1146 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1147 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1148 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1149 uint64_t duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1150 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1151 ngx_mp4_mvhd_atom_t *mvhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1152 ngx_mp4_mvhd64_atom_t *mvhd64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1153
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1154 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 mvhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1155
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1156 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1157 mvhd_atom = (ngx_mp4_mvhd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1158 mvhd64_atom = (ngx_mp4_mvhd64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1159 ngx_mp4_set_atom_name(atom_header, 'm', 'v', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1160
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1161 if (mvhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1162 /* version 0: 32-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1163 timescale = ngx_mp4_get_32value(mvhd_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1164 duration = ngx_mp4_get_32value(mvhd_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1165
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1166 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1167 /* version 1: 64-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1168 timescale = ngx_mp4_get_32value(mvhd64_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1169 duration = ngx_mp4_get_64value(mvhd64_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1170 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1171
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1172 mp4->timescale = timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1173
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1174 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1175 "mvhd timescale:%uD, duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1176 timescale, duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1177
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1178 duration -= (uint64_t) mp4->start * timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1179
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1180 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1181 "mvhd new duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1182 duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1183
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1184 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1185 ngx_mp4_set_32value(mvhd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1186
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1187 if (mvhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1188 ngx_mp4_set_32value(mvhd_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1189
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1190 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1191 ngx_mp4_set_64value(mvhd64_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1192 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1193
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1194 atom = &mp4->mvhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1195 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1196 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1197 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1198
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1199 mp4->mvhd_atom.buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1200
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1201 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1202
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1203 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1204 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1205
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1206
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1207 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1208 ngx_http_mp4_read_trak_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1209 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1210 u_char *atom_header, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1211 off_t atom_file_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1212 ngx_int_t rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1213 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1214 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1215
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1216 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 trak atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1217
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1218 trak = ngx_array_push(&mp4->trak);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1219 if (trak == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1220 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1221 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1222
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1223 ngx_memzero(trak, sizeof(ngx_http_mp4_trak_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1224
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1225 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1226 ngx_mp4_set_atom_name(atom_header, 't', 'r', 'a', 'k');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1227
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1228 atom = &trak->trak_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1229 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1230 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1231 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1232
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1233 trak->out[NGX_HTTP_MP4_TRAK_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1234
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1235 atom_end = mp4->buffer_pos + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1236 atom_file_end = mp4->offset + atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1237
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1238 rc = ngx_http_mp4_read_atom(mp4, ngx_http_mp4_trak_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1239
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1240 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1241 "mp4 trak atom: %i", rc);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1242
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1243 if (rc == NGX_DECLINED) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1244 /* skip this trak */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1245 ngx_memzero(trak, sizeof(ngx_http_mp4_trak_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1246 mp4->trak.nelts--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1247 mp4->buffer_pos = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1248 mp4->offset = atom_file_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1249 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1250 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1251
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1252 return rc;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1253 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1254
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1255
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1256 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1257 ngx_http_mp4_update_trak_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1258 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1259 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1260 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1261
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1262 trak->size += sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1263 atom = &trak->trak_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1264 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1265 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1266
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1267
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1268 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1269 ngx_http_mp4_read_cmov_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1270 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1271 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1272 "\"%s\" mp4 compressed moov atom (cmov) is not supported",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1273 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1274
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1275 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1276 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1277
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1278
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1279 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1280 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1281 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1282 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1283 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1284 u_char creation_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1285 u_char modification_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1286 u_char track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1287 u_char reserved1[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1288 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1289 u_char reserved2[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1290 u_char layer[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1291 u_char group[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1292 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1293 u_char reverved3[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1294 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1295 u_char width[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1296 u_char heigth[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1297 } ngx_mp4_tkhd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1298
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1299 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1300 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1301 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1302 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1303 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1304 u_char creation_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1305 u_char modification_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1306 u_char track_id[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1307 u_char reserved1[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1308 u_char duration[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1309 u_char reserved2[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1310 u_char layer[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1311 u_char group[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1312 u_char volume[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1313 u_char reverved3[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1314 u_char matrix[36];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1315 u_char width[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1316 u_char heigth[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1317 } ngx_mp4_tkhd64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1318
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1319
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1320 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1321 ngx_http_mp4_read_tkhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1322 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1323 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1324 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1325 uint64_t duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1326 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1327 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1328 ngx_mp4_tkhd_atom_t *tkhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1329 ngx_mp4_tkhd64_atom_t *tkhd64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1330
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1331 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 tkhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1332
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1333 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1334 tkhd_atom = (ngx_mp4_tkhd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1335 tkhd64_atom = (ngx_mp4_tkhd64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1336 ngx_mp4_set_atom_name(tkhd_atom, 't', 'k', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1337
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1338 if (tkhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1339 /* version 0: 32-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1340 duration = ngx_mp4_get_32value(tkhd_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1341
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1342 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1343 /* version 1: 64-bit duration */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1344 duration = ngx_mp4_get_64value(tkhd64_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1345 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1346
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1347 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1348 "tkhd duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1349 duration, (double) duration / mp4->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1350
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1351 duration -= (uint64_t) mp4->start * mp4->timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1352
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1353 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1354 "tkhd new duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1355 duration, (double) duration / mp4->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1356
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1357 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1358
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1359 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1360 trak->tkhd_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1361
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1362 ngx_mp4_set_32value(tkhd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1363
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1364 if (tkhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1365 ngx_mp4_set_32value(tkhd_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1366
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1367 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1368 ngx_mp4_set_64value(tkhd64_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1369 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1370
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1371 atom = &trak->tkhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1372 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1373 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1374 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1375
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1376 trak->out[NGX_HTTP_MP4_TKHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1377
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1378 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1379
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1380 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1381 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1382
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1383
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1384 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1385 ngx_http_mp4_read_mdia_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1386 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1387 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1388 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1389 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1390
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1391 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "process mdia atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1392
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1393 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1394 ngx_mp4_set_atom_name(atom_header, 'm', 'd', 'i', 'a');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1395
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1396 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1397
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1398 atom = &trak->mdia_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1399 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1400 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1401 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1402
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1403 trak->out[NGX_HTTP_MP4_MDIA_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1404
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1405 return ngx_http_mp4_read_atom(mp4, ngx_http_mp4_mdia_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1406 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1407
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1408
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1409 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1410 ngx_http_mp4_update_mdia_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1411 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1412 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1413 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1414
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1415 trak->size += sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1416 atom = &trak->mdia_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1417 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1418 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1419
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1420
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1421 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1422 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1423 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1424 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1425 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1426 u_char creation_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1427 u_char modification_time[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1428 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1429 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1430 u_char language[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1431 u_char quality[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1432 } ngx_mp4_mdhd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1433
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1434 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1435 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1436 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1437 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1438 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1439 u_char creation_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1440 u_char modification_time[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1441 u_char timescale[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1442 u_char duration[8];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1443 u_char language[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1444 u_char quality[2];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1445 } ngx_mp4_mdhd64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1446
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1447
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1448 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1449 ngx_http_mp4_read_mdhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1450 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1451 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1452 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1453 uint32_t timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1454 uint64_t duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1455 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1456 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1457 ngx_mp4_mdhd_atom_t *mdhd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1458 ngx_mp4_mdhd64_atom_t *mdhd64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1459
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1460 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 mdhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1461
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1462 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1463 mdhd_atom = (ngx_mp4_mdhd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1464 mdhd64_atom = (ngx_mp4_mdhd64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1465 ngx_mp4_set_atom_name(mdhd_atom, 'm', 'd', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1466
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1467 if (mdhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1468 /* version 0: everything is 32-bit */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1469 timescale = ngx_mp4_get_32value(mdhd_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1470 duration = ngx_mp4_get_32value(mdhd_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1471
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1472 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1473 /* version 1: 64-bit duration and 32-bit timescale */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1474 timescale = ngx_mp4_get_32value(mdhd64_atom->timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1475 duration = ngx_mp4_get_64value(mdhd64_atom->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1476 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1477
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1478 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1479 "mdhd timescale:%uD, duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1480 timescale, duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1481
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1482 duration -= (uint64_t) mp4->start * timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1483
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1484 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1485 "mdhd new duration:%uL, time:%.3fs",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1486 duration, (double) duration / timescale);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1487
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1488 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1489
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1490 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1491 trak->mdhd_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1492 trak->timescale = timescale;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1493
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1494 ngx_mp4_set_32value(mdhd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1495
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1496 if (mdhd_atom->version[0] == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1497 ngx_mp4_set_32value(mdhd_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1498
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1499 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1500 ngx_mp4_set_64value(mdhd64_atom->duration, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1501 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1502
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1503 atom = &trak->mdhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1504 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1505 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1506 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1507
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1508 trak->out[NGX_HTTP_MP4_MDHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1509
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1510 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1511
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1512 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1513 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1514
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1515
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1516 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1517 ngx_http_mp4_read_hdlr_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1518 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1519 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1520 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1521 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1522 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1523
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1524 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 hdlr atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1525
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1526 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1527 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1528 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1529 ngx_mp4_set_atom_name(atom_header, 'h', 'd', 'l', 'r');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1530
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1531 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1532
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1533 atom = &trak->hdlr_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1534 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1535 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1536 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1537
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1538 trak->hdlr_size = atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1539 trak->out[NGX_HTTP_MP4_HDLR_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1540
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1541 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1542
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1543 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1544 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1545
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1546
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1547 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1548 ngx_http_mp4_read_minf_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1549 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1550 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1551 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1552 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1553
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1554 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "process minf atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1555
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1556 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1557 ngx_mp4_set_atom_name(atom_header, 'm', 'i', 'n', 'f');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1558
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1559 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1560
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1561 atom = &trak->minf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1562 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1563 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1564 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1565
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1566 trak->out[NGX_HTTP_MP4_MINF_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1567
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1568 return ngx_http_mp4_read_atom(mp4, ngx_http_mp4_minf_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1569 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1570
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1571
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1572 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1573 ngx_http_mp4_update_minf_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1574 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1575 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1576 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1577
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1578 trak->size += sizeof(ngx_mp4_atom_header_t)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1579 + trak->vmhd_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1580 + trak->smhd_size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1581 + trak->dinf_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1582 atom = &trak->minf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1583 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1584 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1585
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1586
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1587 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1588 ngx_http_mp4_read_vmhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1589 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1590 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1591 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1592 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1593 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1594
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1595 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 vmhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1596
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1597 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1598 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1599 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1600 ngx_mp4_set_atom_name(atom_header, 'v', 'm', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1601
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1602 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1603
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1604 atom = &trak->vmhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1605 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1606 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1607 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1608
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1609 trak->vmhd_size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1610 trak->out[NGX_HTTP_MP4_VMHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1611
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1612 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1613
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1614 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1615 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1616
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1617
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1618 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1619 ngx_http_mp4_read_smhd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1620 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1621 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1622 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1623 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1624 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1625
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1626 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 smhd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1627
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1628 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1629 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1630 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1631 ngx_mp4_set_atom_name(atom_header, 's', 'm', 'h', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1632
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1633 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1634
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1635 atom = &trak->smhd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1636 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1637 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1638 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1639
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1640 trak->vmhd_size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1641 trak->out[NGX_HTTP_MP4_SMHD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1642
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1643 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1644
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1645 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1646 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1647
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1648
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1649 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1650 ngx_http_mp4_read_dinf_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1651 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1652 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1653 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1654 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1655 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1656
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1657 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 dinf atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1658
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1659 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1660 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1661 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1662 ngx_mp4_set_atom_name(atom_header, 'd', 'i', 'n', 'f');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1663
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1664 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1665
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1666 atom = &trak->dinf_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1667 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1668 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1669 atom->last = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1670
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1671 trak->dinf_size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1672 trak->out[NGX_HTTP_MP4_DINF_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1673
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1674 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1675
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1676 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1677 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1678
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1679
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1680 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1681 ngx_http_mp4_read_stbl_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1682 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1683 u_char *atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1684 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1685 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1686
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1687 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "process stbl atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1688
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1689 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1690 ngx_mp4_set_atom_name(atom_header, 's', 't', 'b', 'l');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1691
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1692 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1693
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1694 atom = &trak->stbl_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1695 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1696 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1697 atom->last = atom_header + sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1698
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1699 trak->out[NGX_HTTP_MP4_STBL_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1700
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1701 return ngx_http_mp4_read_atom(mp4, ngx_http_mp4_stbl_atoms, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1702 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1703
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1704
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1705 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1706 ngx_http_mp4_update_stbl_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1707 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1708 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1709 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1710
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1711 trak->size += sizeof(ngx_mp4_atom_header_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1712 atom = &trak->stbl_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1713 ngx_mp4_set_32value(atom->pos, trak->size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1714 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1715
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1716
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1717 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1718 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1719 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1720 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1721 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1722 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1723
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1724 u_char media_size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1725 u_char media_name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1726 } ngx_mp4_stsd_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1727
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1728
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1729 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1730 ngx_http_mp4_read_stsd_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1731 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1732 u_char *atom_header, *atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1733 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1734 ngx_buf_t *atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1735 ngx_mp4_stsd_atom_t *stsd_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1736 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1737
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1738 /* sample description atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1739
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1740 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stsd atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1741
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1742 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1743 stsd_atom = (ngx_mp4_stsd_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1744 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1745 atom_table = atom_header + atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1746 ngx_mp4_set_32value(stsd_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1747 ngx_mp4_set_atom_name(stsd_atom, 's', 't', 's', 'd');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1748
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1749 if ((uint64_t) (sizeof(ngx_mp4_stsd_atom_t) - sizeof(ngx_mp4_atom_header_t))
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1750 > atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1751 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1752 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1753 "\"%s\" mp4 stsd atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1754 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1755 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1756 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1757
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1758 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1759 "stsd entries:%uD, media:%*s",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1760 ngx_mp4_get_32value(stsd_atom->entries),
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1761 4, stsd_atom->media_name);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1762
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1763 /* supported media format: "avc1" (H.264) and "mp4a" (MPEG-4/AAC) */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1764
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1765 if (ngx_strncmp(stsd_atom->media_name, "avc1", 4) != 0
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1766 && ngx_strncmp(stsd_atom->media_name, "mp4a", 4) != 0)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1767 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1768 return NGX_DECLINED;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1769 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1770
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1771 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1772
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1773 atom = &trak->stsd_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1774 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1775 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1776 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1777
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1778 trak->out[NGX_HTTP_MP4_STSD_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1779 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1780
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1781 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1782
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1783 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1784 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1785
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1786
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1787 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1788 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1789 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1790 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1791 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1792 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1793 } ngx_mp4_stts_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1794
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1795 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1796 u_char count[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1797 u_char duration[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1798 } ngx_mp4_stts_entry_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1799
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1800
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1801 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1802 ngx_http_mp4_read_stts_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1803 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1804 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1805 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1806 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1807 ngx_mp4_stts_atom_t *stts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1808 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1809
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1810 /* time-to-sample atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1811
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1812 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stts atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1813
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1814 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1815 stts_atom = (ngx_mp4_stts_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1816 ngx_mp4_set_atom_name(stts_atom, 's', 't', 't', 's');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1817
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1818 entries = ngx_mp4_get_32value(stts_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1819
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1820 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1821 "mp4 time-to-sample entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1822
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1823 atom_table = atom_header + sizeof(ngx_mp4_stts_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1824 atom_end = atom_table + entries * sizeof(ngx_mp4_stts_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1825
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1826 if ((uint64_t) (atom_end - stts_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1827 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1828 "\"%s\" mp4 stts atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1829 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1830 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1831 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1832
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1833 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1834 trak->time_to_sample_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1835
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1836 atom = &trak->stts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1837 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1838 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1839 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1840
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1841 data = &trak->stts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1842 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1843 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1844 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1845
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1846 trak->out[NGX_HTTP_MP4_STTS_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1847 trak->out[NGX_HTTP_MP4_STTS_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1848
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1849 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1850
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1851 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1852 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1853
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1854
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1855 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1856 ngx_http_mp4_update_stts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1857 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1858 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1859 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1860 uint32_t entries, count, duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1861 uint64_t start_time;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1862 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1863 ngx_uint_t start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1864 ngx_mp4_stts_atom_t *stts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1865 ngx_mp4_stts_entry_t *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1866
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1867 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1868 * mdia.minf.stbl.stts updating requires trak->timescale
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1869 * from mdia.mdhd atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1870 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1871
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1872 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1873 "mp4 stts atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1874
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1875 data = trak->out[NGX_HTTP_MP4_STTS_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1876
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1877 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1878 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1879 "no mp4 stts atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1880 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1881 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1882 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1883
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1884 entries = trak->time_to_sample_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1885 start_time = mp4->start * trak->timescale / 1000;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1886
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1887 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1888 "time-to-sample start_time:%uL", start_time);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1889
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1890 start_sample = 0;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1891 entry = (ngx_mp4_stts_entry_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1892 end = (ngx_mp4_stts_entry_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1893
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1894 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1895 count = ngx_mp4_get_32value(entry->count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1896 duration = ngx_mp4_get_32value(entry->duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1897
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1898 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1899 "count:%uD, duration:%uD", count, duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1900
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1901 if (start_time < count * duration) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1902 start_sample += (ngx_uint_t) (start_time / duration);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1903 count -= start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1904 ngx_mp4_set_32value(entry->count, count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1905 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1906 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1907
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1908 start_sample += count;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1909 start_time -= count * duration;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1910 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1911 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1912 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1913
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1914 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1915 "start time is out mp4 stts samples in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1916 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1917
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1918 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1919
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1920 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1921
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1922 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1923 "start_sample:%ui, new count:%uD", start_sample, count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1924
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1925 trak->start_sample = start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1926
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1927 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1928 atom_size = sizeof(ngx_mp4_stts_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1929 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1930
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1931 atom = trak->out[NGX_HTTP_MP4_STTS_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1932 stts_atom = (ngx_mp4_stts_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1933 ngx_mp4_set_32value(stts_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1934 ngx_mp4_set_32value(stts_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1935
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1936 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1937 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1938
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1939
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1940 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1941 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1942 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1943 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1944 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1945 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1946 } ngx_http_mp4_stss_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1947
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1948
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1949 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1950 ngx_http_mp4_read_stss_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1951 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1952 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1953 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1954 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1955 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1956 ngx_http_mp4_stss_atom_t *stss_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1957
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1958 /* sync samples atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1959
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1960 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stss atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1961
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1962 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1963 stss_atom = (ngx_http_mp4_stss_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1964 ngx_mp4_set_atom_name(stss_atom, 's', 't', 's', 's');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1965
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1966 entries = ngx_mp4_get_32value(stss_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1967
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1968 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1969 "sync sample entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1970
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1971 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1972 trak->sync_samples_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1973
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1974 atom_table = atom_header + sizeof(ngx_http_mp4_stss_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1975
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1976 atom = &trak->stss_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1977 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1978 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1979 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1980
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1981 atom_end = atom_table + entries * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1982
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1983 if ((uint64_t) (atom_end - stss_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1984 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1985 "\"%s\" mp4 stss atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1986 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1987 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1988
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1989 data = &trak->stss_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1990 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1991 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1992 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1993
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1994 trak->out[NGX_HTTP_MP4_STSS_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1995 trak->out[NGX_HTTP_MP4_STSS_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1996
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1997 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1998
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1999 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2000 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2001
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2002
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2003 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2004 ngx_http_mp4_update_stss_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2005 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2006 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2007 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2008 uint32_t entries, sample, start_sample, *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2009 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2010 ngx_http_mp4_stss_atom_t *stss_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2011
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2012 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2013 * mdia.minf.stbl.stss updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2014 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2015 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2016 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2017
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2018 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2019 "mp4 stss atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2020
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2021 data = trak->out[NGX_HTTP_MP4_STSS_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2022
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2023 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2024 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2025 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2026
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2027 /* sync samples starts from 1 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2028 start_sample = trak->start_sample + 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2029 entries = trak->sync_samples_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2030
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2031 entry = (uint32_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2032 end = (uint32_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2033
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2034 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2035 sample = ngx_mp4_get_32value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2036
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2037 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2038 "start:%uD, sync:%uD", start_sample, sample);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2039
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2040 if (sample >= start_sample) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2041 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2042 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2043
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2044 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2045 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2046 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2047
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2048 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2049 "start sample is out of mp4 stss atom in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2050 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2051
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2052 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2053
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2054 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2055
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2056 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2057
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2058 start_sample = trak->start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2059
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2060 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2061 sample = ngx_mp4_get_32value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2062 sample -= start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2063 ngx_mp4_set_32value(entry, sample);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2064 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2065 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2066
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2067 atom_size = sizeof(ngx_http_mp4_stss_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2068 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2069
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2070 atom = trak->out[NGX_HTTP_MP4_STSS_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2071 stss_atom = (ngx_http_mp4_stss_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2072
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2073 ngx_mp4_set_32value(stss_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2074 ngx_mp4_set_32value(stss_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2075
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2076 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2077 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2078
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2079
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2080 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2081 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2082 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2083 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2084 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2085 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2086 } ngx_mp4_ctts_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2087
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2088 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2089 u_char count[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2090 u_char offset[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2091 } ngx_mp4_ctts_entry_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2092
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2093
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2094 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2095 ngx_http_mp4_read_ctts_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2096 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2097 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2098 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2099 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2100 ngx_mp4_ctts_atom_t *ctts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2101 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2102
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2103 /* composition offsets atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2104
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2105 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 ctts atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2106
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2107 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2108 ctts_atom = (ngx_mp4_ctts_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2109 ngx_mp4_set_atom_name(ctts_atom, 'c', 't', 't', 's');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2110
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2111 entries = ngx_mp4_get_32value(ctts_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2112
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2113 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2114 "composition offset entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2115
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2116 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2117 trak->composition_offset_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2118
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2119 atom_table = atom_header + sizeof(ngx_mp4_ctts_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2120
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2121 atom = &trak->ctts_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2122 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2123 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2124 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2125
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2126 atom_end = atom_table + entries * sizeof(ngx_mp4_ctts_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2127
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2128 if ((uint64_t) (atom_end - ctts_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2129 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2130 "\"%s\" mp4 ctts atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2131 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2132 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2133
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2134 data = &trak->ctts_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2135 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2136 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2137 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2138
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2139 trak->out[NGX_HTTP_MP4_CTTS_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2140 trak->out[NGX_HTTP_MP4_CTTS_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2141
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2142 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2143
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2144 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2145 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2146
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2147
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2148 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2149 ngx_http_mp4_update_ctts_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2150 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2151 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2152 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2153 uint32_t entries, count, start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2154 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2155 ngx_mp4_ctts_atom_t *ctts_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2156 ngx_mp4_ctts_entry_t *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2157
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2158 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2159 * mdia.minf.stbl.ctts updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2160 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2161 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2162 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2163
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2164 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2165 "mp4 ctts atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2166
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2167 data = trak->out[NGX_HTTP_MP4_CTTS_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2168
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2169 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2170 return;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2171 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2172
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2173 /* sync samples starts from 1 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2174 start_sample = trak->start_sample + 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2175 entries = trak->composition_offset_entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2176 entry = (ngx_mp4_ctts_entry_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2177 end = (ngx_mp4_ctts_entry_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2178
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2179 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2180 count = ngx_mp4_get_32value(entry->count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2181
4173
aaa936b2cab5 Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents: 4169
diff changeset
2182 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
4169
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2183 "start:%uD, count:%uD, offset:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2184 start_sample, count, ngx_mp4_get_32value(entry->offset));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2185
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2186 if (start_sample <= count) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2187 count -= (start_sample - 1);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2188 ngx_mp4_set_32value(entry->count, count);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2189 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2190 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2191
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2192 start_sample -= count;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2193 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2194 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2195 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2196
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2197 trak->out[NGX_HTTP_MP4_CTTS_ATOM].buf = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2198 trak->out[NGX_HTTP_MP4_CTTS_DATA].buf = NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2199
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2200 return;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2201
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2202 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2203
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2204 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2205 atom_size = sizeof(ngx_mp4_ctts_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2206 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2207
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2208 atom = trak->out[NGX_HTTP_MP4_CTTS_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2209 ctts_atom = (ngx_mp4_ctts_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2210
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2211 ngx_mp4_set_32value(ctts_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2212 ngx_mp4_set_32value(ctts_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2213
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2214 return;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2215 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2216
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2217
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2218 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2219 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2220 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2221 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2222 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2223 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2224 } ngx_mp4_stsc_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2225
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2226
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2227 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2228 ngx_http_mp4_read_stsc_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2229 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2230 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2231 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2232 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2233 ngx_mp4_stsc_atom_t *stsc_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2234 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2235
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2236 /* sample-to-chunk atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2237
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2238 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stsc atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2239
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2240 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2241 stsc_atom = (ngx_mp4_stsc_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2242 ngx_mp4_set_atom_name(stsc_atom, 's', 't', 's', 'c');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2243
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2244 entries = ngx_mp4_get_32value(stsc_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2245
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2246 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2247 "sample-to-chunk entries:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2248
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2249 atom_table = atom_header + sizeof(ngx_mp4_stsc_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2250 atom_end = atom_table + entries * sizeof(ngx_mp4_stsc_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2251
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2252 if ((uint64_t) (atom_end - stsc_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2253 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2254 "\"%s\" mp4 stsc atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2255 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2256 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2257 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2258
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2259 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2260 trak->sample_to_chunk_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2261
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2262 atom = &trak->stsc_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2263 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2264 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2265 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2266
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2267 data = &trak->stsc_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2268 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2269 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2270 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2271
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2272 trak->out[NGX_HTTP_MP4_STSC_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2273 trak->out[NGX_HTTP_MP4_STSC_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2274
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2275 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2276
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2277 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2278 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2279
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2280
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2281 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2282 ngx_http_mp4_update_stsc_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2283 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2284 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2285 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2286 uint32_t start_sample, entries, chunk, samples, id,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2287 next_chunk, n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2288 ngx_buf_t *atom, *data, *buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2289 ngx_mp4_stsc_atom_t *stsc_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2290 ngx_mp4_stsc_entry_t *entry, *first, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2291
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2292 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2293 * mdia.minf.stbl.stsc updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2294 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2295 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2296 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2297
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2298 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2299 "mp4 stsc atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2300
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2301 data = trak->out[NGX_HTTP_MP4_STSC_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2302
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2303 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2304 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2305 "no mp4 stsc atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2306 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2307 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2308 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2309
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2310 start_sample = (uint32_t) trak->start_sample;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2311 entries = trak->sample_to_chunk_entries - 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2312
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2313 entry = (ngx_mp4_stsc_entry_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2314 end = (ngx_mp4_stsc_entry_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2315
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2316 chunk = ngx_mp4_get_32value(entry->chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2317 samples = ngx_mp4_get_32value(entry->samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2318 id = ngx_mp4_get_32value(entry->id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2319 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2320
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2321 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2322
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2323 next_chunk = ngx_mp4_get_32value(entry->chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2324
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2325 ngx_log_debug5(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2326 "start_sample:%uD, chunk:%uD, chunks:%uD, "
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2327 "samples:%uD, id:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2328 start_sample, chunk, next_chunk - chunk, samples, id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2329
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2330 n = (next_chunk - chunk) * samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2331
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2332 if (start_sample <= n) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2333 goto found;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2334 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2335
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2336 start_sample -= n;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2337
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2338 chunk = next_chunk;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2339 samples = ngx_mp4_get_32value(entry->samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2340 id = ngx_mp4_get_32value(entry->id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2341 entries--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2342 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2343 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2344
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2345 next_chunk = trak->chunks;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2346
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2347 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2348 "start_sample:%uD, chunk:%uD, chunks:%uD, samples:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2349 start_sample, chunk, next_chunk - chunk, samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2350
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2351 n = (next_chunk - chunk) * samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2352
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2353 if (start_sample > n) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2354 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2355 "start time is out mp4 stsc chunks in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2356 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2357 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2358 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2359
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2360 found:
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2361
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2362 entries++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2363 entry--;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2364
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2365 if (samples == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2366 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2367 "zero number of samples in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2368 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2369 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2370 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2371
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2372 trak->start_chunk = chunk - 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2373
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2374 trak->start_chunk += start_sample / samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2375 trak->chunk_samples = start_sample % samples;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2376
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2377 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2378 "start chunk:%ui, samples:%uD",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2379 trak->start_chunk, trak->chunk_samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2380
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2381 data->pos = (u_char *) entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2382 atom_size = sizeof(ngx_mp4_stsc_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2383
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2384 if (trak->chunk_samples) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2385
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2386 first = &trak->stsc_chunk_entry;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2387 ngx_mp4_set_32value(first->chunk, 1);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2388 ngx_mp4_set_32value(first->samples, samples - trak->chunk_samples);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2389 ngx_mp4_set_32value(first->id, id);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2390
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2391 buf = &trak->stsc_chunk_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2392 buf->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2393 buf->pos = (u_char *) first;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2394 buf->last = (u_char *) first + sizeof(ngx_mp4_stsc_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2395
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2396 trak->out[NGX_HTTP_MP4_STSC_CHUNK].buf = buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2397
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2398 ngx_mp4_set_32value(entry->chunk, 2);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2399
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2400 atom_size += sizeof(ngx_mp4_stsc_entry_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2401 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2402
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2403 while (++entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2404 chunk = ngx_mp4_get_32value(entry->chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2405 chunk -= trak->start_chunk;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2406 ngx_mp4_set_32value(entry->chunk, chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2407 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2408
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2409 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2410
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2411 atom = trak->out[NGX_HTTP_MP4_STSC_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2412 stsc_atom = (ngx_mp4_stsc_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2413
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2414 ngx_mp4_set_32value(stsc_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2415 ngx_mp4_set_32value(stsc_atom->entries, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2416
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2417 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2418 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2419
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2420
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2421 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2422 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2423 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2424 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2425 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2426 u_char uniform_size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2427 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2428 } ngx_mp4_stsz_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2429
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2430
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2431 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2432 ngx_http_mp4_read_stsz_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2433 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2434 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2435 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2436 uint32_t entries, size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2437 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2438 ngx_mp4_stsz_atom_t *stsz_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2439 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2440
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2441 /* sample sizes atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2442
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2443 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stsz atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2444
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2445 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2446 stsz_atom = (ngx_mp4_stsz_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2447 ngx_mp4_set_atom_name(stsz_atom, 's', 't', 's', 'z');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2448
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2449 size = ngx_mp4_get_32value(stsz_atom->uniform_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2450 entries = ngx_mp4_get_32value(stsz_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2451
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2452 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2453 "sample uniform size:%uD, entries:%uD", size, entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2454
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2455 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2456 trak->sample_sizes_entries = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2457
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2458 atom_table = atom_header + sizeof(ngx_mp4_stsz_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2459
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2460 atom = &trak->stsz_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2461 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2462 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2463 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2464
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2465 trak->out[NGX_HTTP_MP4_STSZ_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2466
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2467 if (size == 0) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2468 atom_end = atom_table + entries * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2469
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2470 if ((uint64_t) (atom_end - stsz_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2471 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2472 "\"%s\" mp4 stsz atom too large",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2473 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2474 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2475 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2476
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2477 data = &trak->stsz_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2478 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2479 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2480 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2481
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2482 trak->out[NGX_HTTP_MP4_STSZ_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2483
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2484 } else {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2485 /* if size != 0 then all samples are the same size */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2486 /* TODO : chunk samples */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2487 atom_size = sizeof(ngx_mp4_atom_header_t) + (size_t) atom_data_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2488 ngx_mp4_set_32value(atom_header, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2489 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2490 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2491
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2492 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2493
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2494 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2495 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2496
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2497
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2498 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2499 ngx_http_mp4_update_stsz_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2500 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2501 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2502 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2503 uint32_t *pos, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2504 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2505 ngx_mp4_stsz_atom_t *stsz_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2506
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2507 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2508 * mdia.minf.stbl.stsz updating requires trak->start_sample
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2509 * from mdia.minf.stbl.stts which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2510 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2511 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2512
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2513 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2514 "mp4 stsz atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2515
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2516 data = trak->out[NGX_HTTP_MP4_STSZ_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2517
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2518 if (data) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2519 data->pos += trak->start_sample * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2520 end = (uint32_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2521
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2522 for (pos = end - trak->chunk_samples; pos < end; pos++) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2523 trak->chunk_samples_size += ngx_mp4_get_32value(pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2524 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2525
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2526 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2527 "chunk samples sizes:%uL", trak->chunk_samples_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2528
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2529 atom_size = sizeof(ngx_mp4_stsz_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2530 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2531
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2532 atom = trak->out[NGX_HTTP_MP4_STSZ_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2533 stsz_atom = (ngx_mp4_stsz_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2534
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2535 ngx_mp4_set_32value(stsz_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2536 ngx_mp4_set_32value(stsz_atom->entries,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2537 trak->sample_sizes_entries - trak->start_sample);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2538 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2539 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2540
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2541
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2542 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2543 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2544 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2545 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2546 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2547 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2548 } ngx_mp4_stco_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2549
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2550
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2551 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2552 ngx_http_mp4_read_stco_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2553 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2554 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2555 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2556 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2557 ngx_mp4_stco_atom_t *stco_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2558 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2559
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2560 /* chunk offsets atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2561
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2562 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 stco atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2563
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2564 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2565 stco_atom = (ngx_mp4_stco_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2566 ngx_mp4_set_atom_name(stco_atom, 's', 't', 'c', 'o');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2567
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2568 entries = ngx_mp4_get_32value(stco_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2569
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2570 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "chunks:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2571
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2572 atom_table = atom_header + sizeof(ngx_mp4_stco_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2573 atom_end = atom_table + entries * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2574
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2575 if ((uint64_t) (atom_end - stco_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2576 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2577 "\"%s\" mp4 stco atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2578 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2579 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2580
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2581 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2582 trak->chunks = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2583
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2584 atom = &trak->stco_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2585 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2586 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2587 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2588
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2589 data = &trak->stco_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2590 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2591 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2592 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2593
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2594 trak->out[NGX_HTTP_MP4_STCO_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2595 trak->out[NGX_HTTP_MP4_STCO_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2596
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2597 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2598
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2599 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2600 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2601
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2602
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2603 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2604 ngx_http_mp4_update_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2605 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2606 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2607 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2608 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2609 ngx_mp4_stco_atom_t *stco_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2610
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2611 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2612 * mdia.minf.stbl.stco updating requires trak->start_chunk
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2613 * from mdia.minf.stbl.stsc which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2614 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2615 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2616
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2617 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2618 "mp4 stco atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2619
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2620 data = trak->out[NGX_HTTP_MP4_STCO_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2621
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2622 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2623 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2624 "no mp4 stco atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2625 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2626 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2627 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2628
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2629 data->pos += trak->start_chunk * sizeof(uint32_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2630 atom_size = sizeof(ngx_mp4_stco_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2631 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2632
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2633 trak->start_offset = ngx_mp4_get_32value(data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2634 trak->start_offset += trak->chunk_samples_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2635 ngx_mp4_set_32value(data->pos, trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2636
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2637 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2638 "start chunk offset:%uD", trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2639
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2640 atom = trak->out[NGX_HTTP_MP4_STCO_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2641 stco_atom = (ngx_mp4_stco_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2642
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2643 ngx_mp4_set_32value(stco_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2644 ngx_mp4_set_32value(stco_atom->entries, trak->chunks - trak->start_chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2645
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2646 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2647 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2648
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2649
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2650 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2651 ngx_http_mp4_adjust_stco_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2652 ngx_http_mp4_trak_t *trak, int32_t adjustment)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2653 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2654 uint32_t offset, *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2655 ngx_buf_t *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2656
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2657 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2658 * moov.trak.mdia.minf.stbl.stco adjustment requires
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2659 * minimal start offset of all traks and new moov atom size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2660 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2661
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2662 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2663 "mp4 stco atom adjustment");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2664
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2665 data = trak->out[NGX_HTTP_MP4_STCO_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2666 entry = (uint32_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2667 end = (uint32_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2668
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2669 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2670 offset = ngx_mp4_get_32value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2671 offset += adjustment;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2672 ngx_mp4_set_32value(entry, offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2673 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2674 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2675 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2676
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2677
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2678 typedef struct {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2679 u_char size[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2680 u_char name[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2681 u_char version[1];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2682 u_char flags[3];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2683 u_char entries[4];
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2684 } ngx_mp4_co64_atom_t;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2685
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2686
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2687 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2688 ngx_http_mp4_read_co64_atom(ngx_http_mp4_file_t *mp4, uint64_t atom_data_size)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2689 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2690 u_char *atom_header, *atom_table, *atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2691 uint32_t entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2692 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2693 ngx_mp4_co64_atom_t *co64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2694 ngx_http_mp4_trak_t *trak;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2695
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2696 /* chunk offsets atom */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2697
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2698 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "mp4 co64 atom");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2699
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2700 atom_header = ngx_mp4_atom_header(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2701 co64_atom = (ngx_mp4_co64_atom_t *) atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2702 ngx_mp4_set_atom_name(co64_atom, 'c', 'o', '6', '4');
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2703
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2704 entries = ngx_mp4_get_32value(co64_atom->entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2705
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2706 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0, "chunks:%uD", entries);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2707
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2708 atom_table = atom_header + sizeof(ngx_mp4_co64_atom_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2709 atom_end = atom_table + entries * sizeof(uint64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2710
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2711 if ((uint64_t) (atom_end - co64_atom->version) > atom_data_size) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2712 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2713 "\"%s\" mp4 co64 atom too large", mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2714 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2715 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2716
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2717 trak = ngx_mp4_last_trak(mp4);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2718 trak->chunks = entries;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2719
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2720 atom = &trak->co64_atom_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2721 atom->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2722 atom->pos = atom_header;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2723 atom->last = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2724
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2725 data = &trak->co64_data_buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2726 data->temporary = 1;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2727 data->pos = atom_table;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2728 data->last = atom_end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2729
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2730 trak->out[NGX_HTTP_MP4_CO64_ATOM].buf = atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2731 trak->out[NGX_HTTP_MP4_CO64_DATA].buf = data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2732
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2733 ngx_mp4_atom_next(mp4, atom_data_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2734
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2735 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2736 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2737
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2738
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2739 static ngx_int_t
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2740 ngx_http_mp4_update_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2741 ngx_http_mp4_trak_t *trak)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2742 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2743 size_t atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2744 ngx_buf_t *atom, *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2745 ngx_mp4_co64_atom_t *co64_atom;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2746
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2747 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2748 * mdia.minf.stbl.co64 updating requires trak->start_chunk
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2749 * from mdia.minf.stbl.stsc which depends on value from mdia.mdhd
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2750 * atom which may reside after mdia.minf
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2751 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2752
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2753 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2754 "mp4 co64 atom update");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2755
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2756 data = trak->out[NGX_HTTP_MP4_CO64_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2757
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2758 if (data == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2759 ngx_log_error(NGX_LOG_ERR, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2760 "no mp4 co64 atoms were found in \"%s\"",
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2761 mp4->file.name.data);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2762 return NGX_ERROR;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2763 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2764
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2765 data->pos += trak->start_chunk * sizeof(uint64_t);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2766 atom_size = sizeof(ngx_mp4_co64_atom_t) + (data->last - data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2767 trak->size += atom_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2768
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2769 trak->start_offset = ngx_mp4_get_64value(data->pos);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2770 trak->start_offset += trak->chunk_samples_size;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2771 ngx_mp4_set_64value(data->pos, trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2772
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2773 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2774 "start chunk offset:%uL", trak->start_offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2775
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2776 atom = trak->out[NGX_HTTP_MP4_CO64_ATOM].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2777 co64_atom = (ngx_mp4_co64_atom_t *) atom->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2778
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2779 ngx_mp4_set_32value(co64_atom->size, atom_size);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2780 ngx_mp4_set_32value(co64_atom->entries, trak->chunks - trak->start_chunk);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2781
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2782 return NGX_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2783 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2784
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2785
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2786 static void
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2787 ngx_http_mp4_adjust_co64_atom(ngx_http_mp4_file_t *mp4,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2788 ngx_http_mp4_trak_t *trak, off_t adjustment)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2789 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2790 uint64_t offset, *entry, *end;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2791 ngx_buf_t *data;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2792
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2793 /*
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2794 * moov.trak.mdia.minf.stbl.co64 adjustment requires
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2795 * minimal start offset of all traks and new moov atom size
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2796 */
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2797
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2798 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, mp4->file.log, 0,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2799 "mp4 co64 atom adjustment");
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2800
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2801 data = trak->out[NGX_HTTP_MP4_CO64_DATA].buf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2802 entry = (uint64_t *) data->pos;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2803 end = (uint64_t *) data->last;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2804
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2805 while (entry < end) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2806 offset = ngx_mp4_get_64value(entry);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2807 offset += adjustment;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2808 ngx_mp4_set_64value(entry, offset);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2809 entry++;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2810 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2811 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2812
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2813
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2814 static char *
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2815 ngx_http_mp4(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2816 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2817 ngx_http_core_loc_conf_t *clcf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2818
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2819 clcf = ngx_http_conf_get_module_loc_conf(cf, ngx_http_core_module);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2820 clcf->handler = ngx_http_mp4_handler;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2821
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2822 return NGX_CONF_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2823 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2824
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2825
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2826 static void *
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2827 ngx_http_mp4_create_conf(ngx_conf_t *cf)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2828 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2829 ngx_http_mp4_conf_t *conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2830
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2831 conf = ngx_palloc(cf->pool, sizeof(ngx_http_mp4_conf_t));
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2832 if (conf == NULL) {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2833 return NULL;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2834 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2835
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2836 conf->buffer_size = NGX_CONF_UNSET_SIZE;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2837 conf->max_buffer_size = NGX_CONF_UNSET_SIZE;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2838
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2839 return conf;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2840 }
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2841
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2842
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2843 static char *
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2844 ngx_http_mp4_merge_conf(ngx_conf_t *cf, void *parent, void *child)
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2845 {
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2846 ngx_http_mp4_conf_t *prev = parent;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2847 ngx_http_mp4_conf_t *conf = child;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2848
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2849 ngx_conf_merge_size_value(conf->buffer_size, prev->buffer_size, 512 * 1024);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2850 ngx_conf_merge_size_value(conf->max_buffer_size, prev->max_buffer_size,
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2851 10 * 1024 * 1024);
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2852
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2853 return NGX_CONF_OK;
432243531ce3 Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2854 }