Skip to content

Commit 8143cce

Browse files
committed
[dev] merge branch 'endian'.
2 parents 13a5fe7 + cf4e05e commit 8143cce

12 files changed

+180
-186
lines changed

hls/ngx_rtmp_hls_module.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@ ngx_rtmp_hls_append_sps_pps(ngx_rtmp_session_t *s, ngx_buf_t *out)
745745
return NGX_ERROR;
746746
}
747747

748-
ngx_rtmp_rmemcpy(&len, &rlen, 2);
748+
len = ntohs(rlen);
749749

750750
ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
751751
"hls: header NAL length: %uz", (size_t) len);
@@ -1948,8 +1948,17 @@ ngx_rtmp_hls_video(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
19481948
return NGX_OK;
19491949
}
19501950

1951-
len = 0;
1952-
ngx_rtmp_rmemcpy(&len, &rlen, nal_bytes);
1951+
if (nal_bytes != 3 && nal_bytes != 4) {
1952+
ngx_log_error(NGX_LOG_ERR, s->connection->log, 0,
1953+
"hls: incorrect NAL start code length");
1954+
return NGX_ERROR;
1955+
}
1956+
1957+
if (nal_bytes == 3) {
1958+
len = ngx_rtmp_n3_to_h4((u_char *) &rlen);
1959+
} else {
1960+
len = ntohl(rlen);
1961+
}
19531962

