summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/libmad/decoder.c
Unidiff
Diffstat (limited to 'core/multimedia/opieplayer/libmad/decoder.c') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmad/decoder.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/core/multimedia/opieplayer/libmad/decoder.c b/core/multimedia/opieplayer/libmad/decoder.c
index b2b6cbb..d039bfb 100644
--- a/core/multimedia/opieplayer/libmad/decoder.c
+++ b/core/multimedia/opieplayer/libmad/decoder.c
@@ -1,15 +1,15 @@
1/* 1/*
2 * libmad - MPEG audio decoder library 2 * libmad - MPEG audio decoder library
3 * Copyright (C) 2000-2001 Robert Leslie 3 * Copyright (C) 2000-2004 Underbit Technologies, Inc.
4 * 4 *
5 * This program is free software; you can redistribute it and/or modify 5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by 6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or 7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version. 8 * (at your option) any later version.
9 * 9 *
10 * This program is distributed in the hope that it will be useful, 10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details. 13 * GNU General Public License for more details.
14 * 14 *
15 * You should have received a copy of the GNU General Public License 15 * You should have received a copy of the GNU General Public License
@@ -43,24 +43,28 @@
43 43
44# include <stdlib.h> 44# include <stdlib.h>
45 45
46# ifdef HAVE_ERRNO_H 46# ifdef HAVE_ERRNO_H
47# include <errno.h> 47# include <errno.h>
48# endif 48# endif
49 49
50# include "stream.h" 50# include "stream.h"
51# include "frame.h" 51# include "frame.h"
52# include "synth.h" 52# include "synth.h"
53# include "decoder.h" 53# include "decoder.h"
54 54
55/*
56 * NAME:decoder->init()
57 * DESCRIPTION:initialize a decoder object with callback routines
58 */
55void mad_decoder_init(struct mad_decoder *decoder, void *data, 59void mad_decoder_init(struct mad_decoder *decoder, void *data,
56 enum mad_flow (*input_func)(void *, 60 enum mad_flow (*input_func)(void *,
57 struct mad_stream *), 61 struct mad_stream *),
58 enum mad_flow (*header_func)(void *, 62 enum mad_flow (*header_func)(void *,
59 struct mad_header const *), 63 struct mad_header const *),
60 enum mad_flow (*filter_func)(void *, 64 enum mad_flow (*filter_func)(void *,
61 struct mad_stream const *, 65 struct mad_stream const *,
62 struct mad_frame *), 66 struct mad_frame *),
63 enum mad_flow (*output_func)(void *, 67 enum mad_flow (*output_func)(void *,
64 struct mad_header const *, 68 struct mad_header const *,
65 struct mad_pcm *), 69 struct mad_pcm *),
66 enum mad_flow (*error_func)(void *, 70 enum mad_flow (*error_func)(void *,
@@ -513,24 +517,28 @@ int run_async(struct mad_decoder *decoder)
513 close(ctop[0]); 517 close(ctop[0]);
514 518
515 decoder->async.in = ptoc[0]; 519 decoder->async.in = ptoc[0];
516 decoder->async.out = ctop[1]; 520 decoder->async.out = ctop[1];
517 521
518 _exit(run_sync(decoder)); 522 _exit(run_sync(decoder));
519 523
520 /* not reached */ 524 /* not reached */
521 return -1; 525 return -1;
522} 526}
523# endif 527# endif
524 528
529/*
530 * NAME:decoder->run()
531 * DESCRIPTION:run the decoder thread either synchronously or asynchronously
532 */
525int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode) 533int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
526{ 534{
527 int result; 535 int result;
528 int (*run)(struct mad_decoder *) = 0; 536 int (*run)(struct mad_decoder *) = 0;
529 537
530 switch (decoder->mode = mode) { 538 switch (decoder->mode = mode) {
531 case MAD_DECODER_MODE_SYNC: 539 case MAD_DECODER_MODE_SYNC:
532 run = run_sync; 540 run = run_sync;
533 break; 541 break;
534 542
535 case MAD_DECODER_MODE_ASYNC: 543 case MAD_DECODER_MODE_ASYNC:
536# if defined(USE_ASYNC) 544# if defined(USE_ASYNC)
@@ -545,24 +553,28 @@ int mad_decoder_run(struct mad_decoder *decoder, enum mad_decoder_mode mode)
545 decoder->sync = malloc(sizeof(*decoder->sync)); 553 decoder->sync = malloc(sizeof(*decoder->sync));
546 if (decoder->sync == 0) 554 if (decoder->sync == 0)
547 return -1; 555 return -1;
548 556
549 result = run(decoder); 557 result = run(decoder);
550 558
551 free(decoder->sync); 559 free(decoder->sync);
552 decoder->sync = 0; 560 decoder->sync = 0;
553 561
554 return result; 562 return result;
555} 563}
556 564
565/*
566 * NAME:decoder->message()
567 * DESCRIPTION:send a message to and receive a reply from the decoder process
568 */
557int mad_decoder_message(struct mad_decoder *decoder, 569int mad_decoder_message(struct mad_decoder *decoder,
558 void *message, unsigned int *len) 570 void *message, unsigned int *len)
559{ 571{
560# if defined(USE_ASYNC) 572# if defined(USE_ASYNC)
561 if (decoder->mode != MAD_DECODER_MODE_ASYNC || 573 if (decoder->mode != MAD_DECODER_MODE_ASYNC ||
562 send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE || 574 send(decoder->async.out, message, *len) != MAD_FLOW_CONTINUE ||
563 receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE) 575 receive(decoder->async.in, &message, len) != MAD_FLOW_CONTINUE)
564 return -1; 576 return -1;
565 577
566 return 0; 578 return 0;
567# else 579# else
568 return -1; 580 return -1;