X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_codec.h;h=8f331652e3e6a68748616ac99a6d9fc759dd33fa;hb=f37b3cb09cd3266e4f50c4aaf754677cc0ea97b8;hp=512dcf3ae652faa9f9564a1e6ab1e67bddaa2e85;hpb=52c18c4dec68158eedd655e0502820b7d7b6128f;p=vlc diff --git a/include/vlc_codec.h b/include/vlc_codec.h index 512dcf3ae6..8f331652e3 100644 --- a/include/vlc_codec.h +++ b/include/vlc_codec.h @@ -1,24 +1,24 @@ /***************************************************************************** * vlc_codec.h: Definition of the decoder and encoder structures ***************************************************************************** - * Copyright (C) 1999-2003 the VideoLAN team + * Copyright (C) 1999-2003 VLC authors and VideoLAN * $Id$ * * Authors: Gildas Bazin * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA. *****************************************************************************/ #ifndef VLC_CODEC_H @@ -71,7 +71,7 @@ struct decoder_t /* */ picture_t * ( * pf_decode_video )( decoder_t *, block_t ** ); - aout_buffer_t * ( * pf_decode_audio )( decoder_t *, block_t ** ); + block_t * ( * pf_decode_audio )( decoder_t *, block_t ** ); subpicture_t * ( * pf_decode_sub) ( decoder_t *, block_t ** ); block_t * ( * pf_packetize ) ( decoder_t *, block_t ** ); @@ -95,22 +95,22 @@ struct decoder_t */ /* Video output callbacks - * XXX use decoder_NewPicture/decoder_DeletePicture - * and decoder_LinkPicture/decoder_UnlinkPicture */ + * XXX use decoder_NewPicture */ + int (*pf_vout_format_update)( decoder_t * ); picture_t *(*pf_vout_buffer_new)( decoder_t * ); - void (*pf_vout_buffer_del)( decoder_t *, picture_t * ); - void (*pf_picture_link) ( decoder_t *, picture_t * ); - void (*pf_picture_unlink) ( decoder_t *, picture_t * ); - /* Audio output callbacks - * XXX use decoder_NewAudioBuffer/decoder_DeleteAudioBuffer */ - aout_buffer_t *(*pf_aout_buffer_new)( decoder_t *, int ); - void (*pf_aout_buffer_del)( decoder_t *, aout_buffer_t * ); + /** + * Number of extra (ie in addition to the DPB) picture buffers + * needed for decoding. + */ + int i_extra_picture_buffers; + + /* Audio output callbacks */ + int (*pf_aout_format_update)( decoder_t * ); /* SPU output callbacks - * XXX use decoder_NewSubpicture and decoder_DeleteSubpicture */ - subpicture_t *(*pf_spu_buffer_new)( decoder_t * ); - void (*pf_spu_buffer_del)( decoder_t *, subpicture_t * ); + * XXX use decoder_NewSubpicture */ + subpicture_t *(*pf_spu_buffer_new)( decoder_t *, const subpicture_updater_t * ); /* Input attachments * XXX use decoder_GetInputAttachments */ @@ -126,6 +126,8 @@ struct decoder_t /* Private structure for the owner of the decoder */ decoder_owner_sys_t *p_owner; + + bool b_error; }; /** @@ -133,7 +135,7 @@ struct decoder_t */ /** - * \defgroup decoder Encoder + * \defgroup encoder Encoder * * The structure describing a Encoder * @@ -155,7 +157,7 @@ struct encoder_t es_format_t fmt_out; block_t * ( * pf_encode_video )( encoder_t *, picture_t * ); - block_t * ( * pf_encode_audio )( encoder_t *, aout_buffer_t * ); + block_t * ( * pf_encode_audio )( encoder_t *, block_t * ); block_t * ( * pf_encode_sub )( encoder_t *, subpicture_t * ); /* Common encoder options */ @@ -174,71 +176,70 @@ struct encoder_t /** - * This function will return a new picture usable by a decoder as an output - * buffer. You have to release it using decoder_DeletePicture or by returning - * it to the caller as a pf_decode_video return value. - */ -VLC_EXPORT( picture_t *, decoder_NewPicture, ( decoder_t * ) ); - -/** - * This function will release a picture create by decoder_NewPicture. - */ -VLC_EXPORT( void, decoder_DeletePicture, ( decoder_t *, picture_t *p_picture ) ); + * This function notifies the video output pipeline of a new video output + * format (fmt_out.video). If there is currently no video output or if the + * video output format has changed, a new audio video will be set up. + * @return 0 if the video output is working, -1 if not. */ +static inline int decoder_UpdateVideoFormat( decoder_t *dec ) +{ + if( dec->pf_vout_format_update != NULL ) + return dec->pf_vout_format_update( dec ); + else + return -1; +} /** - * This function will increase the picture reference count. - * (picture_Hold is not usable.) + * This function will return a new picture usable by a decoder as an output + * buffer. You have to release it using picture_Release() or by returning + * it to the caller as a pf_decode_video return value. */ -VLC_EXPORT( void, decoder_LinkPicture, ( decoder_t *, picture_t * ) ); +VLC_API picture_t * decoder_NewPicture( decoder_t * ) VLC_USED; /** - * This function will decrease the picture reference count. - * (picture_Release is not usable.) - */ -VLC_EXPORT( void, decoder_UnlinkPicture, ( decoder_t *, picture_t * ) ); + * This function notifies the audio output pipeline of a new audio output + * format (fmt_out.audio). If there is currently no audio output or if the + * audio output format has changed, a new audio output will be set up. + * @return 0 if the audio output is working, -1 if not. */ +static inline int decoder_UpdateAudioFormat( decoder_t *dec ) +{ + if( dec->pf_aout_format_update != NULL ) + return dec->pf_aout_format_update( dec ); + else + return -1; +} /** * This function will return a new audio buffer usable by a decoder as an - * output buffer. You have to release it using decoder_DeleteAudioBuffer - * or by returning it to the caller as a pf_decode_audio return value. - */ -VLC_EXPORT( aout_buffer_t *, decoder_NewAudioBuffer, ( decoder_t *, int i_size ) ); - -/** - * This function will release a audio buffer created by decoder_NewAudioBuffer. + * output buffer. It must be released with block_Release() or returned it to + * the caller as a pf_decode_audio return value. */ -VLC_EXPORT( void, decoder_DeleteAudioBuffer, ( decoder_t *, aout_buffer_t *p_buffer ) ); +VLC_API block_t * decoder_NewAudioBuffer( decoder_t *, int i_size ) VLC_USED; /** * This function will return a new subpicture usable by a decoder as an output - * buffer. You have to release it using decoder_DeleteSubpicture or by returning + * buffer. You have to release it using subpicture_Delete() or by returning * it to the caller as a pf_decode_sub return value. */ -VLC_EXPORT( subpicture_t *, decoder_NewSubpicture, ( decoder_t * ) ); - -/** - * This function will release a subpicture created by decoder_NewSubicture. - */ -VLC_EXPORT( void, decoder_DeleteSubpicture, ( decoder_t *, subpicture_t *p_subpicture ) ); +VLC_API subpicture_t * decoder_NewSubpicture( decoder_t *, const subpicture_updater_t * ) VLC_USED; /** * This function gives all input attachments at once. * * You MUST release the returned values */ -VLC_EXPORT( int, decoder_GetInputAttachments, ( decoder_t *, input_attachment_t ***ppp_attachment, int *pi_attachment ) ); +VLC_API int decoder_GetInputAttachments( decoder_t *, input_attachment_t ***ppp_attachment, int *pi_attachment ); /** * This function converts a decoder timestamp into a display date comparable * to mdate(). * You MUST use it *only* for gathering statistics about speed. */ -VLC_EXPORT( mtime_t, decoder_GetDisplayDate, ( decoder_t *, mtime_t ) LIBVLC_USED ); +VLC_API mtime_t decoder_GetDisplayDate( decoder_t *, mtime_t ) VLC_USED; /** * This function returns the current input rate. * You MUST use it *only* for gathering statistics about speed. */ -VLC_EXPORT( int, decoder_GetDisplayRate, ( decoder_t * ) ); +VLC_API int decoder_GetDisplayRate( decoder_t * ) VLC_USED; #endif /* _VLC_CODEC_H */