Changeset feb3362820c541cfe7b31d0dc37fb4b5c4b504cb
- Timestamp:
- 01/04/05 15:28:54
(4 years ago)
- Author:
- Sigmund Augdal Helberg <sigmunau@videolan.org>
- git-committer:
- Sigmund Augdal Helberg <sigmunau@videolan.org> 1112362134 +0000
- git-parent:
[ce596a3b97ea08176761f870c36cdee0dc7c5dd4]
- git-author:
- Sigmund Augdal Helberg <sigmunau@videolan.org> 1112362134 +0000
- Message:
demux/flac.c: support flac files with id3 tag. closes #2015
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r91f2877 |
rfeb3362 |
|
| 57 | 57 | /* Packetizer */ |
|---|
| 58 | 58 | decoder_t *p_packetizer; |
|---|
| | 59 | vlc_meta_t *p_meta; |
|---|
| 59 | 60 | }; |
|---|
| 60 | 61 | |
|---|
| … | … | |
| 68 | 69 | { |
|---|
| 69 | 70 | demux_t *p_demux = (demux_t*)p_this; |
|---|
| | 71 | module_t *p_id3; |
|---|
| 70 | 72 | demux_sys_t *p_sys; |
|---|
| 71 | 73 | int i_peek; |
|---|
| 72 | 74 | byte_t *p_peek; |
|---|
| 73 | 75 | es_format_t fmt; |
|---|
| 74 | | |
|---|
| | 76 | vlc_meta_t *p_meta = NULL; |
|---|
| | 77 | |
|---|
| | 78 | /* Skip/parse possible id3 header */ |
|---|
| | 79 | if( ( p_id3 = module_Need( p_demux, "id3", NULL, 0 ) ) ) |
|---|
| | 80 | { |
|---|
| | 81 | p_meta = (vlc_meta_t *)p_demux->p_private; |
|---|
| | 82 | p_demux->p_private = NULL; |
|---|
| | 83 | module_Unneed( p_demux, p_id3 ); |
|---|
| | 84 | } |
|---|
| | 85 | |
|---|
| 75 | 86 | /* Have a peep at the show. */ |
|---|
| 76 | | if( stream_Peek( p_demux->s, &p_peek, 4 ) < 4 ) return VLC_EGENERIC; |
|---|
| | 87 | if( stream_Peek( p_demux->s, &p_peek, 4 ) < 4 ) |
|---|
| | 88 | { |
|---|
| | 89 | if( p_meta ) vlc_meta_Delete( p_meta ); |
|---|
| | 90 | return VLC_EGENERIC; |
|---|
| | 91 | } |
|---|
| 77 | 92 | |
|---|
| 78 | 93 | if( p_peek[0]!='f' || p_peek[1]!='L' || p_peek[2]!='a' || p_peek[3]!='C' ) |
|---|
| … | … | |
| 80 | 95 | if( strncmp( p_demux->psz_demux, "flac", 4 ) ) |
|---|
| 81 | 96 | { |
|---|
| | 97 | if( p_meta ) vlc_meta_Delete( p_meta ); |
|---|
| 82 | 98 | return VLC_EGENERIC; |
|---|
| 83 | 99 | } |
|---|
| … | … | |
| 92 | 108 | es_format_Init( &fmt, AUDIO_ES, VLC_FOURCC( 'f', 'l', 'a', 'c' ) ); |
|---|
| 93 | 109 | p_sys->b_start = VLC_TRUE; |
|---|
| | 110 | p_sys->p_meta = p_meta; |
|---|
| 94 | 111 | |
|---|
| 95 | 112 | /* We need to read and store the STREAMINFO metadata */ |
|---|
| … | … | |
| 98 | 115 | { |
|---|
| 99 | 116 | msg_Err( p_demux, "this isn't a STREAMINFO metadata block" ); |
|---|
| | 117 | if( p_meta ) vlc_meta_Delete( p_meta ); |
|---|
| 100 | 118 | return VLC_EGENERIC; |
|---|
| 101 | 119 | } |
|---|
| … | … | |
| 104 | 122 | { |
|---|
| 105 | 123 | msg_Err( p_demux, "invalid size for a STREAMINFO metadata block" ); |
|---|
| | 124 | if( p_meta ) vlc_meta_Delete( p_meta ); |
|---|
| 106 | 125 | return VLC_EGENERIC; |
|---|
| 107 | 126 | } |
|---|
| … | … | |
| 141 | 160 | vlc_object_destroy( p_sys->p_packetizer ); |
|---|
| 142 | 161 | msg_Err( p_demux, "cannot find flac packetizer" ); |
|---|
| | 162 | if( p_meta ) vlc_meta_Delete( p_meta ); |
|---|
| 143 | 163 | return VLC_EGENERIC; |
|---|
| 144 | 164 | } |
|---|
| … | … | |
| 165 | 185 | /* Delete the decoder */ |
|---|
| 166 | 186 | vlc_object_destroy( p_sys->p_packetizer ); |
|---|
| 167 | | |
|---|
| | 187 | if( p_sys->p_meta ) vlc_meta_Delete( p_sys->p_meta ); |
|---|
| 168 | 188 | free( p_sys ); |
|---|
| 169 | 189 | } |
|---|
| … | … | |
| 222 | 242 | if( i_query == DEMUX_SET_TIME ) |
|---|
| 223 | 243 | return VLC_EGENERIC; |
|---|
| | 244 | else if( i_query == DEMUX_GET_META ) |
|---|
| | 245 | { |
|---|
| | 246 | vlc_meta_t **pp_meta = (vlc_meta_t **)va_arg( args, vlc_meta_t** ); |
|---|
| | 247 | if( p_demux->p_sys->p_meta ) *pp_meta = vlc_meta_Duplicate( p_demux->p_sys->p_meta ); |
|---|
| | 248 | else *pp_meta = NULL; |
|---|
| | 249 | return VLC_SUCCESS; |
|---|
| | 250 | } |
|---|
| 224 | 251 | else |
|---|
| 225 | 252 | return demux2_vaControlHelper( p_demux->s, |
|---|