Do not transmit MediaCodec flags

Since PTS handling has been fixed, the recorder do not associate a PTS
to a wrong frame anymore, so PTS of "configuration packets" (which never
produce a frame), are never read by the recorder. Therefore, there is no
need to ignore them explicitly, so we can remove the MediaCodec flags
completely.
This commit is contained in:
Romain Vimont 2018-11-11 00:35:53 +01:00
parent 27e8a9a79d
commit 475912a39c
3 changed files with 11 additions and 20 deletions

View file

@ -15,7 +15,6 @@
#include "recorder.h"
#define BUFSIZE 0x10000
#define MEDIA_CODEC_FLAG_CONFIG 2 // MediaCodec.BUFFER_FLAG_CODEC_CONFIG
static inline uint64_t from_be(uint8_t *b, int size)
{
@ -30,7 +29,7 @@ static inline uint64_t from_be(uint8_t *b, int size)
return x;
}
#define HEADER_SIZE 16
#define HEADER_SIZE 12
static int read_packet(void *opaque, uint8_t *buf, int buf_size) {
struct decoder *decoder = opaque;
@ -50,8 +49,7 @@ static int read_packet(void *opaque, uint8_t *buf, int buf_size) {
// read the PTS for the next frame
decoder->next_pts = from_be(header, 8);
decoder->buffer_info_flags = from_be(header + 8, 4);
remaining = from_be(header + 12, 4);
remaining = from_be(header + 8, 4);
}
if (buf_size > remaining)
@ -181,20 +179,15 @@ static int run_decoder(void *data) {
#endif
if (decoder->recorder) {
// do not record configuration packets
// (they contain no media data and have no PTS/DTS)
// FIXME do not use MediaCodec specific flags
if (!(decoder->buffer_info_flags & MEDIA_CODEC_FLAG_CONFIG)) {
packet.pts = decoder->pts;
packet.dts = decoder->pts;
packet.pts = decoder->pts;
packet.dts = decoder->pts;
// no need to rescale with av_packet_rescale_ts(), the timestamps
// are in microseconds both in input and output
if (!recorder_write(decoder->recorder, &packet)) {
LOGE("Could not write frame to output file");
av_packet_unref(&packet);
goto run_quit;
}
// no need to rescale with av_packet_rescale_ts(), the timestamps
// are in microseconds both in input and output
if (!recorder_write(decoder->recorder, &packet)) {
LOGE("Could not write frame to output file");
av_packet_unref(&packet);
goto run_quit;
}
}

View file

@ -17,7 +17,6 @@ struct decoder {
struct recorder *recorder;
uint64_t next_pts;
uint64_t pts;
uint32_t buffer_info_flags;
int remaining;
};

View file

@ -82,7 +82,7 @@ public class ScreenEncoder implements Device.RotationListener {
private boolean encode(MediaCodec codec, FileDescriptor fd) throws IOException {
boolean eof = false;
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
ByteBuffer bBuffer = ByteBuffer.allocate(16);
ByteBuffer bBuffer = ByteBuffer.allocate(12);
while (!consumeRotationChange() && !eof) {
int outputBufferId = codec.dequeueOutputBuffer(bufferInfo, -1);
@ -107,7 +107,6 @@ public class ScreenEncoder implements Device.RotationListener {
}
bBuffer.putLong(pts);
bBuffer.putInt(bufferInfo.flags);
bBuffer.putInt(codecBuffer.remaining());
bBuffer.flip();
IO.writeFully(fd, bBuffer);