Browse Source

lavf/ogg: Support for end trimming Opus

Adding support for end trimming Opus embedded in Ogg container.

Signed-Off By: Vignesh Venkatasubramanian <vigneshv@google.com>

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
tags/n2.1
Vignesh Venkatasubramanian Michael Niedermayer 12 years ago
parent
commit
23637f98f4
3 changed files with 15 additions and 0 deletions
  1. +13
    -0
      libavformat/oggdec.c
  2. +1
    -0
      libavformat/oggdec.h
  3. +1
    -0
      libavformat/oggparseopus.c

+ 13
- 0
libavformat/oggdec.c View File

@@ -30,6 +30,7 @@


#include <stdio.h> #include <stdio.h>
#include "libavutil/avassert.h" #include "libavutil/avassert.h"
#include "libavutil/intreadwrite.h"
#include "oggdec.h" #include "oggdec.h"
#include "avformat.h" #include "avformat.h"
#include "internal.h" #include "internal.h"
@@ -773,6 +774,18 @@ retry:
pkt->duration = os->pduration; pkt->duration = os->pduration;
pkt->pos = fpos; pkt->pos = fpos;


if (os->end_trimming) {
uint8_t *side_data = av_packet_new_side_data(pkt,
AV_PKT_DATA_SKIP_SAMPLES,
10);
if(side_data == NULL) {
av_free_packet(pkt);
av_free(pkt);
return AVERROR(ENOMEM);
}
AV_WL32(side_data + 4, os->end_trimming);
}

return psize; return psize;
} }




+ 1
- 0
libavformat/oggdec.h View File

@@ -84,6 +84,7 @@ struct ogg_stream {
int got_start; int got_start;
int got_data; ///< 1 if the stream got some data (non-initial packets), 0 otherwise int got_data; ///< 1 if the stream got some data (non-initial packets), 0 otherwise
int nb_header; ///< set to the number of parsed headers int nb_header; ///< set to the number of parsed headers
int end_trimming; ///< set the number of packets to drop from the end
void *private; void *private;
}; };




+ 1
- 0
libavformat/oggparseopus.c View File

@@ -118,6 +118,7 @@ static int opus_packet(AVFormatContext *avf, int idx)
skip = FFMIN(skip, os->pduration); skip = FFMIN(skip, os->pduration);
if (skip > 0) { if (skip > 0) {
os->pduration = skip < os->pduration ? os->pduration - skip : 1; os->pduration = skip < os->pduration ? os->pduration - skip : 1;
os->end_trimming = skip;
av_log(avf, AV_LOG_WARNING, av_log(avf, AV_LOG_WARNING,
"Last packet must be truncated to %d (unimplemented).\n", "Last packet must be truncated to %d (unimplemented).\n",
os->pduration); os->pduration);


Loading…
Cancel
Save