1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
Fix build with ffmpeg/libav trunk / 0.7
Index: cinelerra/cinelerra/ffmpeg.C
===================================================================
--- cinelerra.orig/cinelerra/ffmpeg.C
+++ cinelerra/cinelerra/ffmpeg.C
@@ -364,12 +364,15 @@ int FFMPEG::decode(uint8_t *data, long d
// NOTE: frame must already have data space allocated
+ AVPacket pkt;
got_picture = 0;
- int length = avcodec_decode_video(context,
+ av_init_packet( &pkt );
+ pkt.data = data;
+ pkt.size = data_size;
+ int length = avcodec_decode_video2(context,
picture,
&got_picture,
- data,
- data_size);
+ &pkt);
if (length < 0) {
printf("FFMPEG::decode error decoding frame\n");
Index: cinelerra/quicktime/qtffmpeg.c
===================================================================
--- cinelerra.orig/quicktime/qtffmpeg.c
+++ cinelerra/quicktime/qtffmpeg.c
@@ -181,6 +181,7 @@ static int decode_wrapper(quicktime_t *f
if(!result)
{
+ AVPacket pkt;
// No way to determine if there was an error based on nonzero status.
@@ -189,11 +190,13 @@ static int decode_wrapper(quicktime_t *f
ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_NONREF /* AVDISCARD_BIDIR */;
else
ffmpeg->decoder_context[current_field]->skip_frame = AVDISCARD_DEFAULT;
- result = avcodec_decode_video(ffmpeg->decoder_context[current_field],
+ av_init_packet( &pkt );
+ pkt.data = ffmpeg->work_buffer;
+ pkt.size = bytes + header_bytes;
+ result = avcodec_decode_video2(ffmpeg->decoder_context[current_field],
&ffmpeg->picture[current_field],
&got_picture,
- ffmpeg->work_buffer,
- bytes + header_bytes);
+ &pkt);
Index: cinelerra/quicktime/wma.c
===================================================================
--- cinelerra.orig/quicktime/wma.c
+++ cinelerra/quicktime/wma.c
@@ -195,11 +195,14 @@ printf("decode 2 %x %llx %llx\n", chunk_
chunk_size);
#else
bytes_decoded = AVCODEC_MAX_AUDIO_FRAME_SIZE;
- result = avcodec_decode_audio2(codec->decoder_context,
+ AVPacket pkt;
+ av_init_packet( &pkt );
+ pkt.data = codec->packet_buffer;
+ pkt.size = chunk_size;
+ result = avcodec_decode_audio3(codec->decoder_context,
(int16_t*)(codec->work_buffer + codec->output_size * sample_size),
&bytes_decoded,
- codec->packet_buffer,
- chunk_size);
+ &pkt);
#endif
pthread_mutex_unlock(&ffmpeg_lock);
|