19541963
if (len == 0) {
19551964
continue;

ngx_http_flv_live_module.c

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2250,7 +2250,7 @@ ngx_http_flv_live_append_shared_bufs(ngx_rtmp_core_srv_conf_t *cscf,
22502250
{
22512251
ngx_chain_t *tag, *chunk_head, *chunk_tail, chunk,
22522252
*iter, *last_in, **tail, prev_tag_size;
2253-
u_char *pos, *p,
2253+
u_char *pos,
22542254
#if !(NGX_WIN32)
22552255
chunk_item[ngx_strlen("0000000000000000" CRLF) + 1];
22562256
#else
@@ -2279,11 +2279,8 @@ ngx_http_flv_live_append_shared_bufs(ngx_rtmp_core_srv_conf_t *cscf,
22792279
prev_tag_size_buf.last = prev_tag_size_buf.end;
22802280

22812281
pos = prev_tag_size_buf.pos;
2282-
p = (u_char *) &tag_size;
2283-
*pos++ = p[3];
2284-
*pos++ = p[2];
2285-
*pos++ = p[1];
2286-
*pos++ = p[0];
2282+
*(uint32_t *) pos = htonl(tag_size);
2283+
pos += 4;
22872284

22882285
/* ngx_rtmp_alloc_shared_buf returns the memory:
22892286
* |4B|sizeof(ngx_chain_t)|sizeof(ngx_buf_t)|NGX_RTMP_MAX_CHUNK_HEADER|
@@ -2305,17 +2302,13 @@ ngx_http_flv_live_append_shared_bufs(ngx_rtmp_core_srv_conf_t *cscf,
23052302
*pos++ = (u_char) (h->type & 0x1f);
23062303

23072304
/* data length, 3B */
2308-
p = (u_char *) &data_size;
2309-
*pos++ = p[2];
2310-
*pos++ = p[1];
2311-
*pos++ = p[0];
2305+
ngx_rtmp_h4_to_n3(pos, data_size);
2306+
pos += 3;
23122307

23132308
/* timestamp, 3B + ext, 1B */
2314-
p = (u_char *) &h->timestamp;
2315-
*pos++ = p[2];
2316-
*pos++ = p[1];
2317-
*pos++ = p[0];
2318-
*pos++ = p[3];
2309+
ngx_rtmp_h4_to_n3(pos, h->timestamp);
2310+
pos += 3;
2311+
*pos++ = (u_char) (h->timestamp >> 24);
23192312

23202313
/* streamId, 3B, always be 0 */
23212314
*pos++ = 0;

ngx_rtmp.c

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,6 +1097,24 @@ ngx_rtmp_rmemcpy(void *dst, const void* src, size_t n)
10971097
}
10981098

10991099

1100+
u_char *
1101+
ngx_rtmp_h4_to_n3(u_char *dst, uint32_t h)
1102+
{
1103+
dst[0] = (u_char) (h >> 16);
1104+
dst[1] = (u_char) (h >> 8);
1105+
dst[2] = (u_char) h;
1106+
1107+
return dst;
1108+
}
1109+
1110+
1111+
uint32_t
1112+
ngx_rtmp_n3_to_h4(u_char *n)
1113+
{
1114+
return ((uint32_t) n[0] << 16) | ((uint32_t) n[1] << 8) | (uint32_t) n[2];
1115+
}
1116+
1117+
11001118
static ngx_int_t
11011119
ngx_rtmp_init_process(ngx_cycle_t *cycle)
11021120
{

ngx_rtmp.h

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -584,12 +584,12 @@ typedef struct {
584584

585585

586586
#ifdef NGX_DEBUG
587-
char* ngx_rtmp_message_type(uint8_t type);
588-
char* ngx_rtmp_user_message_type(uint16_t evt);
587+
char *ngx_rtmp_message_type(uint8_t type);
588+
char *ngx_rtmp_user_message_type(uint16_t evt);
589589
#endif
590590

591591
void ngx_rtmp_init_connection(ngx_connection_t *c);
592-
ngx_rtmp_session_t * ngx_rtmp_init_session(ngx_connection_t *c,
592+
ngx_rtmp_session_t *ngx_rtmp_init_session(ngx_connection_t *c,
593593
ngx_rtmp_addr_conf_t *addr_conf);
594594
void ngx_rtmp_finalize_session(ngx_rtmp_session_t *s);
595595
void ngx_rtmp_handshake(ngx_rtmp_session_t *s);
@@ -602,38 +602,49 @@ ngx_chain_t *ngx_rtmp_alloc_in_buf(ngx_rtmp_session_t *s);
602602
ngx_int_t ngx_rtmp_finalize_set_chunk_size(ngx_rtmp_session_t *s);
603603

604604
ngx_int_t ngx_rtmp_fire_event(ngx_rtmp_session_t *s, ngx_uint_t evt,
605-
ngx_rtmp_header_t *h, ngx_chain_t *in);
605+
ngx_rtmp_header_t *h, ngx_chain_t *in);
606606

607607

608608
ngx_int_t ngx_rtmp_set_chunk_size(ngx_rtmp_session_t *s, ngx_uint_t size);
609609

610610

611611
/* Bit reverse: we need big-endians in many places */
612-
void * ngx_rtmp_rmemcpy(void *dst, const void* src, size_t n);
613-
614-
#define ngx_rtmp_rcpymem(dst, src, n) \
615-
(((u_char*)ngx_rtmp_rmemcpy(dst, src, n)) + (n))
612+
void *ngx_rtmp_rmemcpy(void *dst, const void *src, size_t n);
613+
u_char *ngx_rtmp_h4_to_n3(u_char *dst, uint32_t h);
614+
uint32_t ngx_rtmp_n3_to_h4(u_char *n);
616615

617616

618617
static ngx_inline uint16_t
619618
ngx_rtmp_r16(uint16_t n)
620619
{
620+
#if (NGX_HAVE_LITTLE_ENDIAN)
621621
return (n << 8) | (n >> 8);
622+
#else
623+
return n;
624+
#endif
622625
}
623626

624627

625628
static ngx_inline uint32_t
626629
ngx_rtmp_r32(uint32_t n)
627630
{
631+
#if (NGX_HAVE_LITTLE_ENDIAN)
628632
return (n << 24) | ((n << 8) & 0xff0000) | ((n >> 8) & 0xff00) | (n >> 24);
633+
#else
634+
return n;
635+
#endif
629636
}
630637

631638

632639
static ngx_inline uint64_t
633640
ngx_rtmp_r64(uint64_t n)
634641
{
642+
#if (NGX_HAVE_LITTLE_ENDIAN)
635643
return (uint64_t) ngx_rtmp_r32((uint32_t) n) << 32 |
636644
ngx_rtmp_r32((uint32_t) (n >> 32));
645+
#else
646+
return n;
647+
#endif
637648
}
638649

639650

@@ -671,10 +682,10 @@ ngx_int_t ngx_rtmp_amf_shared_object_handler(ngx_rtmp_session_t *s,
671682
#define ngx_rtmp_ref_put(b) \
672683
--ngx_rtmp_ref(b)
673684

674-
ngx_chain_t * ngx_rtmp_alloc_shared_buf(ngx_rtmp_core_srv_conf_t *cscf);
685+
ngx_chain_t *ngx_rtmp_alloc_shared_buf(ngx_rtmp_core_srv_conf_t *cscf);
675686
void ngx_rtmp_free_shared_chain(ngx_rtmp_core_srv_conf_t *cscf,
676687
ngx_chain_t *in);
677-
ngx_chain_t * ngx_rtmp_append_shared_bufs(ngx_rtmp_core_srv_conf_t *cscf,
688+
ngx_chain_t *ngx_rtmp_append_shared_bufs(ngx_rtmp_core_srv_conf_t *cscf,
678689
ngx_chain_t *head, ngx_chain_t *in);
679690

680691
#define ngx_rtmp_acquire_shared_chain(in) \
@@ -697,15 +708,15 @@ ngx_int_t ngx_rtmp_send_message(ngx_rtmp_session_t *s, ngx_chain_t *out,
697708
#define NGX_RTMP_LIMIT_DYNAMIC 2
698709

699710
/* Protocol control messages */
700-
ngx_chain_t * ngx_rtmp_create_chunk_size(ngx_rtmp_session_t *s,
711+
ngx_chain_t *ngx_rtmp_create_chunk_size(ngx_rtmp_session_t *s,
701712
uint32_t chunk_size);
702-
ngx_chain_t * ngx_rtmp_create_abort(ngx_rtmp_session_t *s,
713+
ngx_chain_t *ngx_rtmp_create_abort(ngx_rtmp_session_t *s,
703714
uint32_t csid);
704-
ngx_chain_t * ngx_rtmp_create_ack(ngx_rtmp_session_t *s,
715+
ngx_chain_t *ngx_rtmp_create_ack(ngx_rtmp_session_t *s,
705716
uint32_t seq);
706-
ngx_chain_t * ngx_rtmp_create_ack_size(ngx_rtmp_session_t *s,
717+
ngx_chain_t *ngx_rtmp_create_ack_size(ngx_rtmp_session_t *s,
707718
uint32_t ack_size);
708-
ngx_chain_t * ngx_rtmp_create_bandwidth(ngx_rtmp_session_t *s,
719+
ngx_chain_t *ngx_rtmp_create_bandwidth(ngx_rtmp_session_t *s,
709720
uint32_t ack_size, uint8_t limit_type);
710721

711722
ngx_int_t ngx_rtmp_send_chunk_size(ngx_rtmp_session_t *s,
@@ -720,19 +731,19 @@ ngx_int_t ngx_rtmp_send_bandwidth(ngx_rtmp_session_t *s,
720731
uint32_t ack_size, uint8_t limit_type);
721732

722733
/* User control messages */
723-
ngx_chain_t * ngx_rtmp_create_stream_begin(ngx_rtmp_session_t *s,
734+
ngx_chain_t *ngx_rtmp_create_stream_begin(ngx_rtmp_session_t *s,
724735
uint32_t msid);
725-
ngx_chain_t * ngx_rtmp_create_stream_eof(ngx_rtmp_session_t *s,
736+
ngx_chain_t *ngx_rtmp_create_stream_eof(ngx_rtmp_session_t *s,
726737
uint32_t msid);
727-
ngx_chain_t * ngx_rtmp_create_stream_dry(ngx_rtmp_session_t *s,
738+
ngx_chain_t *ngx_rtmp_create_stream_dry(ngx_rtmp_session_t *s,
728739
uint32_t msid);
729-
ngx_chain_t * ngx_rtmp_create_set_buflen(ngx_rtmp_session_t *s,
740+
ngx_chain_t *ngx_rtmp_create_set_buflen(ngx_rtmp_session_t *s,
730741
uint32_t msid, uint32_t buflen_msec);
731-
ngx_chain_t * ngx_rtmp_create_recorded(ngx_rtmp_session_t *s,
742+
ngx_chain_t *ngx_rtmp_create_recorded(ngx_rtmp_session_t *s,
732743
uint32_t msid);
733-
ngx_chain_t * ngx_rtmp_create_ping_request(ngx_rtmp_session_t *s,
744+
ngx_chain_t *ngx_rtmp_create_ping_request(ngx_rtmp_session_t *s,
734745
uint32_t timestamp);
735-
ngx_chain_t * ngx_rtmp_create_ping_response(ngx_rtmp_session_t *s,
746+
ngx_chain_t *ngx_rtmp_create_ping_response(ngx_rtmp_session_t *s,
736747
uint32_t timestamp);
737748

738749
ngx_int_t ngx_rtmp_send_stream_begin(ngx_rtmp_session_t *s,
@@ -757,22 +768,22 @@ ngx_int_t ngx_rtmp_append_amf(ngx_rtmp_session_t *s,
757768
ngx_int_t ngx_rtmp_receive_amf(ngx_rtmp_session_t *s, ngx_chain_t *in,
758769
ngx_rtmp_amf_elt_t *elts, size_t nelts);
759770

760-
ngx_chain_t * ngx_rtmp_create_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
771+
ngx_chain_t *ngx_rtmp_create_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
761772
ngx_rtmp_amf_elt_t *elts, size_t nelts);
762773
ngx_int_t ngx_rtmp_send_amf(ngx_rtmp_session_t *s, ngx_rtmp_header_t *h,
763774
ngx_rtmp_amf_elt_t *elts, size_t nelts);
764775

765776
/* AMF status sender */
766-
ngx_chain_t * ngx_rtmp_create_status(ngx_rtmp_session_t *s, char *code,
767-
char* level, char *desc);
768-
ngx_chain_t * ngx_rtmp_create_play_status(ngx_rtmp_session_t *s, char *code,
769-
char* level, ngx_uint_t duration, ngx_uint_t bytes);
770-
ngx_chain_t * ngx_rtmp_create_sample_access(ngx_rtmp_session_t *s);
777+
ngx_chain_t *ngx_rtmp_create_status(ngx_rtmp_session_t *s, char *code,
778+
char *level, char *desc);
779+
ngx_chain_t *ngx_rtmp_create_play_status(ngx_rtmp_session_t *s, char *code,
780+
char *level, ngx_uint_t duration, ngx_uint_t bytes);
781+
ngx_chain_t *ngx_rtmp_create_sample_access(ngx_rtmp_session_t *s);
771782

772783
ngx_int_t ngx_rtmp_send_status(ngx_rtmp_session_t *s, char *code,
773-
char* level, char *desc);
784+
char *level, char *desc);
774785
ngx_int_t ngx_rtmp_send_play_status(ngx_rtmp_session_t *s, char *code,
775-
char* level, ngx_uint_t duration, ngx_uint_t bytes);
786+
char *level, ngx_uint_t duration, ngx_uint_t bytes);
776787
ngx_int_t ngx_rtmp_send_sample_access(ngx_rtmp_session_t *s);
777788

778789

ngx_rtmp_amf.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,15 @@
1515
static ngx_inline void*
1616
ngx_rtmp_amf_reverse_copy(void *dst, void* src, size_t len)
1717
{
18-
size_t k;
19-
2018
if (dst == NULL || src == NULL) {
2119
return NULL;
2220
}
2321

24-
for(k = 0; k < len; ++k) {
25-
((u_char*)dst)[k] = ((u_char*)src)[len - 1 - k];
26-
}
22+
#if (NGX_HAVE_LITTLE_ENDIAN)
23+
ngx_rtmp_rmemcpy(dst, src, len);
24+
#else
25+
ngx_memcpy(dst, src, len);
26+
#endif
2727

2828
return dst;
2929
}

ngx_rtmp_bitop.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ uint64_t ngx_rtmp_bit_read_golomb(ngx_rtmp_bit_reader_t *br);
4040
((uint32_t) ngx_rtmp_bit_read(br, 32))
4141

4242
#define ngx_rtmp_bit_read_64(br) \
43-
((uint64_t) ngx_rtmp_read(br, 64))
43+
((uint64_t) ngx_rtmp_bit_read(br, 64))
4444

4545

4646
#endif /* _NGX_RTMP_BITOP_H_INCLUDED_ */

ngx_rtmp_flv_module.c

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
/*
33
* Copyright (C) Roman Arutyunyan
4+
* Copyright (C) Winshining
45
*/
56

67

@@ -102,7 +103,7 @@ ngx_rtmp_flv_fill_index(ngx_rtmp_amf_ctx_t *ctx, ngx_rtmp_flv_index_t *idx)
102103
return NGX_ERROR;
103104
}
104105

105-
ngx_rtmp_rmemcpy(&nelts, b->pos + ctx->offset, 4);
106+
nelts = htonl(*(uint32_t *) (b->pos + ctx->offset));
106107

107108
idx->nelts = nelts;
108109
idx->offset = ctx->offset + 4;
@@ -201,11 +202,7 @@ ngx_rtmp_flv_init_index(ngx_rtmp_session_t *s, ngx_chain_t *in)
201202
static double
202203
ngx_rtmp_flv_index_value(void *src)
203204
{
204-
double v;
205-
206-
ngx_rtmp_rmemcpy(&v, src, 8);
207-
208-
return v;
205+
return *(double *) src;
209206
}
210207

211208

@@ -352,8 +349,7 @@ ngx_rtmp_flv_read_meta(ngx_rtmp_session_t *s, ngx_file_t *f)
352349
h.msid = NGX_RTMP_MSID;
353350
h.csid = NGX_RTMP_CSID_AMF;
354351

355-
size = 0;
356-
ngx_rtmp_rmemcpy(&size, ngx_rtmp_flv_header + 1, 3);
352+
size = ngx_rtmp_n3_to_h4(ngx_rtmp_flv_header + 1);
357353

358354
ngx_log_debug1(NGX_LOG_DEBUG_RTMP, s->connection->log, 0,
359355
"flv: metadata size=%D", size);
@@ -440,12 +436,9 @@ ngx_rtmp_flv_send(ngx_rtmp_session_t *s, ngx_file_t *f, ngx_uint_t *ts)
440436
h.msid = NGX_RTMP_MSID;
441437
h.type = ngx_rtmp_flv_header[0];
442438

443-
size = 0;
444-
445-
ngx_rtmp_rmemcpy(&size, ngx_rtmp_flv_header + 1, 3);
446-
ngx_rtmp_rmemcpy(&h.timestamp, ngx_rtmp_flv_header + 4, 3);
447-
448-
((u_char *) &h.timestamp)[3] = ngx_rtmp_flv_header[7];
439+
size = ngx_rtmp_n3_to_h4(ngx_rtmp_flv_header + 1);
440+
h.timestamp = ngx_rtmp_n3_to_h4(ngx_rtmp_flv_header + 4);
441+
h.timestamp |= ((uint32_t) ngx_rtmp_flv_header[7] << 24);
449442

450443
ctx->offset += (sizeof(ngx_rtmp_flv_header) + size + 4);
451444

0 commit comments

Comments
 (0)