123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- --- a/src/format_vorbis.c
- +++ b/src/format_vorbis.c
- @@ -19,7 +19,7 @@
-
- #include <stdlib.h>
- #include <ogg/ogg.h>
- -#include <vorbis/codec.h>
- +#include <tremor/ivorbiscodec.h>
- #include <memory.h>
- #include <string.h>
-
- @@ -34,6 +34,7 @@
- #define CATMODULE "format-vorbis"
- #include "logging.h"
-
- +int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op);
-
- typedef struct vorbis_codec_tag
- {
- @@ -583,3 +584,91 @@ static refbuf_t *process_vorbis_page (og
- return NULL;
- }
-
- +/* Some additional functions from vorbis missing from tremor */
- +
- +static void _v_writestring(oggpack_buffer *o,char *s, int bytes)
- +{
- +
- + while(bytes--){
- + oggpack_write(o,*s++,8);
- + }
- +}
- +
- +static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc)
- +{
- + char temp[]="Xiph.Org libVorbis I 20150104";
- + int bytes = strlen(temp);
- +
- + /* preamble */
- + oggpack_write(opb,0x03,8);
- + _v_writestring(opb,"vorbis", 6);
- +
- + /* vendor */
- + oggpack_write(opb,bytes,32);
- + _v_writestring(opb,temp, bytes);
- +
- + /* comments */
- +
- + oggpack_write(opb,vc->comments,32);
- + if(vc->comments){
- + int i;
- + for(i=0;i<vc->comments;i++){
- + if(vc->user_comments[i]){
- + oggpack_write(opb,vc->comment_lengths[i],32);
- + _v_writestring(opb,vc->user_comments[i], vc->comment_lengths[i]);
- + }else{
- + oggpack_write(opb,0,32);
- + }
- + }
- + }
- + oggpack_write(opb,1,1);
- +
- + return(0);
- +}
- +
- +void vorbis_comment_add(vorbis_comment *vc,char *comment)
- +{
- + vc->user_comments=_ogg_realloc(vc->user_comments,
- + (vc->comments+2)*sizeof(*vc->user_comments));
- + vc->comment_lengths=_ogg_realloc(vc->comment_lengths,
- + (vc->comments+2)*sizeof(*vc->comment_lengths));
- + vc->comment_lengths[vc->comments]=strlen(comment);
- + vc->user_comments[vc->comments]=_ogg_malloc(vc->comment_lengths[vc->comments]+1);
- + strcpy(vc->user_comments[vc->comments], comment);
- + vc->comments++;
- + vc->user_comments[vc->comments]=NULL;
- +}
- +
- +void vorbis_comment_add_tag(vorbis_comment *vc, char *tag, char *contents)
- +{
- + char *comment=alloca(strlen(tag)+strlen(contents)+2); /* +2 for = and \0 */
- + strcpy(comment, tag);
- + strcat(comment, "=");
- + strcat(comment, contents);
- + vorbis_comment_add(vc, comment);
- +
- + return;
- +}
- +
- +int vorbis_commentheader_out(vorbis_comment *vc, ogg_packet *op)
- +{
- + oggpack_buffer opb;
- +
- + oggpack_writeinit(&opb);
- + if(_vorbis_pack_comment(&opb,vc)){
- + oggpack_writeclear(&opb);
- + return OV_EIMPL;
- + }
- +
- + op->packet = _ogg_malloc(oggpack_bytes(&opb));
- + memcpy(op->packet, opb.buffer, oggpack_bytes(&opb));
- +
- + op->bytes=oggpack_bytes(&opb);
- + op->b_o_s=0;
- + op->e_o_s=0;
- + op->granulepos=0;
- + op->packetno=1;
- +
- + oggpack_writeclear(&opb);
- + return 0;
- +}
- --- a/m4/vorbis.m4
- +++ b/m4/vorbis.m4
- @@ -38,9 +38,9 @@ if test "x$vorbis_prefix" != "x$ogg_pref
- ])
- fi
-
- -VORBIS_LIBS="-lvorbis"
- -VORBISFILE_LIBS="-lvorbisfile"
- -VORBISENC_LIBS="-lvorbisenc"
- +VORBIS_LIBS="-lvorbisidec"
- +VORBISFILE_LIBS="-lvorbisidec"
- +VORBISENC_LIBS="-lvorbisidec"
-
- xt_save_LIBS="$LIBS"
- xt_save_LDFLAGS="$LDFLAGS"
- @@ -58,18 +58,6 @@ AC_TRY_LINK_FUNC(ogg_stream_init, [xt_li
- )
- ])
-
- -if test "x$xt_lib_vorbis" = "xok"; then
- -#
- -# Now check if the installed Vorbis is sufficiently new.
- -#
- -AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
- -#include <vorbis/codec.h>
- -#include <vorbis/vorbisenc.h>
- - ], [
- -struct ovectl_ratemanage_arg a;
- -])],,[xt_lib_vorbis="old version found"])
- -AC_MSG_RESULT([$xt_lib_vorbis])
- -fi
- CPPFLAGS="$xt_save_CPPFLAGS"
- LIBS="$xt_save_LIBS"
- LDFLAGS="$xt_save_LDFLAGS"
- --- a/m4/ogg.m4
- +++ b/m4/ogg.m4
- @@ -29,7 +29,7 @@ XIPH_GCC_WARNING([-I$ogg_prefix/include]
- ])
- AC_CACHE_CHECK([for libogg], xt_cv_lib_ogg,
- [dnl
- -OGG_LIBS="-logg"
- +OGG_LIBS="-lvorbisidec"
-
- #
- # check if the installed Ogg is sufficiently new.
|