Mercurial > pt1.oyama
diff src/decoder.c @ 124:9c7bc6c0327e
Add DLNA server function test. (from uShare project)
author | naoyan@johnstown.minaminoshima.org |
---|---|
date | Wed, 29 Sep 2010 23:18:55 +0900 |
parents | recpt1/decoder.c@b6607f6e2851 |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/decoder.c Wed Sep 29 23:18:55 2010 +0900 @@ -0,0 +1,141 @@ +#include <stdlib.h> +#include <stdio.h> + +#include "decoder.h" + +#ifdef HAVE_LIBARIB25 + +decoder * +b25_startup(decoder_options *opt) +{ + decoder *dec = calloc(1, sizeof(decoder)); + int code; + const char *err = NULL; + + dec->b25 = create_arib_std_b25(); + if(!dec->b25) { + err = "create_arib_std_b25 failed"; + goto error; + } + + code = dec->b25->set_multi2_round(dec->b25, opt->round); + if(code < 0) { + err = "set_multi2_round failed"; + goto error; + } + + code = dec->b25->set_strip(dec->b25, opt->strip); + if(code < 0) { + err = "set_strip failed"; + goto error; + } + + code = dec->b25->set_emm_proc(dec->b25, opt->emm); + if(code < 0) { + err = "set_emm_proc failed"; + goto error; + } + + dec->bcas = create_b_cas_card(); + if(!dec->bcas) { + err = "create_b_cas_card failed"; + goto error; + } + code = dec->bcas->init(dec->bcas); + if(code < 0) { + err = "bcas->init failed"; + goto error; + } + + code = dec->b25->set_b_cas_card(dec->b25, dec->bcas); + if(code < 0) { + err = "set_b_cas_card failed"; + goto error; + } + + return dec; + +error: + fprintf(stderr, "%s\n", err); + free(dec); + return NULL; +} + +int +b25_shutdown(decoder *dec) +{ + dec->b25->release(dec->b25); + dec->bcas->release(dec->bcas); + free(dec); + + return 0; +} + +int +b25_decode(decoder *dec, ARIB_STD_B25_BUFFER *sbuf, ARIB_STD_B25_BUFFER *dbuf) +{ + int code; + + code = dec->b25->put(dec->b25, sbuf); + if(code < 0) { + fprintf(stderr, "b25->put failed\n"); + return code; + } + + code = dec->b25->get(dec->b25, dbuf); + if(code < 0) { + fprintf(stderr, "b25->get failed\n"); + return code; + } + + return code; +} + +int +b25_finish(decoder *dec, ARIB_STD_B25_BUFFER *sbuf, ARIB_STD_B25_BUFFER *dbuf) +{ + int code; + + code = dec->b25->flush(dec->b25); + if(code < 0) { + fprintf(stderr, "b25->flush failed\n"); + return code; + } + + code = dec->b25->get(dec->b25, dbuf); + if(code < 0) { + fprintf(stderr, "b25->get failed\n"); + return code; + } + + return code; +} + +#else + +/* functions */ +decoder *b25_startup(decoder_options *opt) +{ + return NULL; +} + +int b25_shutdown(decoder *dec) +{ + return 0; +} + +int b25_decode(decoder *dec, + ARIB_STD_B25_BUFFER *sbuf, + ARIB_STD_B25_BUFFER *dbuf) +{ + return 0; +} + +int b25_finish(decoder *dec, + ARIB_STD_B25_BUFFER *sbuf, + ARIB_STD_B25_BUFFER *dbuf) +{ + return 0; +} + +#endif