Correct broken rcwt

Signed-off-by: Anshul Maheshwari <er.anshul.maheshwari@gmail.com>
This commit is contained in:
Anshul Maheshwari 2015-06-17 16:23:33 +05:30
parent 1d03bd7d13
commit beccc3d5b7
3 changed files with 26 additions and 5 deletions

View File

@ -667,6 +667,11 @@ int main(int argc, char *argv[])
{ {
// Write last header and data // Write last header and data
writercwtdata (dec_ctx, NULL, &dec_sub); writercwtdata (dec_ctx, NULL, &dec_sub);
if (dec_sub.got_output)
{
encode_sub(enc_ctx,&dec_sub);
dec_sub.got_output = 0;
}
} }
dinit_encoder(enc_ctx); dinit_encoder(enc_ctx);
} }

View File

@ -564,6 +564,14 @@ int encode_sub(struct encoder_ctx *context, struct cc_subtitle *sub)
} }
} }
if (sub->type == CC_RAW)
{
if (context->send_to_srv)
net_send_header(sub->data, sub->nb_data);
else
write(context->out->fh, sub->data, sub->nb_data);
sub->nb_data = 0;
}
if (!sub->nb_data) if (!sub->nb_data)
freep(&sub->data); freep(&sub->data);
return wrote_something; return wrote_something;

View File

@ -23,9 +23,17 @@ int writeraw (const unsigned char *data, int length, void *private_data, struct
if (data==NULL) if (data==NULL)
return -1; return -1;
/* TODO dont write directly to file instead follow complete path and write raw data in sub and in above sub->data = realloc(sub->data,length + sub->nb_data);
layer choose whether u want to write it to file or not */ if (!sub->data)
write (context->out->fh, data, length); return EXIT_NOT_ENOUGH_MEMORY;
memcpy(sub->data + sub->nb_data, data, length);
sub->got_output = 1;
sub->nb_data += length;
sub->type = CC_RAW;
return EXIT_SUCCESS;
} }
void flushbuffer (struct lib_ccx_ctx *ctx, struct ccx_s_write *wb, int closefile) void flushbuffer (struct lib_ccx_ctx *ctx, struct ccx_s_write *wb, int closefile)
@ -215,8 +223,8 @@ void writercwtdata (struct lib_cc_decode *ctx, const unsigned char *data, struct
memcpy(cbbuffer, "\x04\x80\x80", 3); // Field 1 padding memcpy(cbbuffer, "\x04\x80\x80", 3); // Field 1 padding
memcpy(cbbuffer+3, "\x05\x80\x80", 3); // Field 2 padding memcpy(cbbuffer+3, "\x05\x80\x80", 3); // Field 2 padding
ctx->writedata(cbheader, 10, ctx->context_cc608_field_1, NULL); ctx->writedata(cbheader, 10, ctx->context_cc608_field_1, sub);
ctx->writedata(cbbuffer, 3 * cbcount, ctx->context_cc608_field_1, NULL); ctx->writedata(cbbuffer, 3 * cbcount, ctx->context_cc608_field_1, sub);
cbcount = 0; cbcount = 0;
cbempty = 0; cbempty = 0;