Mercurial > hg > nginx
annotate src/http/modules/ngx_http_mp4_module.c @ 4253:6efec8b1ff52 stable-1.0
Merging r4193, r4194:
Autoindex fixes:
*) Autoindex: escape '?' in file names.
For files with '?' in their names autoindex generated links with '?' not
escaped. This resulted in effectively truncated links as '?' indicates
query string start.
This is an updated version of the patch originally posted at [1]. It
introduces generic NGX_ESCAPE_URI_COMPONENT which escapes everything but
unreserved characters as per RFC 3986. This approach also renders unneeded
special colon processing (as colon is percent-encoded now), it's dropped
accordingly.
[1] http://nginx.org/pipermail/nginx-devel/2010-February/000112.html
*) Autoindex: escape html in file names.
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Tue, 01 Nov 2011 14:09:15 +0000 |
parents | cc7ea429170d |
children | d0dcaff8862b |
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; |
4251 | 1885 start_time = (uint64_t) mp4->start * trak->timescale / 1000; |
4169
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 } |