[NUT-devel] [NUT] (ods15): r87 - /trunk/libnut/muxer.c
syncmail at mplayerhq.hu
syncmail at mplayerhq.hu
Sat Mar 11 10:54:27 CET 2006
Author: ods15
Date: Sat Mar 11 10:54:27 2006
New Revision: 87
Log:
main header frame code generation on the fly...
Modified:
trunk/libnut/muxer.c
Modified: trunk/libnut/muxer.c
==============================================================================
--- trunk/libnut/muxer.c (original)
+++ trunk/libnut/muxer.c Sat Mar 11 10:54:27 2006
@@ -270,43 +270,48 @@
static void put_main_header(nut_context_t * nut) {
output_buffer_t * tmp = clear_buffer(nut->tmp_buffer);
- int i, j, n;
+ int i;
int flag, fields, sflag, timestamp = 0, mul = 1, stream = 0, size, count;
put_v(tmp, NUT_VERSION);
put_v(tmp, nut->stream_count);
put_v(tmp, nut->max_distance);
- for(n=i=0; i < 256; n++) {
- assert(nut->mopts.fti[n].tmp_flag != -1);
- put_v(tmp, flag = nut->mopts.fti[n].tmp_flag);
- put_v(tmp, fields = nut->mopts.fti[n].tmp_fields);
- if (fields > 0) put_v(tmp, sflag = nut->mopts.fti[n].tmp_sflag);
- else sflag = 0;
- if (fields > 1) put_s(tmp, timestamp = nut->mopts.fti[n].tmp_pts);
- if (fields > 2) put_v(tmp, mul = nut->mopts.fti[n].tmp_mul);
- if (fields > 3) put_v(tmp, stream = nut->mopts.fti[n].tmp_stream);
- if (fields > 4) put_v(tmp, size = nut->mopts.fti[n].tmp_size);
- else size = 0;
+ for(i = 0; i < 256; ) {
+ fields = 0;
+ flag = nut->ft[i].flags;
+ if (nut->ft[i].stream_flags != 0) fields = 1;
+ sflag = nut->ft[i].stream_flags;
+ if (nut->ft[i].pts_delta != timestamp) fields = 2;
+ timestamp = nut->ft[i].pts_delta;
+ if (nut->ft[i].mul != mul) fields = 3;
+ mul = nut->ft[i].mul;
+ if (nut->ft[i].stream_plus1 != stream) fields = 4;
+ stream = nut->ft[i].stream_plus1;
+ if (nut->ft[i].lsb != 0) fields = 5;
+ size = nut->ft[i].lsb;
+
+ for (count = 0; i < 256; count++, i++) {
+ if (i == 'N') { count--; continue; }
+ if (nut->ft[i].flags != flag) break;
+ if (nut->ft[i].stream_flags != sflag) break;
+ if (nut->ft[i].stream_plus1 != stream) break;
+ if (nut->ft[i].mul != mul) break;
+ if (nut->ft[i].lsb != size + count) break;
+ if (nut->ft[i].pts_delta != timestamp) break;
+ }
+ if (count != mul - size) fields = 7;
+
+ put_v(tmp, flag);
+ put_v(tmp, fields);
+ if (fields > 0) put_v(tmp, sflag);
+ if (fields > 1) put_s(tmp, timestamp);
+ if (fields > 2) put_v(tmp, mul);
+ if (fields > 3) put_v(tmp, stream);
+ if (fields > 4) put_v(tmp, size);
if (fields > 5) put_v(tmp, 0); // reserved
- if (fields > 6) put_v(tmp, count = nut->mopts.fti[n].count);
- else count = mul - size;
-
- for(j = 0; j < count && i < 256; j++, i++) {
- if (i == 'N') {
- nut->ft[i].flags = INVALID_FLAG;
- j--;
- continue;
- }
- nut->ft[i].flags = flag;
- nut->ft[i].stream_flags = sflag;
- nut->ft[i].stream_plus1 = stream;
- nut->ft[i].mul = mul;
- nut->ft[i].lsb = size + j;
- nut->ft[i].pts_delta = timestamp;
- }
- }
-
- assert(nut->mopts.fti[n].tmp_flag == -1);
+ if (fields > 6) put_v(tmp, count);
+ }
+
put_header(nut->o, tmp, MAIN_STARTCODE, 0);
}
@@ -493,9 +498,40 @@
nut->max_distance = mopts->max_distance;
nut->mopts = *mopts;
- for (i = 0; mopts->fti[i].tmp_flag != -1; i++);
- nut->mopts.fti = malloc(++i * sizeof(frame_table_input_t));
- memcpy(nut->mopts.fti, mopts->fti, i * sizeof(frame_table_input_t));
+ {
+ int j, n;
+ int flag, fields, sflag, timestamp = 0, mul = 1, stream = 0, size, count;
+
+ for(n=i=0; i < 256; n++) {
+ assert(mopts->fti[n].tmp_flag != -1);
+ flag = mopts->fti[n].tmp_flag;
+ fields = mopts->fti[n].tmp_fields;
+ if (fields > 0) sflag = mopts->fti[n].tmp_sflag;
+ else sflag = 0;
+ if (fields > 1) timestamp = mopts->fti[n].tmp_pts;
+ if (fields > 2) mul = mopts->fti[n].tmp_mul;
+ if (fields > 3) stream = mopts->fti[n].tmp_stream;
+ if (fields > 4) size = mopts->fti[n].tmp_size;
+ else size = 0;
+ if (fields > 6) count = mopts->fti[n].count;
+ else count = mul - size;
+
+ for(j = 0; j < count && i < 256; j++, i++) {
+ if (i == 'N') {
+ nut->ft[i].flags = INVALID_FLAG;
+ j--;
+ continue;
+ }
+ nut->ft[i].flags = flag;
+ nut->ft[i].stream_flags = sflag;
+ nut->ft[i].stream_plus1 = stream;
+ nut->ft[i].mul = mul;
+ nut->ft[i].lsb = size + j;
+ nut->ft[i].pts_delta = timestamp;
+ }
+ }
+ assert(mopts->fti[n].tmp_flag == -1);
+ }
nut->sync_overhead = 0;
@@ -610,7 +646,6 @@
free(nut->syncpoints.s);
free(nut->syncpoints.pts);
free(nut->syncpoints.eor);
- free(nut->mopts.fti);
free_buffer(nut->tmp_buffer);
free_buffer(nut->o); // flushes file
More information about the NUT-devel
mailing list