~ubuntu-branches/debian/wheezy/vlc/wheezy

« back to all changes in this revision

Viewing changes to modules/misc/dummy/decoder.c

Tags: upstream-0.7.2.final
ImportĀ upstreamĀ versionĀ 0.7.2.final

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*****************************************************************************
 
2
 * decoder.c: dummy decoder plugin for vlc.
 
3
 *****************************************************************************
 
4
 * Copyright (C) 2002 VideoLAN
 
5
 * $Id: decoder.c 6961 2004-03-05 17:34:23Z sam $
 
6
 *
 
7
 * Authors: Samuel Hocevar <sam@zoy.org>
 
8
 *
 
9
 * This program is free software; you can redistribute it and/or modify
 
10
 * it under the terms of the GNU General Public License as published by
 
11
 * the Free Software Foundation; either version 2 of the License, or
 
12
 * (at your option) any later version.
 
13
 *
 
14
 * This program is distributed in the hope that it will be useful,
 
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
17
 * GNU General Public License for more details.
 
18
 *
 
19
 * You should have received a copy of the GNU General Public License
 
20
 * along with this program; if not, write to the Free Software
 
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
 
22
 *****************************************************************************/
 
23
 
 
24
/*****************************************************************************
 
25
 * Preamble
 
26
 *****************************************************************************/
 
27
#include <vlc/vlc.h>
 
28
#include <vlc/decoder.h>
 
29
 
 
30
#ifdef HAVE_UNISTD_H
 
31
#   include <unistd.h> /* write(), close() */
 
32
#elif defined( WIN32 ) && !defined( UNDER_CE )
 
33
#   include <io.h>
 
34
#endif
 
35
#ifdef HAVE_SYS_TYPES_H
 
36
#   include <sys/types.h> /* open() */
 
37
#endif
 
38
#ifdef HAVE_SYS_STAT_H
 
39
#   include <sys/stat.h>
 
40
#endif
 
41
#ifdef HAVE_FCNTL_H
 
42
#   include <fcntl.h>
 
43
#endif
 
44
 
 
45
#ifdef HAVE_LIMITS_H
 
46
#   include <limits.h> /* PATH_MAX */
 
47
#endif
 
48
 
 
49
#include <stdio.h> /* sprintf() */
 
50
 
 
51
/*****************************************************************************
 
52
 * decoder_sys_t : theora decoder descriptor
 
53
 *****************************************************************************/
 
54
struct decoder_sys_t
 
55
{
 
56
    int i_fd;
 
57
};
 
58
 
 
59
/*****************************************************************************
 
60
 * Local prototypes
 
61
 *****************************************************************************/
 
62
static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block );
 
63
 
 
64
/*****************************************************************************
 
65
 * OpenDecoder: Open the decoder
 
66
 *****************************************************************************/
 
67
int E_(OpenDecoder) ( vlc_object_t *p_this )
 
68
{
 
69
    decoder_t *p_dec = (decoder_t*)p_this;
 
70
    decoder_sys_t *p_sys;
 
71
    char psz_file[ PATH_MAX ];
 
72
    vlc_value_t val;
 
73
 
 
74
    /* Allocate the memory needed to store the decoder's structure */
 
75
    if( ( p_dec->p_sys = p_sys =
 
76
          (decoder_sys_t *)malloc(sizeof(decoder_sys_t)) ) == NULL )
 
77
    {
 
78
        msg_Err( p_dec, "out of memory" );
 
79
        return VLC_EGENERIC;
 
80
    }
 
81
 
 
82
    sprintf( psz_file, "stream.%i", p_dec->i_object_id );
 
83
 
 
84
#ifndef UNDER_CE
 
85
    var_Create( p_dec, "dummy-save-es", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
 
86
    var_Get( p_dec, "dummy-save-es", &val );
 
87
    if( val.b_bool )
 
88
    {
 
89
        p_sys->i_fd = open( psz_file, O_WRONLY | O_CREAT | O_TRUNC, 00644 );
 
90
 
 
91
        if( p_sys->i_fd == -1 )
 
92
        {
 
93
            msg_Err( p_dec, "cannot create `%s'", psz_file );
 
94
            return VLC_EGENERIC;
 
95
        }
 
96
 
 
97
        msg_Dbg( p_dec, "dumping stream to file `%s'", psz_file );
 
98
    }
 
99
    else
 
100
#endif
 
101
    {
 
102
        p_sys->i_fd = -1;
 
103
    }
 
104
 
 
105
    /* Set callbacks */
 
106
    p_dec->pf_decode_video = (picture_t *(*)(decoder_t *, block_t **))
 
107
        DecodeBlock;
 
108
    p_dec->pf_decode_audio = (aout_buffer_t *(*)(decoder_t *, block_t **))
 
109
        DecodeBlock;
 
110
 
 
111
    return VLC_SUCCESS;
 
112
}
 
113
 
 
114
/****************************************************************************
 
115
 * RunDecoder: the whole thing
 
116
 ****************************************************************************
 
117
 * This function must be fed with ogg packets.
 
118
 ****************************************************************************/
 
119
static void *DecodeBlock( decoder_t *p_dec, block_t **pp_block )
 
120
{
 
121
    decoder_sys_t *p_sys = p_dec->p_sys;
 
122
    block_t *p_block;
 
123
 
 
124
    if( !pp_block || !*pp_block ) return NULL;
 
125
    p_block = *pp_block;
 
126
 
 
127
    if( p_sys->i_fd >= 0 && p_block->i_buffer )
 
128
    {
 
129
#ifndef UNDER_CE
 
130
        write( p_sys->i_fd, p_block->p_buffer, p_block->i_buffer );
 
131
#endif
 
132
 
 
133
        msg_Dbg( p_dec, "dumped %i bytes", p_block->i_buffer );
 
134
    }
 
135
 
 
136
    block_Release( p_block );
 
137
    return NULL;
 
138
}
 
139
 
 
140
/*****************************************************************************
 
141
 * CloseDecoder: decoder destruction
 
142
 *****************************************************************************/
 
143
void E_(CloseDecoder) ( vlc_object_t *p_this )
 
144
{
 
145
    decoder_t *p_dec = (decoder_t *)p_this;
 
146
    decoder_sys_t *p_sys = p_dec->p_sys;
 
147
 
 
148
#ifndef UNDER_CE
 
149
    if( p_sys->i_fd >= 0 ) close( p_sys->i_fd );
 
150
#endif
 
151
 
 
152
    free( p_sys );
 
153
}