Mercurial > hg > nginx
annotate src/http/modules/ngx_http_mp4_module.c @ 4367:9c4acdf9b276 stable-1.0
Merge of r4315:
Allowed add_header for proxied 206 replies.
It was working for nginx's own 206 replies as they are seen as 200 in the
headers filter module (range filter goes later in the headers filter chain),
but not for proxied replies.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 14 Dec 2011 18:06:21 +0000 |
parents | d2516d4ab842 |
children | e30845779761 |
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 |
4173
aaa936b2cab5
Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents:
4169
diff
changeset
|
1070 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
|
1071 "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
|
1072 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1073 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
|
1074 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1075 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
|
1076 atom_size = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1077 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
|
1078 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
|
1079 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
|
1080 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1081 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
|
1082 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
|
1083 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1084 |
4289 | 1085 mp4->content_length += atom_header_size + atom_data_size; |
1086 | |
4169
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1087 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
|
1088 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
|
1089 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1090 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
|
1091 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1092 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1093 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
|
1094 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1095 return atom_header_size; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1099 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1100 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1101 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1102 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1103 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1104 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
|
1105 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
|
1106 u_char timescale[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1107 u_char duration[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1108 u_char rate[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1109 u_char volume[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1110 u_char reserved[10]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1111 u_char matrix[36]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1112 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
|
1113 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
|
1114 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
|
1115 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
|
1116 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
|
1117 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
|
1118 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
|
1119 } 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
|
1120 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1121 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1122 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1123 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1124 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1125 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1126 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
|
1127 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
|
1128 u_char timescale[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1129 u_char duration[8]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1130 u_char rate[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1131 u_char volume[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1132 u_char reserved[10]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1133 u_char matrix[36]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1134 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
|
1135 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
|
1136 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
|
1137 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
|
1138 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
|
1139 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
|
1140 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
|
1141 } 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
|
1142 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1143 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1144 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1145 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
|
1146 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1147 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1148 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1149 uint32_t timescale; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1150 uint64_t duration; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1151 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1152 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
|
1153 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
|
1154 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1155 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
|
1156 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1157 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
|
1158 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
|
1159 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
|
1160 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
|
1161 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1162 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
|
1163 /* 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
|
1164 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
|
1165 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
|
1166 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1167 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1168 /* 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
|
1169 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
|
1170 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
|
1171 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1172 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1173 mp4->timescale = timescale; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1174 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1175 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
|
1176 "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
|
1177 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
|
1178 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1179 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
|
1180 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1181 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
|
1182 "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
|
1183 duration, (double) duration / timescale); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1184 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1185 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
|
1186 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
|
1187 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1188 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
|
1189 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
|
1190 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1191 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1192 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
|
1193 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1194 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1195 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
|
1196 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1197 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1198 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
|
1199 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1200 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
|
1201 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1202 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
|
1203 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1204 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1208 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1209 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
|
1210 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1211 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
|
1212 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
|
1213 ngx_int_t rc; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1214 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1215 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
|
1216 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1217 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
|
1218 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1219 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
|
1220 if (trak == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1221 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1224 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
|
1225 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1226 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
|
1227 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
|
1228 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1229 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
|
1230 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1231 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1232 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
|
1233 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1234 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
|
1235 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1236 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
|
1237 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
|
1238 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1239 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
|
1240 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1241 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
|
1242 "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
|
1243 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1244 if (rc == NGX_DECLINED) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1245 /* skip this trak */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1246 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
|
1247 mp4->trak.nelts--; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1248 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
|
1249 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
|
1250 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1253 return rc; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1257 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1258 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
|
1259 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
|
1260 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1261 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1262 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1263 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
|
1264 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
|
1265 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1269 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1270 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
|
1271 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1272 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
|
1273 "\"%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
|
1274 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1275 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1276 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1280 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1281 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1282 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1283 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1284 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1285 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
|
1286 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
|
1287 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
|
1288 u_char reserved1[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1289 u_char duration[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1290 u_char reserved2[8]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1291 u_char layer[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1292 u_char group[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1293 u_char volume[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1294 u_char reverved3[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1295 u_char matrix[36]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1296 u_char width[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1297 u_char heigth[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1298 } 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
|
1299 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1300 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1301 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1302 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1303 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1304 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1305 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
|
1306 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
|
1307 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
|
1308 u_char reserved1[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1309 u_char duration[8]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1310 u_char reserved2[8]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1311 u_char layer[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1312 u_char group[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1313 u_char volume[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1314 u_char reverved3[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1315 u_char matrix[36]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1316 u_char width[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1317 u_char heigth[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1318 } 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
|
1319 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1320 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1321 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1322 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
|
1323 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1324 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1325 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1326 uint64_t duration; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1327 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1328 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
|
1329 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
|
1330 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
|
1331 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1332 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
|
1333 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1334 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
|
1335 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
|
1336 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
|
1337 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
|
1338 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1339 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
|
1340 /* 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
|
1341 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
|
1342 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1343 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1344 /* 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
|
1345 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
|
1346 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1347 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1348 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
|
1349 "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
|
1350 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
|
1351 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1352 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
|
1353 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1354 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
|
1355 "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
|
1356 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
|
1357 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1358 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
|
1359 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1360 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
|
1361 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
|
1362 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1363 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
|
1364 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1365 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
|
1366 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
|
1367 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1368 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1369 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
|
1370 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1371 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1372 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
|
1373 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1374 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1375 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
|
1376 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1377 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
|
1378 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1379 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
|
1380 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1381 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1385 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1386 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
|
1387 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1388 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1389 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1390 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
|
1391 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1392 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
|
1393 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1394 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
|
1395 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
|
1396 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1397 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
|
1398 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1399 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
|
1400 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1401 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1402 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
|
1403 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1404 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
|
1405 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1406 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1410 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1411 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
|
1412 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
|
1413 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1414 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1415 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1416 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
|
1417 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
|
1418 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1422 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1423 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1424 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1425 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1426 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1427 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
|
1428 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
|
1429 u_char timescale[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1430 u_char duration[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1431 u_char language[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1432 u_char quality[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1433 } 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
|
1434 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1435 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1436 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1437 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1438 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1439 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1440 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
|
1441 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
|
1442 u_char timescale[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1443 u_char duration[8]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1444 u_char language[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1445 u_char quality[2]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1446 } 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
|
1447 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1448 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1449 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1450 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
|
1451 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1452 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1453 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1454 uint32_t timescale; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1455 uint64_t duration; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1456 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1457 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
|
1458 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
|
1459 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
|
1460 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1461 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
|
1462 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1463 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
|
1464 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
|
1465 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
|
1466 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
|
1467 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1468 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
|
1469 /* 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
|
1470 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
|
1471 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
|
1472 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1473 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1474 /* 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
|
1475 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
|
1476 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
|
1477 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1478 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1479 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
|
1480 "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
|
1481 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
|
1482 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1483 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
|
1484 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1485 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
|
1486 "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
|
1487 duration, (double) duration / timescale); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1488 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1489 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
|
1490 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1491 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
|
1492 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
|
1493 trak->timescale = timescale; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1494 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1495 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
|
1496 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1497 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
|
1498 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
|
1499 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1500 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1501 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
|
1502 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1503 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1504 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
|
1505 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1506 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1507 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
|
1508 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1509 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
|
1510 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1511 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
|
1512 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1513 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1517 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1518 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
|
1519 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1520 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1521 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1522 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1523 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
|
1524 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1525 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
|
1526 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1527 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
|
1528 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
|
1529 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
|
1530 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
|
1531 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1532 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
|
1533 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1534 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
|
1535 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1536 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1537 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
|
1538 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1539 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
|
1540 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
|
1541 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1542 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
|
1543 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1544 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1548 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1549 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
|
1550 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1551 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1552 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1553 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
|
1554 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1555 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
|
1556 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1557 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
|
1558 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
|
1559 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1560 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
|
1561 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1562 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
|
1563 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1564 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1565 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
|
1566 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1567 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
|
1568 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1569 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1573 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1574 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
|
1575 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
|
1576 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1577 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1578 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1579 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
|
1580 + trak->vmhd_size |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1581 + trak->smhd_size |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1582 + trak->dinf_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1583 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
|
1584 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1588 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1589 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
|
1590 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1591 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1592 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1593 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1594 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
|
1595 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1596 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
|
1597 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1598 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
|
1599 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
|
1600 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
|
1601 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
|
1602 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1603 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
|
1604 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1605 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
|
1606 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1607 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1608 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
|
1609 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1610 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
|
1611 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
|
1612 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1613 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
|
1614 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1615 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1619 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1620 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
|
1621 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1622 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1623 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1624 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1625 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
|
1626 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1627 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
|
1628 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1629 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
|
1630 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
|
1631 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
|
1632 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
|
1633 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1634 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
|
1635 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1636 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
|
1637 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1638 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1639 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
|
1640 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1641 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
|
1642 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
|
1643 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1644 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
|
1645 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1646 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1650 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1651 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
|
1652 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1653 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1654 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1655 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1656 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
|
1657 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1658 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
|
1659 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1660 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
|
1661 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
|
1662 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
|
1663 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
|
1664 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1665 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
|
1666 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1667 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
|
1668 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1669 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1670 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
|
1671 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1672 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
|
1673 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
|
1674 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1675 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
|
1676 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1677 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1681 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1682 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
|
1683 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1684 u_char *atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1685 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1686 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
|
1687 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1688 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
|
1689 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1690 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
|
1691 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
|
1692 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1693 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
|
1694 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1695 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
|
1696 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1697 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1698 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
|
1699 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1700 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
|
1701 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1702 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1706 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1707 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
|
1708 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
|
1709 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1710 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1711 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1712 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
|
1713 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
|
1714 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1718 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1719 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1720 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1721 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1722 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1723 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1724 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1725 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
|
1726 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
|
1727 } 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
|
1728 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1729 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1730 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1731 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
|
1732 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1733 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
|
1734 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1735 ngx_buf_t *atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1736 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
|
1737 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
|
1738 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1739 /* sample description atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1740 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1741 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
|
1742 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1743 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
|
1744 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
|
1745 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
|
1746 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
|
1747 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
|
1748 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
|
1749 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1750 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
|
1751 > atom_data_size) |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1752 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1753 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
|
1754 "\"%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
|
1755 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1756 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1759 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
|
1760 "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
|
1761 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
|
1762 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
|
1763 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1764 /* 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
|
1765 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1766 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
|
1767 && 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
|
1768 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1769 return NGX_DECLINED; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1772 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
|
1773 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1774 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
|
1775 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1776 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1777 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1778 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1779 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
|
1780 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1781 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1782 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
|
1783 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1784 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1788 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1789 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1790 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1791 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1792 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1793 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1794 } 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
|
1795 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1796 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1797 u_char count[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1798 u_char duration[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1799 } 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
|
1800 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1801 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1802 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1803 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
|
1804 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1805 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
|
1806 uint32_t entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1807 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
|
1808 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
|
1809 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
|
1810 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1811 /* time-to-sample atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1812 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1813 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
|
1814 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1815 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
|
1816 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
|
1817 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
|
1818 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1819 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
|
1820 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1821 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
|
1822 "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
|
1823 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1824 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
|
1825 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
|
1826 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1827 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
|
1828 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
|
1829 "\"%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
|
1830 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1831 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1834 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
|
1835 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
|
1836 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1837 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
|
1838 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1839 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1840 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1841 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1842 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
|
1843 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1844 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1845 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1846 |
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_ATOM].buf = atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1848 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
|
1849 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1850 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
|
1851 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1852 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1856 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1857 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
|
1858 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
|
1859 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1860 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1861 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
|
1862 uint64_t start_time; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1863 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
|
1864 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
|
1865 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
|
1866 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
|
1867 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1868 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1869 * 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
|
1870 * 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
|
1871 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1872 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1873 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
|
1874 "mp4 stts atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1875 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1876 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
|
1877 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1878 if (data == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1879 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
|
1880 "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
|
1881 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1882 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1885 entries = trak->time_to_sample_entries; |
4251 | 1886 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
|
1887 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1888 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
|
1889 "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
|
1890 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1891 start_sample = 0; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1892 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
|
1893 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
|
1894 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1895 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1896 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
|
1897 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
|
1898 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1899 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
|
1900 "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
|
1901 |
4365 | 1902 if (start_time < (uint64_t) count * duration) { |
4169
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1903 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
|
1904 count -= start_sample; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1905 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
|
1906 goto found; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1909 start_sample += count; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1910 start_time -= count * duration; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1911 entries--; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1912 entry++; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1915 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
|
1916 "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
|
1917 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1918 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1919 return NGX_ERROR; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1920 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1921 found: |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1922 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1923 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
|
1924 "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
|
1925 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1926 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
|
1927 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1928 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
|
1929 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
|
1930 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1931 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1932 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
|
1933 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
|
1934 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
|
1935 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
|
1936 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1937 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1941 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1942 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1943 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1944 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1945 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1946 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1947 } 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
|
1948 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1949 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1950 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1951 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
|
1952 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1953 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
|
1954 uint32_t entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1955 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
|
1956 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
|
1957 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
|
1958 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1959 /* sync samples atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1960 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1961 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
|
1962 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1963 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
|
1964 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
|
1965 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
|
1966 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1967 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
|
1968 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1969 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
|
1970 "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
|
1971 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1972 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
|
1973 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
|
1974 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1975 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
|
1976 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1977 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
|
1978 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1979 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1980 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1981 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1982 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
|
1983 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1984 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
|
1985 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
|
1986 "\"%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
|
1987 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1990 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
|
1991 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1992 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1993 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1994 |
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_ATOM].buf = atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1996 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
|
1997 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
1998 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
|
1999 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2000 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2004 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2005 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
|
2006 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
|
2007 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2008 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2009 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
|
2010 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
|
2011 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
|
2012 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2013 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2014 * 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
|
2015 * 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
|
2016 * 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
|
2017 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2018 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2019 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
|
2020 "mp4 stss atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2021 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2022 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
|
2023 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2024 if (data == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2025 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2028 /* 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
|
2029 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
|
2030 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
|
2031 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2032 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
|
2033 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
|
2034 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2035 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2036 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
|
2037 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2038 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
|
2039 "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
|
2040 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2041 if (sample >= start_sample) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2042 goto found; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2045 entries--; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2046 entry++; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2049 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
|
2050 "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
|
2051 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2052 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2053 return NGX_ERROR; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2054 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2055 found: |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2056 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2057 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
|
2058 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2059 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
|
2060 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2061 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2062 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
|
2063 sample -= start_sample; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2064 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
|
2065 entry++; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2068 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
|
2069 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2070 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2071 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
|
2072 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
|
2073 |
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->size, atom_size); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2075 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
|
2076 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2077 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2081 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2082 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2083 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2084 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2085 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2086 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2087 } 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
|
2088 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2089 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2090 u_char count[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2091 u_char offset[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2092 } 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
|
2093 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2094 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2095 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2096 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
|
2097 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2098 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
|
2099 uint32_t entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2100 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
|
2101 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
|
2102 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
|
2103 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2104 /* composition offsets atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2105 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2106 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
|
2107 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2108 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
|
2109 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
|
2110 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
|
2111 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2112 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
|
2113 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2114 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
|
2115 "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
|
2116 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2117 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
|
2118 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
|
2119 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2120 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
|
2121 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2122 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
|
2123 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2124 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2125 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2126 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2127 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
|
2128 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2129 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
|
2130 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
|
2131 "\"%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
|
2132 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2135 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
|
2136 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2137 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2138 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2139 |
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_ATOM].buf = atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2141 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
|
2142 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2143 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
|
2144 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2145 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2149 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2150 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
|
2151 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
|
2152 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2153 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2154 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
|
2155 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
|
2156 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
|
2157 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
|
2158 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2159 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2160 * 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
|
2161 * 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
|
2162 * 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
|
2163 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2164 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2165 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
|
2166 "mp4 ctts atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2167 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2168 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
|
2169 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2170 if (data == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2171 return; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2174 /* 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
|
2175 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
|
2176 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
|
2177 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
|
2178 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
|
2179 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2180 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2181 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
|
2182 |
4173
aaa936b2cab5
Merging r4089 missed in r4170 merge.
Igor Sysoev <igor@sysoev.ru>
parents:
4169
diff
changeset
|
2183 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
|
2184 "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
|
2185 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
|
2186 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2187 if (start_sample <= count) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2188 count -= (start_sample - 1); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2189 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
|
2190 goto found; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2193 start_sample -= count; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2194 entries--; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2195 entry++; |
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 |
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_ATOM].buf = NULL; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2199 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
|
2200 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2201 return; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2202 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2203 found: |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2204 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2205 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
|
2206 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
|
2207 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2208 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2209 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
|
2210 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
|
2211 |
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->size, atom_size); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2213 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
|
2214 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2215 return; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2219 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2220 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2221 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2222 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2223 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2224 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2225 } 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
|
2226 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2227 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2228 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2229 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
|
2230 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2231 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
|
2232 uint32_t entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2233 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
|
2234 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
|
2235 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
|
2236 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2237 /* sample-to-chunk atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2238 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2239 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
|
2240 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2241 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
|
2242 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
|
2243 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
|
2244 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2245 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
|
2246 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2247 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
|
2248 "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
|
2249 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2250 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
|
2251 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
|
2252 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2253 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
|
2254 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
|
2255 "\"%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
|
2256 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2257 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2260 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
|
2261 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
|
2262 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2263 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
|
2264 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2265 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2266 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2267 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2268 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
|
2269 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2270 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2271 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2272 |
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_ATOM].buf = atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2274 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
|
2275 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2276 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
|
2277 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2278 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2282 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2283 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
|
2284 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
|
2285 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2286 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2287 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
|
2288 next_chunk, n; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2289 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
|
2290 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
|
2291 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
|
2292 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2293 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2294 * 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
|
2295 * 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
|
2296 * 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
|
2297 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2298 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2299 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
|
2300 "mp4 stsc atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2301 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2302 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
|
2303 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2304 if (data == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2305 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
|
2306 "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
|
2307 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2308 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2311 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
|
2312 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
|
2313 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2314 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
|
2315 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
|
2316 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2317 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
|
2318 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
|
2319 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
|
2320 entry++; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2321 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2322 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2323 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2324 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
|
2325 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2326 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
|
2327 "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
|
2328 "samples:%uD, id:%uD", |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2329 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
|
2330 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2331 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
|
2332 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2333 if (start_sample <= n) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2334 goto found; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2337 start_sample -= n; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2338 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2339 chunk = next_chunk; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2340 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
|
2341 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
|
2342 entries--; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2343 entry++; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2346 next_chunk = trak->chunks; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2347 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2348 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
|
2349 "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
|
2350 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
|
2351 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2352 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
|
2353 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2354 if (start_sample > n) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2355 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
|
2356 "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
|
2357 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2358 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2361 found: |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2362 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2363 entries++; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2364 entry--; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2365 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2366 if (samples == 0) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2367 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
|
2368 "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
|
2369 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2370 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2373 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
|
2374 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2375 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
|
2376 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
|
2377 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2378 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
|
2379 "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
|
2380 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
|
2381 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2382 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
|
2383 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
|
2384 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2385 if (trak->chunk_samples) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2386 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2387 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
|
2388 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
|
2389 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
|
2390 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
|
2391 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2392 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
|
2393 buf->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2394 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
|
2395 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
|
2396 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2397 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
|
2398 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2399 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
|
2400 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2401 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
|
2402 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2403 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2404 while (++entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2405 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
|
2406 chunk -= trak->start_chunk; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2407 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
|
2408 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2409 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2410 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2411 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2412 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
|
2413 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
|
2414 |
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->size, atom_size); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2416 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
|
2417 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2418 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2422 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2423 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2424 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2425 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2426 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2427 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
|
2428 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2429 } 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
|
2430 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2431 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2432 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2433 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
|
2434 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2435 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
|
2436 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2437 uint32_t entries, size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2438 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
|
2439 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
|
2440 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
|
2441 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2442 /* sample sizes atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2443 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2444 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
|
2445 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2446 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
|
2447 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
|
2448 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
|
2449 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2450 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
|
2451 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
|
2452 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2453 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
|
2454 "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
|
2455 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2456 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
|
2457 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
|
2458 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2459 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
|
2460 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2461 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
|
2462 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2463 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2464 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2465 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2466 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
|
2467 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2468 if (size == 0) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2469 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
|
2470 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2471 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
|
2472 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
|
2473 "\"%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
|
2474 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2475 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2478 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
|
2479 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2480 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2481 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2482 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2483 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
|
2484 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2485 } else { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2486 /* 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
|
2487 /* TODO : chunk samples */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2488 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
|
2489 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
|
2490 trak->size += atom_size; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2493 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
|
2494 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2495 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2499 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2500 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
|
2501 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
|
2502 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2503 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2504 uint32_t *pos, *end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2505 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
|
2506 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
|
2507 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2508 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2509 * 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
|
2510 * 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
|
2511 * 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
|
2512 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2513 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2514 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
|
2515 "mp4 stsz atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2516 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2517 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
|
2518 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2519 if (data) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2520 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
|
2521 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
|
2522 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2523 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
|
2524 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
|
2525 } |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2526 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2527 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
|
2528 "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
|
2529 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2530 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
|
2531 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2532 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2533 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
|
2534 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
|
2535 |
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->size, atom_size); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2537 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
|
2538 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
|
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2543 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2544 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2545 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2546 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2547 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2548 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2549 } 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
|
2550 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2551 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2552 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2553 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
|
2554 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2555 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
|
2556 uint32_t entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2557 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
|
2558 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
|
2559 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
|
2560 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2561 /* chunk offsets atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2562 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2563 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
|
2564 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2565 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
|
2566 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
|
2567 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
|
2568 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2569 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
|
2570 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2571 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
|
2572 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2573 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
|
2574 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
|
2575 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2576 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
|
2577 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
|
2578 "\"%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
|
2579 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2582 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
|
2583 trak->chunks = entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2584 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2585 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
|
2586 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2587 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2588 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2589 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2590 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
|
2591 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2592 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2593 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2594 |
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_ATOM].buf = atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2596 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
|
2597 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2598 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
|
2599 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2600 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2604 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2605 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
|
2606 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
|
2607 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2608 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2609 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
|
2610 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
|
2611 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2612 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2613 * 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
|
2614 * 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
|
2615 * 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
|
2616 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2617 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2618 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
|
2619 "mp4 stco atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2620 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2621 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
|
2622 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2623 if (data == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2624 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
|
2625 "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
|
2626 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2627 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2630 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
|
2631 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
|
2632 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2633 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2634 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
|
2635 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
|
2636 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
|
2637 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2638 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
|
2639 "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
|
2640 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2641 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
|
2642 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
|
2643 |
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->size, atom_size); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2645 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
|
2646 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2647 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2651 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2652 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
|
2653 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
|
2654 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2655 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
|
2656 ngx_buf_t *data; |
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 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2659 * 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
|
2660 * 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
|
2661 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2662 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2663 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
|
2664 "mp4 stco atom adjustment"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2665 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2666 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
|
2667 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
|
2668 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
|
2669 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2670 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2671 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
|
2672 offset += adjustment; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2673 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
|
2674 entry++; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2679 typedef struct { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2680 u_char size[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2681 u_char name[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2682 u_char version[1]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2683 u_char flags[3]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2684 u_char entries[4]; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2685 } 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
|
2686 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2687 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2688 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2689 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
|
2690 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2691 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
|
2692 uint32_t entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2693 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
|
2694 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
|
2695 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
|
2696 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2697 /* chunk offsets atom */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2698 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2699 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
|
2700 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2701 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
|
2702 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
|
2703 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
|
2704 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2705 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
|
2706 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2707 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
|
2708 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2709 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
|
2710 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
|
2711 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2712 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
|
2713 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
|
2714 "\"%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
|
2715 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2718 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
|
2719 trak->chunks = entries; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2720 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2721 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
|
2722 atom->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2723 atom->pos = atom_header; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2724 atom->last = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2725 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2726 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
|
2727 data->temporary = 1; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2728 data->pos = atom_table; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2729 data->last = atom_end; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2730 |
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_ATOM].buf = atom; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2732 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
|
2733 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2734 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
|
2735 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2736 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2740 static ngx_int_t |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2741 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
|
2742 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
|
2743 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2744 size_t atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2745 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
|
2746 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
|
2747 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2748 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2749 * 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
|
2750 * 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
|
2751 * 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
|
2752 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2753 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2754 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
|
2755 "mp4 co64 atom update"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2756 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2757 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
|
2758 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2759 if (data == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2760 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
|
2761 "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
|
2762 mp4->file.name.data); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2763 return NGX_ERROR; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2766 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
|
2767 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
|
2768 trak->size += atom_size; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2769 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2770 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
|
2771 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
|
2772 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
|
2773 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2774 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
|
2775 "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
|
2776 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2777 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
|
2778 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
|
2779 |
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->size, atom_size); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2781 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
|
2782 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2783 return NGX_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2787 static void |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2788 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
|
2789 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
|
2790 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2791 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
|
2792 ngx_buf_t *data; |
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 /* |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2795 * 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
|
2796 * 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
|
2797 */ |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2798 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2799 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
|
2800 "mp4 co64 atom adjustment"); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2801 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2802 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
|
2803 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
|
2804 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
|
2805 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2806 while (entry < end) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2807 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
|
2808 offset += adjustment; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2809 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
|
2810 entry++; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2815 static char * |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2816 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
|
2817 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2818 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
|
2819 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2820 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
|
2821 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
|
2822 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2823 return NGX_CONF_OK; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2827 static void * |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2828 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
|
2829 { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2830 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
|
2831 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2832 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
|
2833 if (conf == NULL) { |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2834 return NULL; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2837 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
|
2838 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
|
2839 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2840 return conf; |
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 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2844 static char * |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2845 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
|
2846 { |
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 *prev = parent; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2848 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
|
2849 |
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->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
|
2851 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
|
2852 10 * 1024 * 1024); |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2853 |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2854 return NGX_CONF_OK; |
432243531ce3
Merging r4086, r4087, r4088, r4090, r4094, r4095, r4096, r4097, r4099, r4100,
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
2855 } |