mirror of
https://projects.vdr-developer.org/git/vdr-plugin-softhddevice.git
synced 2023-10-10 19:16:51 +02:00
Fix bug: CodecVideoDecode destroys avpkt.
This commit is contained in:
parent
23300b0383
commit
f179264468
13
ChangeLog
13
ChangeLog
@ -1,4 +1,17 @@
|
|||||||
User johns
|
User johns
|
||||||
|
Date:
|
||||||
|
|
||||||
|
Fix bug: CodecVideoDecode destroys avpkt.
|
||||||
|
|
||||||
|
Date: Thu Dec 29 00:55:57 CET 2011
|
||||||
|
|
||||||
|
Release Version 0.1.3
|
||||||
|
Add missing VdpauDecoderDestroy.
|
||||||
|
Cleanup video packet ringbuffer.
|
||||||
|
Allow build without VDPAU.
|
||||||
|
Fix bug: swapped end and start.
|
||||||
|
Support other than "PCM" alsa mixer channels.
|
||||||
|
|
||||||
Date: Sat Dec 24 15:26:27 CET 2011
|
Date: Sat Dec 24 15:26:27 CET 2011
|
||||||
|
|
||||||
Release Version 0.1.2
|
Release Version 0.1.2
|
||||||
|
8
Todo
8
Todo
@ -11,7 +11,6 @@ missing:
|
|||||||
vdpau:
|
vdpau:
|
||||||
1080i with temporal spatial too slow GT 520
|
1080i with temporal spatial too slow GT 520
|
||||||
VdpPreemptionCallback handling
|
VdpPreemptionCallback handling
|
||||||
Loose a surface
|
|
||||||
|
|
||||||
libva-intel-driver:
|
libva-intel-driver:
|
||||||
intel still has hangups most with 1080i
|
intel still has hangups most with 1080i
|
||||||
@ -36,7 +35,7 @@ x11:
|
|||||||
|
|
||||||
audio/alsa:
|
audio/alsa:
|
||||||
video/audio asyncron
|
video/audio asyncron
|
||||||
random crash in av_parser_parse2, when switching channels
|
FIXED? random crash in av_parser_parse2, when switching channels
|
||||||
|
|
||||||
playback of >2 channels on 2 channel hardware
|
playback of >2 channels on 2 channel hardware
|
||||||
done?
|
done?
|
||||||
@ -48,6 +47,9 @@ playback of recording
|
|||||||
play back is too fast
|
play back is too fast
|
||||||
|
|
||||||
setup:
|
setup:
|
||||||
Setup menu parameters aren't automatic loaded?
|
Setup of decoder type.
|
||||||
|
Setup of output type.
|
||||||
|
Setup of display type.
|
||||||
|
Setup 4:3 zoom type
|
||||||
Setup parameters are not used until restart.
|
Setup parameters are not used until restart.
|
||||||
Can a notice be added to the setup menu?
|
Can a notice be added to the setup menu?
|
||||||
|
31
codec.c
31
codec.c
@ -483,32 +483,28 @@ void DisplayPts(AVCodecContext * video_ctx, AVFrame * frame)
|
|||||||
**
|
**
|
||||||
** @param decoder video decoder data
|
** @param decoder video decoder data
|
||||||
** @param avpkt video packet
|
** @param avpkt video packet
|
||||||
**
|
|
||||||
** @note this version destroys avpkt!!
|
|
||||||
*/
|
*/
|
||||||
void CodecVideoDecode(VideoDecoder * decoder, AVPacket * avpkt)
|
void CodecVideoDecode(VideoDecoder * decoder, const AVPacket * avpkt)
|
||||||
{
|
{
|
||||||
AVCodecContext *video_ctx;
|
AVCodecContext *video_ctx;
|
||||||
AVFrame *frame;
|
AVFrame *frame;
|
||||||
int used;
|
int used;
|
||||||
int got_frame;
|
int got_frame;
|
||||||
|
AVPacket pkt[1];
|
||||||
|
|
||||||
video_ctx = decoder->VideoCtx;
|
video_ctx = decoder->VideoCtx;
|
||||||
frame = decoder->Frame;
|
frame = decoder->Frame;
|
||||||
|
*pkt = *avpkt; // use copy
|
||||||
|
|
||||||
next_part:
|
next_part:
|
||||||
// FIXME: this function can crash with bad packets
|
// FIXME: this function can crash with bad packets
|
||||||
used = avcodec_decode_video2(video_ctx, frame, &got_frame, avpkt);
|
used = avcodec_decode_video2(video_ctx, frame, &got_frame, pkt);
|
||||||
Debug(4, "%s: %p %d -> %d %d\n", __FUNCTION__, avpkt->data, avpkt->size,
|
Debug(4, "%s: %p %d -> %d %d\n", __FUNCTION__, pkt->data, pkt->size, used,
|
||||||
used, got_frame);
|
got_frame);
|
||||||
|
|
||||||
if (got_frame) { // frame completed
|
if (got_frame) { // frame completed
|
||||||
//DisplayPts(video_ctx, frame);
|
//DisplayPts(video_ctx, frame);
|
||||||
if (video_ctx->hwaccel_context) {
|
|
||||||
VideoRenderFrame(decoder->HwDecoder, video_ctx, frame);
|
VideoRenderFrame(decoder->HwDecoder, video_ctx, frame);
|
||||||
} else {
|
|
||||||
VideoRenderFrame(decoder->HwDecoder, video_ctx, frame);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
// some frames are needed for references, interlaced frames ...
|
// some frames are needed for references, interlaced frames ...
|
||||||
// could happen with h264 dvb streams, just drop data.
|
// could happen with h264 dvb streams, just drop data.
|
||||||
@ -516,23 +512,18 @@ void CodecVideoDecode(VideoDecoder * decoder, AVPacket * avpkt)
|
|||||||
Debug(4, "codec: %8d incomplete interlaced frame %d bytes used\n",
|
Debug(4, "codec: %8d incomplete interlaced frame %d bytes used\n",
|
||||||
video_ctx->frame_number, used);
|
video_ctx->frame_number, used);
|
||||||
}
|
}
|
||||||
if (used != avpkt->size) {
|
if (used != pkt->size) {
|
||||||
if (used == 0) {
|
|
||||||
goto next_part;
|
|
||||||
}
|
|
||||||
if (used >= 0) {
|
if (used >= 0) {
|
||||||
// some tv channels, produce this
|
// some tv channels, produce this
|
||||||
Debug(4,
|
Debug(4,
|
||||||
"codec: ooops didn't use complete video packet used %d of %d\n",
|
"codec: ooops didn't use complete video packet used %d of %d\n",
|
||||||
used, avpkt->size);
|
used, pkt->size);
|
||||||
avpkt->data += used;
|
pkt->data += used;
|
||||||
avpkt->size -= used;
|
pkt->size -= used;
|
||||||
goto next_part;
|
goto next_part;
|
||||||
}
|
}
|
||||||
Debug(3, "codec: bad frame %d\n", used);
|
Debug(3, "codec: bad frame %d\n", used);
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
@ -663,7 +654,7 @@ void CodecAudioClose(AudioDecoder * audio_decoder)
|
|||||||
** @param audio_decoder audio_Decoder data
|
** @param audio_decoder audio_Decoder data
|
||||||
** @param avpkt audio packet
|
** @param avpkt audio packet
|
||||||
*/
|
*/
|
||||||
void CodecAudioDecode(AudioDecoder * audio_decoder, AVPacket * avpkt)
|
void CodecAudioDecode(AudioDecoder * audio_decoder, const AVPacket * avpkt)
|
||||||
{
|
{
|
||||||
int16_t buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 4 +
|
int16_t buf[(AVCODEC_MAX_AUDIO_FRAME_SIZE * 3) / 4 +
|
||||||
FF_INPUT_BUFFER_PADDING_SIZE] __attribute__ ((aligned(16)));
|
FF_INPUT_BUFFER_PADDING_SIZE] __attribute__ ((aligned(16)));
|
||||||
|
4
codec.h
4
codec.h
@ -47,7 +47,7 @@ extern void CodecVideoOpen(VideoDecoder *, const char *, int);
|
|||||||
extern void CodecVideoClose(VideoDecoder *);
|
extern void CodecVideoClose(VideoDecoder *);
|
||||||
|
|
||||||
/// Decode a video packet
|
/// Decode a video packet
|
||||||
extern void CodecVideoDecode(VideoDecoder *, AVPacket * pkt);
|
extern void CodecVideoDecode(VideoDecoder *, const AVPacket * pkt);
|
||||||
|
|
||||||
/// Allocate a new audio decoder context.
|
/// Allocate a new audio decoder context.
|
||||||
extern AudioDecoder *CodecAudioNewDecoder(void);
|
extern AudioDecoder *CodecAudioNewDecoder(void);
|
||||||
@ -59,7 +59,7 @@ extern void CodecAudioOpen(AudioDecoder *, const char *, int);
|
|||||||
extern void CodecAudioClose(AudioDecoder *);
|
extern void CodecAudioClose(AudioDecoder *);
|
||||||
|
|
||||||
/// Decode an audio packet
|
/// Decode an audio packet
|
||||||
extern void CodecAudioDecode(AudioDecoder *, AVPacket * pkt);
|
extern void CodecAudioDecode(AudioDecoder *, const AVPacket * pkt);
|
||||||
|
|
||||||
/// Setup and initialize codec module.
|
/// Setup and initialize codec module.
|
||||||
extern void CodecInit(void);
|
extern void CodecInit(void);
|
||||||
|
@ -44,7 +44,11 @@
|
|||||||
|
|
||||||
static char BrokenThreadsAndPlugins; ///< broken vdr threads and plugins
|
static char BrokenThreadsAndPlugins; ///< broken vdr threads and plugins
|
||||||
|
|
||||||
|
#ifdef USE_VDPAU
|
||||||
static char ConfigVdpauDecoder = 1; ///< use vdpau decoder, if possible
|
static char ConfigVdpauDecoder = 1; ///< use vdpau decoder, if possible
|
||||||
|
#else
|
||||||
|
#define ConfigVdpauDecoder 0 ///< no vdpau decoder configured
|
||||||
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////
|
||||||
// Audio
|
// Audio
|
||||||
|
Loading…
Reference in New Issue
Block a user